From 9eb741dcc29e069b72bb516aa5f9d2469bc745be Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 09:40:17 +0200 Subject: [PATCH 01/69] Add control test runner --- bun.lock | 3423 ++++++++++++----- package.json | 3 + scripts/dev-tools/src/cli.ts | 6 + scripts/dev-tools/src/commands/control.ts | 17 + src/systems/cargo/service/control.toml | 50 + .../cargo/service/src/test/preload-env.ts | 17 + src/systems/cargo/service/src/test/setup.ts | 12 +- src/systems/forge/service/control.toml | 45 + src/systems/function-bay/service/control.toml | 56 + .../origin/apps/code-bucket/Dockerfile | 2 +- .../origin/apps/code-bucket/control.toml | 25 + src/systems/origin/apps/service/control.toml | 54 + .../origin/apps/service/dev.Dockerfile | 17 +- src/systems/shuttle/service/control.toml | 82 + src/systems/signal/service/control.toml | 37 + src/systems/slates/apps/hub/control.toml | 101 + src/systems/slates/apps/registry/control.toml | 39 + src/systems/slates/apps/registry/package.json | 1 + src/systems/subspace/apps/controller/.env.ci | 16 +- .../subspace/apps/controller/control.toml | 216 ++ .../src/connection/tests/mcp.e2e.test.ts | 59 +- .../src/controllers/tests/skill.e2e.test.ts | 80 +- .../apps/controller/src/test/setup.ts | 4 + .../subspace/apps/controller/vitest.config.ts | 1 + src/systems/subspace/init-test-db.sh | 2 +- .../src/lib/toolFilter.test.ts | 94 +- .../provider-internal/src/lib/toolFilter.ts | 41 +- .../modules/skills/src/definitions/plain.ts | 8 + .../subspace/modules/skills/src/index.ts | 3 + .../modules/skills/src/lib/template.ts | 7 +- .../modules/skills/src/services/skill.ts | 4 +- .../provider-utils/src/providerTypes.ts | 4 + src/tooling/control/mocks/Dockerfile | 7 + .../control/mocks/object-store/server.ts | 52 + src/tooling/control/mocks/relay/server.ts | 51 + src/tooling/control/mocks/voyager/server.ts | 77 + src/tooling/control/package.json | 22 + src/tooling/control/src/cli.ts | 240 ++ src/tooling/control/src/compose/generator.ts | 372 ++ src/tooling/control/src/discovery.ts | 52 + src/tooling/control/src/entrypoint.ts | 80 + src/tooling/control/src/errors.ts | 226 ++ src/tooling/control/src/graph/env.ts | 24 + src/tooling/control/src/graph/format.ts | 116 + src/tooling/control/src/graph/planner.ts | 135 + src/tooling/control/src/graph/resolver.ts | 157 + src/tooling/control/src/log/formatRunPlan.ts | 94 + src/tooling/control/src/log/index.ts | 55 + src/tooling/control/src/registry.ts | 191 + src/tooling/control/src/run/runner.ts | 356 ++ src/tooling/control/src/types.ts | 178 + src/tooling/control/tsconfig.json | 12 + 52 files changed, 5985 insertions(+), 1038 deletions(-) create mode 100644 scripts/dev-tools/src/commands/control.ts create mode 100644 src/systems/cargo/service/control.toml create mode 100644 src/systems/cargo/service/src/test/preload-env.ts create mode 100644 src/systems/forge/service/control.toml create mode 100644 src/systems/function-bay/service/control.toml create mode 100644 src/systems/origin/apps/code-bucket/control.toml create mode 100644 src/systems/origin/apps/service/control.toml create mode 100644 src/systems/shuttle/service/control.toml create mode 100644 src/systems/signal/service/control.toml create mode 100644 src/systems/slates/apps/hub/control.toml create mode 100644 src/systems/slates/apps/registry/control.toml create mode 100644 src/systems/subspace/apps/controller/control.toml create mode 100644 src/tooling/control/mocks/Dockerfile create mode 100644 src/tooling/control/mocks/object-store/server.ts create mode 100644 src/tooling/control/mocks/relay/server.ts create mode 100644 src/tooling/control/mocks/voyager/server.ts create mode 100644 src/tooling/control/package.json create mode 100755 src/tooling/control/src/cli.ts create mode 100644 src/tooling/control/src/compose/generator.ts create mode 100644 src/tooling/control/src/discovery.ts create mode 100644 src/tooling/control/src/entrypoint.ts create mode 100644 src/tooling/control/src/errors.ts create mode 100644 src/tooling/control/src/graph/env.ts create mode 100644 src/tooling/control/src/graph/format.ts create mode 100644 src/tooling/control/src/graph/planner.ts create mode 100644 src/tooling/control/src/graph/resolver.ts create mode 100644 src/tooling/control/src/log/formatRunPlan.ts create mode 100644 src/tooling/control/src/log/index.ts create mode 100644 src/tooling/control/src/registry.ts create mode 100644 src/tooling/control/src/run/runner.ts create mode 100644 src/tooling/control/src/types.ts create mode 100644 src/tooling/control/tsconfig.json diff --git a/bun.lock b/bun.lock index a97620b2a..5e6e608cf 100644 --- a/bun.lock +++ b/bun.lock @@ -1,6 +1,5 @@ { "lockfileVersion": 1, - "configVersion": 0, "workspaces": { "": { "name": "@metorial/oss", @@ -166,6 +165,8 @@ "dependencies": { "@lowerdeck/error": "^1.2.3", "@lowerdeck/validation": "^1.0.10", + "@metorial/config": "1.0.0", + "@metorial/db": "1.0.0", "@metorial/module-consumer": "1.0.0", "@metorial/rpc": "1.0.0", }, @@ -620,6 +621,7 @@ "@lowerdeck/slugify": "^1.0.6", "@metorial/config": "^1.0.0", "@metorial/context": "^1.0.0", + "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", "@metorial/fabric": "^1.0.0", "@metorial/id": "^1.0.0", @@ -801,6 +803,7 @@ "@radix-ui/react-popover": "^1.1.15", "@remixicon/react": "^4.2.0", "@sentry/react": "^8.54.0", + "@tanstack/react-virtual": "^3.13.12", "@tiptap/extension-color": "^3.6.1", "@tiptap/extension-highlight": "^3.6.1", "@tiptap/extension-horizontal-rule": "^3.6.1", @@ -1098,7 +1101,7 @@ "name": "@metorial/cron", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@metorial/queue": "^1.0.0", }, "devDependencies": { @@ -1538,7 +1541,7 @@ "name": "@metorial-platform-systems/ares-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", }, "devDependencies": { "tsup": "^8.5.1", @@ -1550,7 +1553,7 @@ "name": "@metorial-platform-systems/cargo-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@types/bun": "^1.3.7", }, "devDependencies": { @@ -1564,7 +1567,7 @@ "name": "@metorial-platform-systems/forge-client", "version": "1.0.4", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/validation": "^1.0.10", "@metorial/util-websocket": "^1.0.0", "@types/bun": "^1.3.7", @@ -1580,7 +1583,7 @@ "name": "@metorial-platform-systems/function-bay-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", }, "devDependencies": { "@types/minimatch": "^5", @@ -1593,7 +1596,7 @@ "name": "@metorial-platform-systems/origin-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", }, "devDependencies": { "@types/node": "^25.0.3", @@ -1607,7 +1610,7 @@ "name": "@metorial-platform-systems/shuttle-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/validation": "^1.0.10", "@metorial/util-websocket": "^1.0.0", "@types/bun": "^1.3.7", @@ -1623,7 +1626,7 @@ "name": "@metorial-platform-systems/signal-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/validation": "^1.0.10", }, "devDependencies": { @@ -1637,7 +1640,7 @@ "name": "@metorial-platform-systems/slates-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/validation": "^1.0.10", "@metorial-platform-systems/function-bay-client": "workspace:*", }, @@ -1652,7 +1655,7 @@ "name": "@metorial-platform-systems/subspace-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/validation": "^1.0.10", }, "devDependencies": { @@ -1666,7 +1669,7 @@ "name": "@metorial-platform-systems/synthesis-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", }, "devDependencies": { "@types/minimatch": "^5", @@ -1686,7 +1689,7 @@ "@lowerdeck/api-mux": "^1.0.4", "@lowerdeck/cache": "^1.0.2", "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/encryption": "^1.0.8", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", @@ -1700,7 +1703,7 @@ "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/programmable-promise": "^1.0.6", "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/service": "^1.0.7", @@ -1776,7 +1779,7 @@ "name": "@metorial-cargo/module-doc", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/error": "^1.2.3", "@lowerdeck/hono": "^1.0.10", "@lowerdeck/id": "^1.0.8", @@ -1803,7 +1806,7 @@ "dependencies": { "@lowerdeck/api-mux": "^1.0.4", "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/error": "^1.2.3", "@lowerdeck/execution-context": "^1.1.1", @@ -1874,7 +1877,7 @@ "name": "@metorial-cargo/module-store", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/error": "^1.2.3", "@lowerdeck/hash": "^1.0.4", "@lowerdeck/pagination": "^1.0.8", @@ -1909,7 +1912,7 @@ "dependencies": { "@lowerdeck/api-mux": "^1.0.4", "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", @@ -1921,7 +1924,7 @@ "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/queue": "^1.0.11", "@lowerdeck/redis": "^1.0.6", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", @@ -1961,7 +1964,7 @@ "@aws-sdk/client-codebuild": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/encryption": "^1.0.8", "@lowerdeck/env": "^1.0.6", @@ -1972,7 +1975,7 @@ "@lowerdeck/once": "^1.0.4", "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/service": "^1.0.7", @@ -2004,6 +2007,22 @@ "typescript": "^5", }, }, + "src/systems/function-bay/packages/build": { + "name": "@function-bay/build", + "version": "1.0.0", + "dependencies": { + "@function-bay/utils": "^1.0.0", + "@lowerdeck/env": "^1.0.4", + "@lowerdeck/validation": "^1.0.4", + "jszip": "^3.10.1", + }, + "devDependencies": { + "@function-bay/tsconfig": "^1.0.0", + "microbundle": "^0.15.1", + "typescript": "^5.5.3", + "vitest": "4.0.17", + }, + }, "src/systems/function-bay/packages/function-bay": { "name": "function-bay", "version": "1.0.16", @@ -2090,7 +2109,7 @@ "@lowerdeck/api-mux": "^1.0.4", "@lowerdeck/cache": "^1.0.2", "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/encryption": "^1.0.8", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", @@ -2099,7 +2118,7 @@ "@lowerdeck/once": "^1.0.4", "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/service": "^1.0.7", @@ -2207,7 +2226,7 @@ "@lowerdeck/api-mux": "^1.0.4", "@lowerdeck/cache": "^1.0.2", "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/encryption": "^1.0.8", "@lowerdeck/env": "^1.0.6", @@ -2218,7 +2237,7 @@ "@lowerdeck/once": "^1.0.4", "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/service": "^1.0.7", @@ -2321,7 +2340,7 @@ "@lowerdeck/api-mux": "^1.0.4", "@lowerdeck/cache": "^1.0.2", "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/encryption": "^1.0.8", "@lowerdeck/env": "^1.0.6", @@ -2335,7 +2354,7 @@ "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/programmable-promise": "^1.0.6", "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/service": "^1.0.7", @@ -2390,7 +2409,7 @@ "@lowerdeck/api-mux": "^1.0.4", "@lowerdeck/cache": "^1.0.2", "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/encryption": "^1.0.8", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", @@ -2399,7 +2418,7 @@ "@lowerdeck/once": "^1.0.4", "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/service": "^1.0.7", @@ -2443,7 +2462,7 @@ "@lowerdeck/api-mux": "^1.0.4", "@lowerdeck/cache": "^1.0.2", "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/encryption": "^1.0.8", "@lowerdeck/env": "^1.0.6", @@ -2456,7 +2475,7 @@ "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/programmable-promise": "^1.0.6", "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", @@ -2529,7 +2548,7 @@ "@lowerdeck/api-mux": "^1.0.4", "@lowerdeck/cache": "^1.0.2", "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/encryption": "^1.0.8", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", @@ -2540,7 +2559,7 @@ "@lowerdeck/once": "^1.0.4", "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/service": "^1.0.7", @@ -2596,7 +2615,7 @@ "name": "@metorial-services/slates-registry-client", "version": "1.0.1", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", }, "devDependencies": { "dts-bundle-generator": "^9.5.1", @@ -2609,7 +2628,7 @@ "name": "@metorial-services/slates-registry-internal-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", }, "devDependencies": { "dts-bundle-generator": "^9.5.1", @@ -2629,7 +2648,7 @@ "@lowerdeck/hono": "^1.0.10", "@lowerdeck/id": "^1.0.8", "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", @@ -2688,7 +2707,7 @@ "@lowerdeck/hono": "^1.0.10", "@lowerdeck/id": "^1.0.8", "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/rpc-client": "^1.1.3", + "@lowerdeck/rpc-client": "^1.1.4", "@lowerdeck/rpc-server": "^1.0.11", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", @@ -2862,7 +2881,7 @@ "name": "@metorial-subspace/module-auth", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", "@lowerdeck/lock": "^1.0.6", @@ -2891,7 +2910,7 @@ "version": "1.0.0", "dependencies": { "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", "@lowerdeck/pagination": "^1.0.8", @@ -2912,7 +2931,7 @@ "name": "@metorial-subspace/module-catalog", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", "@lowerdeck/id": "^1.0.8", @@ -2940,7 +2959,7 @@ "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/case": "^1.0.9", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", "@lowerdeck/hash": "^1.0.4", @@ -2978,7 +2997,7 @@ "name": "@metorial-subspace/module-custom-provider", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", "@lowerdeck/lock": "^1.0.6", @@ -3029,7 +3048,7 @@ "name": "@metorial-subspace/module-identity", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", @@ -3060,7 +3079,7 @@ "version": "1.0.0", "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", "@lowerdeck/id": "^1.0.8", @@ -3092,7 +3111,7 @@ "version": "1.0.0", "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", @@ -3189,7 +3208,7 @@ "version": "1.0.0", "dependencies": { "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", "@lowerdeck/id": "^1.0.8", @@ -3198,6 +3217,7 @@ "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/connection-utils": "^1.0.0", "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", @@ -3262,6 +3282,7 @@ }, "devDependencies": { "@types/bun": "latest", + "vitest": "^3.1.2", }, "peerDependencies": { "typescript": "^5", @@ -3370,7 +3391,7 @@ "version": "1.0.0", "dependencies": { "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", @@ -3406,7 +3427,7 @@ "version": "1.0.0", "dependencies": { "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.2", + "@lowerdeck/cron": "^1.1.3", "@lowerdeck/delay": "^1.0.4", "@lowerdeck/env": "^1.0.6", "@lowerdeck/error": "^1.2.3", @@ -3505,6 +3526,22 @@ "typescript": "^5", }, }, + "src/tooling/control": { + "name": "@metorial/control", + "version": "0.1.0", + "bin": { + "control": "./src/cli.ts", + }, + "dependencies": { + "sade": "^1.8.1", + "smol-toml": "^1.3.1", + "yaml": "^2.8.2", + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "5.8.2", + }, + }, }, "overrides": { "@aws-sdk/client-cognito-identity": "3.1048.0", @@ -4040,7 +4077,7 @@ "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], - "@function-bay/build": ["@function-bay/build@1.0.0", "", { "dependencies": { "@function-bay/utils": "^1.0.0", "@lowerdeck/env": "^1.0.4", "@lowerdeck/validation": "^1.0.4", "jszip": "^3.10.1" } }, "sha512-wW9G+eQ5EnzqBJcsxI4B1uCYh8JtX57EeSgumw6hU45dxgbCD/YGxX2tlrkydWtxO9j8B1AkAQqp/QcEg1OBUQ=="], + "@function-bay/build": ["@function-bay/build@workspace:src/systems/function-bay/packages/build"], "@function-bay/nodejs": ["@function-bay/nodejs@workspace:src/systems/function-bay/packages/nodejs"], @@ -4182,7 +4219,7 @@ "@lowerdeck/case": ["@lowerdeck/case@1.0.9", "", {}, "sha512-nyKaHgj6UDRtzfRWeGA01H1S/tGpaFc28U8aeWaDTLnEcuXbZfspv78kfo+S7ZEeIkth+klz1pUEhhIUUOiEkA=="], - "@lowerdeck/cron": ["@lowerdeck/cron@1.1.2", "", { "dependencies": { "@lowerdeck/execution-context": "^1.1.1", "@lowerdeck/id": "^1.0.8", "@lowerdeck/queue": "^1.0.11", "@lowerdeck/redis": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "bullmq": "^5.34.3" } }, "sha512-GSbsjoFwF4tzmwpGIQkfXZuZhUF1/GVRFmInKC5CMa5ObIztZENioOZRLAF83lKaNFs8Atgx1eJMQkWZQ98u4Q=="], + "@lowerdeck/cron": ["@lowerdeck/cron@1.1.3", "", { "dependencies": { "@lowerdeck/execution-context": "^1.1.1", "@lowerdeck/id": "^1.0.8", "@lowerdeck/queue": "^1.0.11", "@lowerdeck/redis": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "bullmq": "^5.34.3" } }, "sha512-fiYQ6xkwG43M2rnqJM/KdUhp1IVk+6HMKwpYi49gJ6AX7MUVx66V2+tr0RX/vsqLyHjIPk7pydjUV7dFu0pbMQ=="], "@lowerdeck/delay": ["@lowerdeck/delay@1.0.4", "", {}, "sha512-rdXFPnNVnOfO5ZXc6RqcOV8C1gYcGdc0ri0rrYX27NuBqLj5xt7LgFA1h47no5j35pJwLBBdmVmaNMRV/pCAlg=="], @@ -4228,7 +4265,7 @@ "@lowerdeck/redis": ["@lowerdeck/redis@1.0.6", "", { "dependencies": { "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/random-number": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "ioredis": "^5.8.2", "p-queue": "^9.0.1", "redis": "^5.10.0" } }, "sha512-o6pD9ynMoFUyVa846Dhnp46Cb9L/Ktv+o2O2q43XYRh+7boQc/01hV9zHv/HG/7Tk5ZqDk2uBDdCpQ4/xMMDVg=="], - "@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], + "@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.4", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.3", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-d4tZsXDp7hxNLVU191Qkhry+dZUveUh7aejDBevAPB05fT+O5IyDgpo5E0TOpSh2/7zq1Ww6wMdIJXUchptYkA=="], "@lowerdeck/rpc-server": ["@lowerdeck/rpc-server@1.0.11", "", { "dependencies": { "@lowerdeck/error": "^1.2.3", "@lowerdeck/execution-context": "^1.1.1", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", "@lowerdeck/telemetry": "^1.1.1", "@lowerdeck/validation": "^1.0.10", "cookie": "^1.1.1" } }, "sha512-huTBKKqXyEaaHuVnI4KDyZuMmCefeTDMhAiEkOsiQnpZ0taRbcdU7ogybu8Et1g87xtIcBVsMepxFho8xsYDxw=="], @@ -4428,6 +4465,8 @@ "@metorial/context": ["@metorial/context@workspace:src/packages/server/context"], + "@metorial/control": ["@metorial/control@workspace:src/tooling/control"], + "@metorial/cron": ["@metorial/cron@workspace:src/packages/backend/cron"], "@metorial/dashboard-sdk": ["@metorial/dashboard-sdk@workspace:clients/metorial-dashboard"], @@ -5204,6 +5243,10 @@ "@svgdotjs/svg.select.js": ["@svgdotjs/svg.select.js@4.0.3", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg=="], + "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.25", "", { "dependencies": { "@tanstack/virtual-core": "3.15.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-bmNoqMu6gcAW9JGrKVB0Q1tN1i5RONZF8r1fW0bbE4Oyf3DwEGnzzQJ2OW+Ozg1P4s8PyugkHg2ULZoFQN+cqw=="], + + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.15.0", "", {}, "sha512-0AwPGx0I8QxPYjAxShT/+z+ZOe9u8mW5rsXvivCTjRfRmz9a43+3mRyi4wwlyoUqOC56q/jatKa0Bh9M99BEHQ=="], + "@tediousjs/connection-string": ["@tediousjs/connection-string@0.5.0", "", {}, "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ=="], "@tiptap/core": ["@tiptap/core@3.6.1", "", { "peerDependencies": { "@tiptap/pm": "^3.6.1" } }, "sha512-Ascvlh0PmScOJyPxcgPOqFLSOruY/7JjPYdTyqShOIks1S2dr3w8A07omQCmeEHI0mX9L2eZyR2qXwFlyMdfEA=="], @@ -5556,21 +5599,21 @@ "@vitest/coverage-v8": ["@vitest/coverage-v8@4.1.2", "", { "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.2", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magicast": "^0.5.2", "obug": "^2.1.1", "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "@vitest/browser": "4.1.2", "vitest": "4.1.2" }, "optionalPeers": ["@vitest/browser"] }, "sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg=="], - "@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], - "@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], - "@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], - "@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], - "@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], - "@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], "@vitest/ui": ["@vitest/ui@4.1.2", "", { "dependencies": { "@vitest/utils": "4.1.2", "fflate": "^0.8.2", "flatted": "^3.4.2", "pathe": "^2.0.3", "sirv": "^3.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "vitest": "4.1.2" } }, "sha512-/irhyeAcKS2u6Zokagf9tqZJ0t8S6kMZq4ZG9BHZv7I+fkRrYfQX4w7geYeC2r6obThz39PDxvXQzZX+qXqGeg=="], - "@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], "@vscode/test-cli": ["@vscode/test-cli@0.0.11", "", { "dependencies": { "@types/mocha": "^10.0.2", "c8": "^9.1.0", "chokidar": "^3.5.3", "enhanced-resolve": "^5.15.0", "glob": "^10.3.10", "minimatch": "^9.0.3", "mocha": "^11.1.0", "supports-color": "^9.4.0", "yargs": "^17.7.2" }, "bin": { "vscode-test": "out/bin.mjs" } }, "sha512-qO332yvzFqGhBMJrp6TdwbIydiHgCtxXc2Nl6M58mbH/Z+0CyLR76Jzv4YWPEthhrARprzCRJUqzFvTHFhTj7Q=="], @@ -7930,13 +7973,13 @@ "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], - "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], - "tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], "tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="], @@ -8132,7 +8175,7 @@ "vite-plugin-html": ["vite-plugin-html@3.2.2", "", { "dependencies": { "@rollup/pluginutils": "^4.2.0", "colorette": "^2.0.16", "connect-history-api-fallback": "^1.6.0", "consola": "^2.15.3", "dotenv": "^16.0.0", "dotenv-expand": "^8.0.2", "ejs": "^3.1.6", "fast-glob": "^3.2.11", "fs-extra": "^10.0.1", "html-minifier-terser": "^6.1.0", "node-html-parser": "^5.3.3", "pathe": "^0.2.0" }, "peerDependencies": { "vite": ">=2.0.0" } }, "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q=="], - "vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], "vscode": ["vscode@1.1.37", "", { "dependencies": { "glob": "^7.1.2", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "mocha": "^5.2.0", "semver": "^5.4.1", "source-map-support": "^0.5.0", "vscode-test": "^0.4.1" }, "bin": { "vscode-install": "./bin/install" } }, "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg=="], @@ -8234,8 +8277,6 @@ "@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.8", "", {}, "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="], - "@antfu/install-pkg/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], - "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], "@aws-crypto/crc32c/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], @@ -8682,12 +8723,20 @@ "@eslint/eslintrc/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "@function-bay/build/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@function-bay/nodejs/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@function-bay/nodejs/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@function-bay/types/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@function-bay/types/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@function-bay/utils/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@function-bay/utils/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@inquirer/core/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], "@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], @@ -8702,8 +8751,6 @@ "@lowerdeck/lock/@types/bun": ["@types/bun@1.3.12", "", { "dependencies": { "bun-types": "1.3.12" } }, "sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A=="], - "@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], - "@lowerdeck/sentry/@sentry/core": ["@sentry/core@10.42.0", "", {}, "sha512-L4rMrXMqUKBanpjpMT+TuAVk6xAijz6AWM6RiEYpohAr7SGcCEc1/T0+Ep1eLV8+pwWacfU27OvELIyNeOnGzA=="], "@lowerdeck/telemetry/@lowerdeck/execution-context": ["@lowerdeck/execution-context@1.1.0", "", { "dependencies": { "@lowerdeck/id": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "@opentelemetry/api": "^1.9.0" } }, "sha512-3aAgx6fiUF7Tduq1WR+GqGXZYaHhoM502/uwqQKtTOXsB6nyOp1NhOLHoU+ZZvZZflQ9ddpMwTCicjvQnmhXeA=="], @@ -8716,8 +8763,6 @@ "@metorial-cargo/service/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@metorial-cargo/service/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], - "@metorial-io/data-hooks/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], "@metorial-io/data-hooks/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], @@ -8728,42 +8773,114 @@ "@metorial-platform-systems/ares-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/ares-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/cargo-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/cargo-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/forge-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/forge-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/function-bay-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/function-bay-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/origin-client/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], "@metorial-platform-systems/origin-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/origin-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/shuttle-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/shuttle-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/signal-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/signal-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/slates-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/slates-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/subspace-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/subspace-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/synthesis-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/synthesis-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-services/registry-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], + "@metorial-services/registry-client/@lowerdeck/rpc-server": ["@lowerdeck/rpc-server@1.0.10", "", { "dependencies": { "@lowerdeck/error": "^1.2.2", "@lowerdeck/execution-context": "^1.0.4", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", "@lowerdeck/telemetry": "^1.0.1", "@lowerdeck/validation": "^1.0.8", "cookie": "^1.1.1" } }, "sha512-nitrDjYoYOal/W1djpaQ7EiDsvFokyUGPBXPyHzLqSrKDAqi22Tpb/nPAgGnEokxMbu6Fl9KhLlhIXABkYYvUg=="], "@metorial-services/registry-client/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + "@metorial-services/relay-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], + + "@metorial-services/scout-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], + "@metorial-services/slates-registry-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-services/slates-registry-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-services/slates-registry-internal-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "@metorial-subspace/app-controller/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], + "@metorial-services/slates-registry-internal-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-services/voyager-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], - "@metorial-subspace/app-controller/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@metorial-subspace/app-controller/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], "@metorial-subspace/conduit/vitest": ["vitest@2.1.9", "", { "dependencies": { "@vitest/expect": "2.1.9", "@vitest/mocker": "2.1.9", "@vitest/pretty-format": "^2.1.9", "@vitest/runner": "2.1.9", "@vitest/snapshot": "2.1.9", "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", "vite-node": "2.1.9", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "2.1.9", "@vitest/ui": "2.1.9", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q=="], + "@metorial-subspace/list-utils/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-agent/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-callback/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-catalog/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-connection/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-custom-provider/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-deployment/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-identity/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-integration/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-provider-internal/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-subspace/module-session/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@metorial-subspace/module-session/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-skills/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial-subspace/module-tenant/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/api-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/api-core/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/api-custom-portal/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/api-files/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/api-keys/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/api-oauth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/app-api/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/app-dashboard/@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.1", "", { "dependencies": { "@babel/core": "^7.24.5", "@babel/plugin-transform-react-jsx-self": "^7.24.5", "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0" } }, "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg=="], "@metorial/app-dashboard/date-fns": ["date-fns@3.6.0", "", {}, "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="], @@ -8776,10 +8893,18 @@ "@metorial/ares/@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.1", "", { "dependencies": { "@babel/core": "^7.24.5", "@babel/plugin-transform-react-jsx-self": "^7.24.5", "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0" } }, "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg=="], - "@metorial/ares/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], - "@metorial/auth/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial/auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/bearer/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/cache/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/chart/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/code/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/code-editor/tsup": ["tsup@7.3.0", "", { "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", "esbuild": "^0.19.2", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^4.0.1", "resolve-from": "^5.0.0", "rollup": "^4.0.2", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ=="], "@metorial/code-editor/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], @@ -8792,28 +8917,46 @@ "@metorial/config/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial/config/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/consumer-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/consumer-sdk/tsup": ["tsup@7.3.0", "", { "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", "esbuild": "^0.19.2", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^4.0.1", "resolve-from": "^5.0.0", "rollup": "^4.0.2", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ=="], "@metorial/consumer-sdk/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@metorial/consumer-sdk/vitest": ["vitest@0.34.6", "", { "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", "@vitest/expect": "0.34.6", "@vitest/runner": "0.34.6", "@vitest/snapshot": "0.34.6", "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", "jsdom": "*", "playwright": "*", "safaridriver": "*", "webdriverio": "*" }, "optionalPeers": ["@edge-runtime/vm", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom", "playwright", "safaridriver", "webdriverio"], "bin": { "vitest": "vitest.mjs" } }, "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q=="], + "@metorial/context/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/cron/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/dashboard-sdk/tsup": ["tsup@7.3.0", "", { "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", "esbuild": "^0.19.2", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^4.0.1", "resolve-from": "^5.0.0", "rollup": "^4.0.2", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ=="], "@metorial/dashboard-sdk/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@metorial/dashboard-sdk/vitest": ["vitest@0.34.6", "", { "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", "@vitest/expect": "0.34.6", "@vitest/runner": "0.34.6", "@vitest/snapshot": "0.34.6", "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", "jsdom": "*", "playwright": "*", "safaridriver": "*", "webdriverio": "*" }, "optionalPeers": ["@edge-runtime/vm", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom", "playwright", "safaridriver", "webdriverio"], "bin": { "vitest": "vitest.mjs" } }, "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q=="], + "@metorial/data-hooks/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/db/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], "@metorial/db/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@metorial/db/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/debug/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial/debug/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/dynamic-component/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@metorial/dynamic-component/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/event/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@metorial/event/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/explorer/@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.1", "", { "dependencies": { "@babel/core": "^7.24.5", "@babel/plugin-transform-react-jsx-self": "^7.24.5", "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0" } }, "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg=="], "@metorial/explorer/react": ["react@19.1.1", "", {}, "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ=="], @@ -8824,42 +8967,110 @@ "@metorial/explorer/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "@metorial/forge/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@metorial/fabric/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/function-bay/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "@metorial/frontend-config/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/function-bay/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@metorial/function-bay/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], "@metorial/generated/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], "@metorial/id/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial/id/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/internal-clients/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/layout/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/lock/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/logging/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/markdown/react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], + "@metorial/markdown/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/mcp/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial/mcp/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/mcp-server/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial/mcp-server/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/mcp-transport-memory/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial/mcp-transport-memory/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/mcp-utils/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/microfrontend/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@metorial/microfrontend/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-access/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-assistant/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-community/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-consumer/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-email/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-event/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-file/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-flags/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-machine-access/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/module-magic/mongoose": ["mongoose@8.23.0", "", { "dependencies": { "bson": "^6.10.4", "kareem": "2.6.3", "mongodb": "~6.20.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug=="], + "@metorial/module-magic/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/module-markdown/mongoose": ["mongoose@8.23.0", "", { "dependencies": { "bson": "^6.10.4", "kareem": "2.6.3", "mongodb": "~6.20.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug=="], + "@metorial/module-markdown/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-organization/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-protect/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-search/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-subspace/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/module-usage/mongoose": ["mongoose@8.23.0", "", { "dependencies": { "bson": "^6.10.4", "kareem": "2.6.3", "mongodb": "~6.20.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug=="], + "@metorial/module-usage/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/module-user/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/multi-region/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], "@metorial/multi-region/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@metorial/origin/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@metorial/origin/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@metorial/pages/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/presenter/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/queue/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], "@metorial/redis/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@metorial/redis/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/rest/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/rpc/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/scene-assistant/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/scene-docs/@tiptap/extension-highlight": ["@tiptap/extension-highlight@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-sNzwL0OZRpxAef9LE4SS3AbNyMBsxyGw3MJF34+Bdcu2VpaqoM3XFn664cD7iAsyTJI9eY0eLhZTMcKsdAlBaw=="], "@metorial/scene-docs/@tiptap/extension-image": ["@tiptap/extension-image@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-3ze2Et/p9YwQ34RkX8cIuClNiGup0/OfTy22GtjGPMpRPTSt8LTwz9vUEmENCdwfFYidyNSoh2rXA1gXKRfNFQ=="], @@ -8880,13 +9091,13 @@ "@metorial/scene-docs/@tiptap/starter-kit": ["@tiptap/starter-kit@3.6.1", "", { "dependencies": { "@tiptap/core": "^3.6.1", "@tiptap/extension-blockquote": "^3.6.1", "@tiptap/extension-bold": "^3.6.1", "@tiptap/extension-bullet-list": "^3.6.1", "@tiptap/extension-code": "^3.6.1", "@tiptap/extension-code-block": "^3.6.1", "@tiptap/extension-document": "^3.6.1", "@tiptap/extension-dropcursor": "^3.6.1", "@tiptap/extension-gapcursor": "^3.6.1", "@tiptap/extension-hard-break": "^3.6.1", "@tiptap/extension-heading": "^3.6.1", "@tiptap/extension-horizontal-rule": "^3.6.1", "@tiptap/extension-italic": "^3.6.1", "@tiptap/extension-link": "^3.6.1", "@tiptap/extension-list": "^3.6.1", "@tiptap/extension-list-item": "^3.6.1", "@tiptap/extension-list-keymap": "^3.6.1", "@tiptap/extension-ordered-list": "^3.6.1", "@tiptap/extension-paragraph": "^3.6.1", "@tiptap/extension-strike": "^3.6.1", "@tiptap/extension-text": "^3.6.1", "@tiptap/extension-underline": "^3.6.1", "@tiptap/extensions": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-gmQCHEcZxjnVqTInhNx3z7Vuvz+mmIVcXiCSLd5cA9/8PkHo3ttxijfc3lXe4V2ed6RPBWU/FUHFxcUmxqc5Vg=="], - "@metorial/shuttle/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial/scene-docs/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/shuttle/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@metorial/scene-skills/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/signal/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial/shuttle/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@metorial/signal/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@metorial/signal/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], "@metorial/slates/@metorial-services/slates-registry-client": ["@metorial-services/slates-registry-client@1.0.1", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.2" } }, "sha512-u2KNK4QdScDl3wGWup31jlUk13KvH1NoPl1EGa21J7p/PLjjvX+PdObOuHq/34X8d2MIX+WsDmWGiZuMp4T+rg=="], @@ -8896,20 +9107,22 @@ "@metorial/slates/sonner": ["sonner@1.7.4", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw=="], - "@metorial/slates/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], - "@metorial/slates-registry/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], - "@metorial/state/@metorial/generated": ["@metorial/generated@2.1.0", "", { "dependencies": { "@metorial/util-endpoint": "^2.1.0", "@metorial/util-resource-mapper": "^2.1.0", "jose": "^5.9.6" } }, "sha512-6ihKyZsSdq0WDFzNMf263GzkfOy2Vf+SbmrtEBL6bf88b5KEuiEvmVzGAdqvY0Z+jlyUF54NTOvwuYeJ4XfU1g=="], + "@metorial/state/@metorial/generated": ["@metorial/generated@3.0.0", "", { "dependencies": { "@metorial/util-endpoint": "^3.0.0", "@metorial/util-resource-mapper": "^3.0.0", "jose": "^5.9.6" } }, "sha512-1vJpqLgB8SLw6/Pr+xgnq9mGI4Xpays6JNzJGjB1hK7ZBuTGl5ebgI/Th67TCohdAg347FTv/tj3lK2kPHS3bw=="], - "@metorial/subspace-dev/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@metorial/state/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/synthesis/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial/storage/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/synthesis/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@metorial/synthesis/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], "@metorial/ui/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial/ui-product/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "@metorial/unified-id/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@modelcontextprotocol/sdk/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], "@modelcontextprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], @@ -9196,20 +9409,14 @@ "@vitest/coverage-v8/std-env": ["std-env@4.0.0", "", {}, "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ=="], - "@vitest/coverage-v8/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], - - "@vitest/coverage-v8/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], "@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@vitest/mocker/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], "@vitest/ui/@vitest/utils": ["@vitest/utils@4.1.2", "", { "dependencies": { "@vitest/pretty-format": "4.1.2", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ=="], - "@vitest/ui/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], - - "@vitest/ui/vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], - "@vscode/test-cli/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], "@vscode/test-cli/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], @@ -9328,6 +9535,8 @@ "function-bay/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "function-bay/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "gauge/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "gaxios/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], @@ -9466,8 +9675,6 @@ "nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], - "nypm/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], - "openid-client/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], @@ -9590,6 +9797,8 @@ "tsup/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], + "tsup/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "typeorm/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], "typeorm/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], @@ -9608,6 +9817,8 @@ "vite-plugin-html/pathe": ["pathe@0.2.0", "", {}, "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw=="], + "vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "vscode/http-proxy-agent": ["http-proxy-agent@4.0.1", "", { "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } }, "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="], "vscode/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], @@ -9986,441 +10197,1905 @@ "@eslint/eslintrc/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "@inquirer/core/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@function-bay/nodejs/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@inquirer/core/wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@function-bay/nodejs/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + "@function-bay/nodejs/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "@function-bay/nodejs/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@lowerdeck/api-mux/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + "@function-bay/nodejs/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@lowerdeck/id/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + "@function-bay/nodejs/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@lowerdeck/lock/@types/bun/bun-types": ["bun-types@1.3.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA=="], + "@function-bay/nodejs/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + "@function-bay/nodejs/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@mapbox/node-pre-gyp/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + "@function-bay/nodejs/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@mapbox/node-pre-gyp/tar/chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + "@function-bay/types/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@mapbox/node-pre-gyp/tar/minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], + "@function-bay/types/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@mapbox/node-pre-gyp/tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], + "@function-bay/types/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-cargo/service/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@function-bay/types/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-cargo/service/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@function-bay/types/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-cargo/service/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@function-bay/types/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-cargo/service/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@function-bay/types/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-cargo/service/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@function-bay/types/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-cargo/service/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@function-bay/types/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-cargo/service/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@function-bay/utils/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-cargo/service/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@function-bay/utils/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-cargo/service/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@function-bay/utils/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-cargo/service/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@function-bay/utils/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-cargo/service/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@function-bay/utils/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-io/layout/react-router-dom/react-router": ["react-router@7.13.2", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-tX1Aee+ArlKQP+NIUd7SE6Li+CiGKwQtbS+FfRxPX6Pe4vHOo6nr9d++u5cwg+Z8K/x8tP+7qLmujDtfrAoUJA=="], + "@function-bay/utils/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-io/ui-product/react-router-dom/react-router": ["react-router@7.13.2", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-tX1Aee+ArlKQP+NIUd7SE6Li+CiGKwQtbS+FfRxPX6Pe4vHOo6nr9d++u5cwg+Z8K/x8tP+7qLmujDtfrAoUJA=="], + "@function-bay/utils/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/origin-client/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@function-bay/utils/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-services/registry-client/@lowerdeck/rpc-server/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], + "@function-bay/utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-services/registry-client/@lowerdeck/rpc-server/@lowerdeck/execution-context": ["@lowerdeck/execution-context@1.1.0", "", { "dependencies": { "@lowerdeck/id": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "@opentelemetry/api": "^1.9.0" } }, "sha512-3aAgx6fiUF7Tduq1WR+GqGXZYaHhoM502/uwqQKtTOXsB6nyOp1NhOLHoU+ZZvZZflQ9ddpMwTCicjvQnmhXeA=="], + "@inquirer/core/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "@metorial-subspace/app-controller/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@inquirer/core/wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@metorial-subspace/app-controller/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "@metorial-subspace/app-controller/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - "@metorial-subspace/app-controller/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@lowerdeck/api-mux/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "@metorial-subspace/app-controller/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@lowerdeck/id/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "@metorial-subspace/app-controller/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@lowerdeck/lock/@types/bun/bun-types": ["bun-types@1.3.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA=="], - "@metorial-subspace/app-controller/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@mapbox/node-pre-gyp/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - "@metorial-subspace/app-controller/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@mapbox/node-pre-gyp/tar/chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], - "@metorial-subspace/app-controller/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@mapbox/node-pre-gyp/tar/minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], - "@metorial-subspace/app-controller/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@mapbox/node-pre-gyp/tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], - "@metorial-subspace/conduit/vitest/@vitest/expect": ["@vitest/expect@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw=="], + "@metorial-cargo/service/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial-subspace/conduit/vitest/@vitest/mocker": ["@vitest/mocker@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg=="], + "@metorial-io/layout/react-router-dom/react-router": ["react-router@7.13.2", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-tX1Aee+ArlKQP+NIUd7SE6Li+CiGKwQtbS+FfRxPX6Pe4vHOo6nr9d++u5cwg+Z8K/x8tP+7qLmujDtfrAoUJA=="], - "@metorial-subspace/conduit/vitest/@vitest/pretty-format": ["@vitest/pretty-format@2.1.9", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ=="], + "@metorial-io/ui-product/react-router-dom/react-router": ["react-router@7.13.2", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-tX1Aee+ArlKQP+NIUd7SE6Li+CiGKwQtbS+FfRxPX6Pe4vHOo6nr9d++u5cwg+Z8K/x8tP+7qLmujDtfrAoUJA=="], - "@metorial-subspace/conduit/vitest/@vitest/runner": ["@vitest/runner@2.1.9", "", { "dependencies": { "@vitest/utils": "2.1.9", "pathe": "^1.1.2" } }, "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/conduit/vitest/@vitest/snapshot": ["@vitest/snapshot@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "magic-string": "^0.30.12", "pathe": "^1.1.2" } }, "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/conduit/vitest/@vitest/spy": ["@vitest/spy@2.1.9", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/conduit/vitest/@vitest/utils": ["@vitest/utils@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/conduit/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/conduit/vitest/tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/conduit/vitest/vite-node": ["vite-node@2.1.9", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-session/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@metorial-platform-systems/ares-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/app-dashboard/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + "@metorial-platform-systems/ares-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/app-dashboard/framer-motion/motion-dom": ["motion-dom@11.18.1", "", { "dependencies": { "motion-utils": "^11.18.1" } }, "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/app-dashboard/framer-motion/motion-utils": ["motion-utils@11.18.1", "", {}, "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/ares/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/ares/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/ares/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/ares/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/ares/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/ares/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@metorial-platform-systems/cargo-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/ares/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@metorial-platform-systems/cargo-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/ares/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/ares/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/ares/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/ares/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/ares/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/code-editor/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/code-editor/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/code-editor/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + "@metorial-platform-systems/forge-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/code-editor/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + "@metorial-platform-systems/forge-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/code-editor/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/code-editor/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/code-editor/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/code-editor/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/code-editor/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/code-editor/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/code-editor/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/code-editor/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], + "@metorial-platform-systems/function-bay-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/code-editor/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "@metorial-platform-systems/function-bay-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/code-editor/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], + "@metorial-platform-systems/origin-client/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/code-editor/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/code-workspace/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/consumer-sdk/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/consumer-sdk/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/consumer-sdk/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/consumer-sdk/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/consumer-sdk/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/consumer-sdk/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + "@metorial-platform-systems/origin-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/consumer-sdk/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], + "@metorial-platform-systems/origin-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/consumer-sdk/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/consumer-sdk/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/consumer-sdk/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/consumer-sdk/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/consumer-sdk/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/consumer-sdk/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/consumer-sdk/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/consumer-sdk/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], + "@metorial-platform-systems/shuttle-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/dashboard-sdk/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], + "@metorial-platform-systems/shuttle-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/dashboard-sdk/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/dashboard-sdk/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/dashboard-sdk/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/dashboard-sdk/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/dashboard-sdk/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/dashboard-sdk/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/dashboard-sdk/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/dashboard-sdk/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], + "@metorial-platform-systems/signal-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/dashboard-sdk/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], + "@metorial-platform-systems/signal-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/dashboard-sdk/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/dashboard-sdk/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/dashboard-sdk/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/dashboard-sdk/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/dashboard-sdk/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/db/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/dynamic-component/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@metorial-platform-systems/slates-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/event/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@metorial-platform-systems/slates-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/explorer/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/explorer/react-dom/scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/forge/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/forge/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/forge/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/forge/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/forge/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/forge/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@metorial-platform-systems/subspace-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/forge/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@metorial-platform-systems/subspace-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/forge/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/forge/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/forge/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/function-bay/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/function-bay/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/function-bay/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/function-bay/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/function-bay/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@metorial-platform-systems/synthesis-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/function-bay/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@metorial-platform-systems/synthesis-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/function-bay/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@metorial-services/registry-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], - "@metorial/function-bay/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial-services/registry-client/@lowerdeck/rpc-server/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], - "@metorial/function-bay/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial-services/registry-client/@lowerdeck/rpc-server/@lowerdeck/execution-context": ["@lowerdeck/execution-context@1.1.0", "", { "dependencies": { "@lowerdeck/id": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "@opentelemetry/api": "^1.9.0" } }, "sha512-3aAgx6fiUF7Tduq1WR+GqGXZYaHhoM502/uwqQKtTOXsB6nyOp1NhOLHoU+ZZvZZflQ9ddpMwTCicjvQnmhXeA=="], - "@metorial/function-bay/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial-services/relay-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], - "@metorial/microfrontend/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@metorial-services/scout-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], - "@metorial/module-magic/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], + "@metorial-services/slates-registry-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-magic/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], + "@metorial-services/slates-registry-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-magic/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], + "@metorial-services/slates-registry-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-markdown/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], + "@metorial-services/slates-registry-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-markdown/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], + "@metorial-services/slates-registry-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-markdown/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], + "@metorial-services/slates-registry-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-usage/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], + "@metorial-services/slates-registry-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-usage/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], + "@metorial-services/slates-registry-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-usage/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], + "@metorial-services/slates-registry-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], + "@metorial-services/slates-registry-internal-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-services/slates-registry-internal-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-services/slates-registry-internal-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-services/slates-registry-internal-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-services/slates-registry-internal-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-services/slates-registry-internal-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-services/slates-registry-internal-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-services/slates-registry-internal-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-services/slates-registry-internal-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-services/voyager-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], + + "@metorial-subspace/conduit/vitest/@vitest/expect": ["@vitest/expect@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw=="], + + "@metorial-subspace/conduit/vitest/@vitest/mocker": ["@vitest/mocker@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg=="], + + "@metorial-subspace/conduit/vitest/@vitest/pretty-format": ["@vitest/pretty-format@2.1.9", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ=="], + + "@metorial-subspace/conduit/vitest/@vitest/runner": ["@vitest/runner@2.1.9", "", { "dependencies": { "@vitest/utils": "2.1.9", "pathe": "^1.1.2" } }, "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g=="], + + "@metorial-subspace/conduit/vitest/@vitest/snapshot": ["@vitest/snapshot@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "magic-string": "^0.30.12", "pathe": "^1.1.2" } }, "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ=="], + + "@metorial-subspace/conduit/vitest/@vitest/spy": ["@vitest/spy@2.1.9", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ=="], + + "@metorial-subspace/conduit/vitest/@vitest/utils": ["@vitest/utils@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ=="], + + "@metorial-subspace/conduit/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "@metorial-subspace/conduit/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/conduit/vitest/tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], + + "@metorial-subspace/conduit/vitest/vite-node": ["vite-node@2.1.9", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA=="], + + "@metorial-subspace/list-utils/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/list-utils/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/list-utils/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/list-utils/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/list-utils/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/list-utils/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/list-utils/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/list-utils/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/list-utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-agent/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-agent/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-agent/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-agent/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-agent/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-agent/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-agent/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-agent/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-agent/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-callback/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-callback/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-callback/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-callback/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-callback/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-callback/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-callback/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-callback/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-callback/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-catalog/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-catalog/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-catalog/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-catalog/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-catalog/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-catalog/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-catalog/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-catalog/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-catalog/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-connection/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-connection/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-connection/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-connection/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-connection/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-connection/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-connection/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-connection/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-connection/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-custom-provider/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-custom-provider/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-custom-provider/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-custom-provider/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-custom-provider/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-custom-provider/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-custom-provider/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-custom-provider/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-custom-provider/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-deployment/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-deployment/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-deployment/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-deployment/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-deployment/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-deployment/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-deployment/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-deployment/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-deployment/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-identity/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-identity/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-identity/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-identity/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-identity/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-identity/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-identity/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-identity/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-identity/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-integration/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-integration/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-integration/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-integration/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-integration/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-integration/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-integration/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-integration/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-integration/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-provider-internal/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-provider-internal/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-provider-internal/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-provider-internal/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-provider-internal/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-provider-internal/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-provider-internal/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-provider-internal/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-provider-internal/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-session/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "@metorial-subspace/module-session/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-session/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-session/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-session/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-session/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-session/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-session/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-session/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-session/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-skills/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-skills/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-skills/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-skills/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-skills/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-skills/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-skills/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-skills/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-skills/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial-subspace/module-tenant/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-subspace/module-tenant/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-subspace/module-tenant/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-subspace/module-tenant/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-subspace/module-tenant/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-subspace/module-tenant/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-subspace/module-tenant/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-subspace/module-tenant/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-subspace/module-tenant/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/api-auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/api-auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/api-auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/api-auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/api-auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/api-auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/api-auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/api-auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/api-auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/api-core/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/api-core/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/api-core/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/api-core/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/api-core/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/api-core/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/api-core/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/api-core/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/api-core/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/api-custom-portal/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/api-custom-portal/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/api-custom-portal/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/api-custom-portal/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/api-custom-portal/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/api-custom-portal/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/api-custom-portal/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/api-custom-portal/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/api-custom-portal/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/api-files/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/api-files/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/api-files/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/api-files/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/api-files/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/api-files/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/api-files/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/api-files/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/api-files/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/api-keys/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/api-keys/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/api-keys/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/api-keys/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/api-keys/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/api-keys/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/api-keys/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/api-keys/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/api-keys/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/api-oauth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/api-oauth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/api-oauth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/api-oauth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/api-oauth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/api-oauth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/api-oauth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/api-oauth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/api-oauth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/app-api/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/app-api/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/app-api/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/app-api/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/app-api/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/app-api/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/app-api/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/app-api/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/app-api/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/app-dashboard/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + + "@metorial/app-dashboard/framer-motion/motion-dom": ["motion-dom@11.18.1", "", { "dependencies": { "motion-utils": "^11.18.1" } }, "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw=="], + + "@metorial/app-dashboard/framer-motion/motion-utils": ["motion-utils@11.18.1", "", {}, "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA=="], + + "@metorial/ares/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "@metorial/ares/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + + "@metorial/auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/bearer/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/bearer/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/bearer/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/bearer/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/bearer/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/bearer/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/bearer/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/bearer/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/bearer/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/cache/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/cache/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/cache/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/cache/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/cache/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/cache/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/cache/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/cache/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/cache/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/chart/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/chart/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/chart/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/chart/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/chart/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/chart/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/chart/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/chart/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/chart/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/code-editor/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], + + "@metorial/code-editor/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "@metorial/code-editor/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + + "@metorial/code-editor/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + + "@metorial/code-editor/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + + "@metorial/code-editor/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + + "@metorial/code-editor/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], + + "@metorial/code-editor/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], + + "@metorial/code-editor/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], + + "@metorial/code-editor/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], + + "@metorial/code-editor/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], + + "@metorial/code-editor/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], + + "@metorial/code-editor/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "@metorial/code-editor/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], + + "@metorial/code-editor/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], + + "@metorial/code-workspace/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "@metorial/code/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/code/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/code/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/code/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/code/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/code/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/code/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/code/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/code/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/config/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/config/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/config/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/config/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/config/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/config/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/config/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/config/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/config/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/consumer-auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/consumer-auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/consumer-auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/consumer-auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/consumer-auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/consumer-auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/consumer-auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/consumer-auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/consumer-auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/consumer-sdk/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], + + "@metorial/consumer-sdk/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "@metorial/consumer-sdk/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + + "@metorial/consumer-sdk/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + + "@metorial/consumer-sdk/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + + "@metorial/consumer-sdk/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + + "@metorial/consumer-sdk/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], + + "@metorial/consumer-sdk/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], + + "@metorial/consumer-sdk/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], + + "@metorial/consumer-sdk/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], + + "@metorial/consumer-sdk/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], + + "@metorial/consumer-sdk/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], + + "@metorial/consumer-sdk/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "@metorial/consumer-sdk/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], + + "@metorial/consumer-sdk/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], + + "@metorial/context/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/context/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/context/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/context/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/context/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/context/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/context/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/context/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/context/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/cron/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/cron/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/cron/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/cron/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/cron/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/cron/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/cron/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/cron/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/cron/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/dashboard-sdk/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], + + "@metorial/dashboard-sdk/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "@metorial/dashboard-sdk/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + + "@metorial/dashboard-sdk/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + + "@metorial/dashboard-sdk/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + + "@metorial/dashboard-sdk/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + + "@metorial/dashboard-sdk/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], + + "@metorial/dashboard-sdk/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], + + "@metorial/dashboard-sdk/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], + + "@metorial/dashboard-sdk/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], + + "@metorial/dashboard-sdk/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], + + "@metorial/dashboard-sdk/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], + + "@metorial/dashboard-sdk/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "@metorial/dashboard-sdk/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], + + "@metorial/dashboard-sdk/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], + + "@metorial/data-hooks/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/data-hooks/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/data-hooks/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/data-hooks/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/data-hooks/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/data-hooks/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/data-hooks/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/data-hooks/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/data-hooks/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], + + "@metorial/db/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "@metorial/db/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/db/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/db/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/db/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/db/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/db/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/db/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/db/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/db/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/debug/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/debug/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/debug/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/debug/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/debug/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/debug/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/debug/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/debug/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/debug/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/dynamic-component/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "@metorial/dynamic-component/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/dynamic-component/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/dynamic-component/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/dynamic-component/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/dynamic-component/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/dynamic-component/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/dynamic-component/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/dynamic-component/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/dynamic-component/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/event/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "@metorial/event/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/event/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/event/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/event/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/event/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/event/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/event/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/event/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/event/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/explorer/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + + "@metorial/explorer/react-dom/scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], + + "@metorial/fabric/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/fabric/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/fabric/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/fabric/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/fabric/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/fabric/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/fabric/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/fabric/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/fabric/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/frontend-config/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/frontend-config/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/frontend-config/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/frontend-config/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/frontend-config/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/frontend-config/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/frontend-config/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/frontend-config/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/frontend-config/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/id/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/id/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/id/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/id/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/id/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/id/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/id/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/id/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/id/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/internal-clients/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/internal-clients/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/internal-clients/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/internal-clients/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/internal-clients/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/internal-clients/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/internal-clients/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/internal-clients/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/internal-clients/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/layout/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/layout/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/layout/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/layout/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/layout/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/layout/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/layout/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/layout/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/layout/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/lock/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/lock/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/lock/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/lock/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/lock/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/lock/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/lock/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/lock/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/lock/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/logging/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/logging/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/logging/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/logging/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/logging/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/logging/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/logging/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/logging/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/logging/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/markdown/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/markdown/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/markdown/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/markdown/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/markdown/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/markdown/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/markdown/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/markdown/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/markdown/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/mcp-server/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/mcp-server/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/mcp-server/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/mcp-server/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/mcp-server/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/mcp-server/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/mcp-server/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/mcp-server/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/mcp-server/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/mcp-transport-memory/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/mcp-transport-memory/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/mcp-transport-memory/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/mcp-transport-memory/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/mcp-transport-memory/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/mcp-transport-memory/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/mcp-transport-memory/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/mcp-transport-memory/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/mcp-transport-memory/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/mcp-utils/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/mcp-utils/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/mcp-utils/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/mcp-utils/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/mcp-utils/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/mcp-utils/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/mcp-utils/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/mcp-utils/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/mcp-utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/mcp/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/mcp/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/mcp/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/mcp/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/mcp/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/mcp/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/mcp/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/mcp/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/mcp/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/microfrontend/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "@metorial/microfrontend/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/microfrontend/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/microfrontend/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/microfrontend/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/microfrontend/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/microfrontend/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/microfrontend/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/microfrontend/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/microfrontend/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-access/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-access/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-access/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-access/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-access/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-access/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-access/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-access/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-access/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-assistant/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-assistant/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-assistant/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-assistant/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-assistant/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-assistant/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-assistant/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-assistant/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-assistant/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-community/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-community/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-community/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-community/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-community/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-community/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-community/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-community/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-community/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-consumer/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-consumer/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-consumer/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-consumer/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-consumer/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-consumer/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-consumer/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-consumer/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-consumer/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-email/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-email/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-email/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-email/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-email/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-email/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-email/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-email/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-email/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-event/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-event/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-event/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-event/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-event/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-event/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-event/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-event/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-event/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-file/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-file/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-file/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-file/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-file/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-file/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-file/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-file/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-file/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-flags/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-flags/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-flags/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-flags/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-flags/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-flags/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-flags/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-flags/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-flags/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-machine-access/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-machine-access/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-machine-access/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-machine-access/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-machine-access/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-machine-access/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-machine-access/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-machine-access/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-machine-access/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-magic/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], + + "@metorial/module-magic/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], + + "@metorial/module-magic/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], + + "@metorial/module-magic/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-magic/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-magic/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-magic/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-magic/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-magic/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-magic/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-magic/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-magic/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-markdown/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], + + "@metorial/module-markdown/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], + + "@metorial/module-markdown/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], + + "@metorial/module-markdown/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-markdown/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-markdown/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-markdown/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-markdown/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-markdown/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-markdown/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-markdown/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-markdown/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-organization/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-organization/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-organization/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-organization/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-organization/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-organization/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-organization/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-organization/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-organization/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-protect/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-protect/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-protect/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-protect/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-protect/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-protect/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-protect/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-protect/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-protect/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-search/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-search/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-search/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-search/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-search/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-search/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-search/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-search/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-search/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-subspace/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-subspace/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-subspace/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-subspace/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-subspace/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-subspace/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-subspace/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-subspace/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-subspace/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-usage/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], + + "@metorial/module-usage/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], + + "@metorial/module-usage/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], + + "@metorial/module-usage/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-usage/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-usage/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-usage/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-usage/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-usage/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-usage/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-usage/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-usage/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/module-user/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/module-user/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/module-user/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/module-user/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/module-user/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/module-user/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/module-user/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/module-user/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/module-user/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], "@metorial/origin/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/origin/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@metorial/pages/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/pages/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/origin/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@metorial/pages/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/origin/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@metorial/pages/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/origin/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@metorial/pages/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/origin/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@metorial/pages/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/origin/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@metorial/pages/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/origin/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@metorial/pages/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/origin/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial/pages/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/origin/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial/presenter/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/origin/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial/presenter/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/presenter/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/presenter/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/presenter/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/presenter/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/presenter/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/presenter/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/presenter/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/queue/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/queue/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/queue/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/queue/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/queue/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/queue/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/queue/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/queue/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/queue/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], "@metorial/redis/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@metorial/redis/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/redis/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/redis/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/redis/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/redis/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/redis/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/redis/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/redis/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/redis/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/rest/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/rest/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/rest/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/rest/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/rest/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/rest/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/rest/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/rest/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/rest/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/rpc/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/rpc/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/rpc/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/rpc/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/rpc/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/rpc/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/rpc/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/rpc/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/rpc/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "@metorial/scene-assistant/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial/scene-assistant/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial/scene-assistant/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/scene-assistant/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/scene-assistant/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/scene-assistant/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/scene-assistant/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial/scene-assistant/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/scene-assistant/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/scene-docs/@tiptap/starter-kit/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], "@metorial/scene-docs/@tiptap/starter-kit/@tiptap/extension-heading": ["@tiptap/extension-heading@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-JgJhurnCe3eN6a0lEsNQM/46R1bcwzwWWZEFDSb1P9dR8+t1/5v7cMZWsSInpD7R4/74iJn0+M5hcXLwCmBmYA=="], "@metorial/scene-docs/@tiptap/starter-kit/@tiptap/pm": ["@tiptap/pm@3.20.0", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.24.1", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-jn+2KnQZn+b+VXr8EFOJKsnjVNaA4diAEr6FOazupMt8W8ro1hfpYtZ25JL87Kao/WbMze55sd8M8BDXLUKu1A=="], - "@metorial/shuttle/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/scene-docs/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/shuttle/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@metorial/scene-docs/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/shuttle/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@metorial/scene-docs/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/shuttle/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@metorial/scene-docs/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/shuttle/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@metorial/scene-docs/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/shuttle/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@metorial/scene-docs/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/shuttle/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@metorial/scene-docs/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/shuttle/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@metorial/scene-docs/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/shuttle/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial/scene-docs/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/shuttle/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial/scene-skills/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/shuttle/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial/scene-skills/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/signal/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/scene-skills/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial/scene-skills/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial/scene-skills/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/signal/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@metorial/scene-skills/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/signal/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@metorial/scene-skills/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/signal/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@metorial/scene-skills/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/signal/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@metorial/scene-skills/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/signal/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@metorial/shuttle/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/signal/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@metorial/signal/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/signal/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@metorial/slates/@metorial-services/slates-registry-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], - "@metorial/signal/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial/state/@metorial/generated/@metorial/util-endpoint": ["@metorial/util-endpoint@3.0.0", "", { "dependencies": { "@metorial/util-async-iterator": "^3.0.0", "@types/qs": "^6.14.0", "cross-fetch": "^4.1.0", "qs": "^6.13.1" } }, "sha512-uw+yw1xwa56jzG0H6iERK/FcuHhhz4n3sEWqyCG9bXhCGeMZSygls39mZB4qU+/Kb69N8deYnP0wSqoqvsO98Q=="], - "@metorial/signal/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial/state/@metorial/generated/@metorial/util-resource-mapper": ["@metorial/util-resource-mapper@3.0.0", "", {}, "sha512-CiEVSUL9ncLQuIrZniE0lMkDdAJ9XUzd/rqwpxf0OV3yDZtdbTDP1Wo36b8tRndC1J5hyd1LVayxULQOXBCs4g=="], - "@metorial/signal/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial/state/@metorial/generated/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - "@metorial/slates/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@metorial/state/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/slates/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@metorial/state/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/slates/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@metorial/state/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/slates/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@metorial/state/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/slates/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@metorial/state/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/slates/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@metorial/state/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/slates/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@metorial/state/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/slates/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial/state/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/slates/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial/state/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/slates/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial/storage/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/state/@metorial/generated/@metorial/util-endpoint": ["@metorial/util-endpoint@2.1.0", "", { "dependencies": { "@metorial/util-async-iterator": "^2.1.0", "@types/qs": "^6.14.0", "cross-fetch": "^4.1.0", "qs": "^6.13.1" } }, "sha512-Y4/i9G6h32Yday9ngMUZiDoh+8Usr01rzIZCM9BhkrRAWxiFZRztIyN6zMVOho4+vAlIRNked98Um7En4cXUcQ=="], + "@metorial/storage/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/state/@metorial/generated/@metorial/util-resource-mapper": ["@metorial/util-resource-mapper@2.1.0", "", {}, "sha512-D1Dkgc5B0/QcIZUwhDsemV4rn87qVehM2JM3gopqXgzHokgMdIe/aR//1ot4OEN4+6G0e5/EJBHs/YI2JDyUsA=="], + "@metorial/storage/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/state/@metorial/generated/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], + "@metorial/storage/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/subspace-dev/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@metorial/storage/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/subspace-dev/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@metorial/storage/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/subspace-dev/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@metorial/storage/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/subspace-dev/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@metorial/storage/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/subspace-dev/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@metorial/storage/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/subspace-dev/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@metorial/synthesis/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/subspace-dev/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@metorial/ui-product/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/subspace-dev/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial/ui-product/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/subspace-dev/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial/ui-product/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/subspace-dev/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial/ui-product/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/synthesis/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/ui-product/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial/ui-product/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial/ui-product/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/synthesis/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "@metorial/ui-product/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/synthesis/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "@metorial/ui-product/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/synthesis/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "@metorial/unified-id/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/synthesis/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "@metorial/unified-id/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/synthesis/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "@metorial/unified-id/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/synthesis/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "@metorial/unified-id/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/synthesis/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "@metorial/unified-id/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/synthesis/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial/unified-id/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/synthesis/vitest/tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial/unified-id/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/synthesis/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial/unified-id/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial/unified-id/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], @@ -10582,48 +12257,10 @@ "@vitest/coverage-v8/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@4.1.2", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA=="], - "@vitest/coverage-v8/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], - - "@vitest/coverage-v8/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], - - "@vitest/coverage-v8/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], - - "@vitest/coverage-v8/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], - - "@vitest/coverage-v8/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], - - "@vitest/coverage-v8/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], - - "@vitest/coverage-v8/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], - - "@vitest/coverage-v8/vitest/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], - - "@vitest/coverage-v8/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], - - "@vitest/coverage-v8/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], - - "@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@vitest/mocker/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], "@vitest/ui/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@4.1.2", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA=="], - "@vitest/ui/vitest/@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], - - "@vitest/ui/vitest/@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], - - "@vitest/ui/vitest/@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], - - "@vitest/ui/vitest/@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], - - "@vitest/ui/vitest/@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], - - "@vitest/ui/vitest/@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], - - "@vitest/ui/vitest/@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], - - "@vitest/ui/vitest/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], - - "@vitest/ui/vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], - "@vscode/test-cli/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "@vscode/test-cli/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], @@ -10672,6 +12309,24 @@ "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + "function-bay/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "function-bay/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "function-bay/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "function-bay/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "function-bay/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "function-bay/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "function-bay/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "function-bay/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "function-bay/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "gauge/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "gaxios/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], @@ -10890,6 +12545,8 @@ "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], + "vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], + "vscode-test/http-proxy-agent/agent-base": ["agent-base@4.3.0", "", { "dependencies": { "es6-promisify": "^5.0.0" } }, "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg=="], "vscode-test/http-proxy-agent/debug": ["debug@3.1.0", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g=="], @@ -10932,71 +12589,219 @@ "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1038.0", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-Qniru+9oGGb/HNK/gGZWbV3jsD0k71ngE7qMQ/x6gYNYLd2EOwHCS6E2E6jfkaqO4i0d+nNKmfRy8bNcshKdGQ=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini/@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-P2kujQHAoV7irCTv6EGyReKFofkHCjIK+F0ZYf5UxeLeecrCwtrDkHoO2Vjsv/eRUumaKblD8czuk3CLlzwGDw=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini/@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-P2kujQHAoV7irCTv6EGyReKFofkHCjIK+F0ZYf5UxeLeecrCwtrDkHoO2Vjsv/eRUumaKblD8czuk3CLlzwGDw=="], + + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1001.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-09XAq/uIYgeZhohuGRrR/R+ek3+ljFNdzWCXdqb9rlIERDjSfNiLjTtpHgSK1xTPmC5G4yWoEAyMfTXiggS6wA=="], + + "@aws-sdk/client-s3/@smithy/eventstream-serde-browser/@smithy/eventstream-serde-universal/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.10", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-A4ynrsFFfSXUHicfTcRehytppFBcY3HQxEGYiyGktPIOye3Ot7fxpiy4VR42WmtGI4Wfo6OXt/c1Ky1nUFxYYQ=="], + + "@aws-sdk/client-s3/@smithy/eventstream-serde-node/@smithy/eventstream-serde-universal/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.10", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-A4ynrsFFfSXUHicfTcRehytppFBcY3HQxEGYiyGktPIOye3Ot7fxpiy4VR42WmtGI4Wfo6OXt/c1Ky1nUFxYYQ=="], + + "@aws-sdk/client-s3/@smithy/fetch-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + + "@aws-sdk/client-s3/@smithy/node-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], + + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + + "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/util-base64/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + + "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg=="], + + "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], + + "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/url-parser": ["@smithy/url-parser@4.2.10", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A=="], + + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], + + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + + "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + + "@eslint/config-array/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "@eslint/eslintrc/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "@function-bay/nodejs/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@function-bay/nodejs/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@function-bay/types/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@function-bay/types/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@function-bay/utils/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@function-bay/utils/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@inquirer/core/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "@inquirer/core/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "@lowerdeck/lock/@types/bun/bun-types/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + + "@metorial-platform-systems/ares-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/ares-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-platform-systems/cargo-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/cargo-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-platform-systems/forge-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/forge-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-platform-systems/function-bay-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/function-bay-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-platform-systems/origin-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/origin-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-platform-systems/shuttle-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/shuttle-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-platform-systems/signal-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/signal-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-platform-systems/slates-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/slates-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-platform-systems/subspace-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/subspace-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-platform-systems/synthesis-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/synthesis-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-services/relay-client/@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + + "@metorial-services/scout-client/@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + + "@metorial-services/slates-registry-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-services/slates-registry-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-services/slates-registry-internal-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-services/slates-registry-internal-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-services/voyager-client/@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + + "@metorial-subspace/conduit/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/conduit/vitest/@vitest/spy/tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="], + + "@metorial-subspace/list-utils/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/list-utils/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-subspace/module-agent/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/module-agent/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-subspace/module-auth/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/module-auth/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-subspace/module-callback/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/module-callback/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-subspace/module-catalog/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/module-catalog/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-subspace/module-connection/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/module-connection/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-subspace/module-custom-provider/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/module-custom-provider/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-subspace/module-deployment/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/module-deployment/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial-subspace/module-identity/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-subspace/module-identity/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1001.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-09XAq/uIYgeZhohuGRrR/R+ek3+ljFNdzWCXdqb9rlIERDjSfNiLjTtpHgSK1xTPmC5G4yWoEAyMfTXiggS6wA=="], + "@metorial-subspace/module-integration/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/client-s3/@smithy/eventstream-serde-browser/@smithy/eventstream-serde-universal/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.10", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-A4ynrsFFfSXUHicfTcRehytppFBcY3HQxEGYiyGktPIOye3Ot7fxpiy4VR42WmtGI4Wfo6OXt/c1Ky1nUFxYYQ=="], + "@metorial-subspace/module-integration/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@aws-sdk/client-s3/@smithy/eventstream-serde-node/@smithy/eventstream-serde-universal/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.10", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-A4ynrsFFfSXUHicfTcRehytppFBcY3HQxEGYiyGktPIOye3Ot7fxpiy4VR42WmtGI4Wfo6OXt/c1Ky1nUFxYYQ=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/client-s3/@smithy/fetch-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@aws-sdk/client-s3/@smithy/node-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + "@metorial-subspace/module-session/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + "@metorial-subspace/module-session/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], + "@metorial-subspace/module-skills/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + "@metorial-subspace/module-skills/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/util-base64/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial-subspace/module-tenant/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg=="], + "@metorial-subspace/module-tenant/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], + "@metorial/api-auth/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/url-parser": ["@smithy/url-parser@4.2.10", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A=="], + "@metorial/api-auth/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + "@metorial/api-core/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], + "@metorial/api-core/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + "@metorial/api-custom-portal/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial/api-custom-portal/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@eslint/config-array/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@metorial/api-files/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@eslint/eslintrc/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@metorial/api-files/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@inquirer/core/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + "@metorial/api-keys/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@inquirer/core/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@metorial/api-keys/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@lowerdeck/lock/@types/bun/bun-types/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial/api-oauth/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], + "@metorial/api-oauth/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "@metorial/app-api/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], + "@metorial/app-api/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], + "@metorial/auth/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "@metorial/auth/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], + "@metorial/bearer/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/conduit/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "@metorial/bearer/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/conduit/vitest/@vitest/spy/tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="], + "@metorial/cache/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], + "@metorial/cache/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "@metorial/chart/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], + "@metorial/chart/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], "@metorial/code-editor/tsup/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -11064,6 +12869,18 @@ "@metorial/code-editor/vitest/chai/pathval": ["pathval@1.1.1", "", {}, "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ=="], + "@metorial/code/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial/code/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial/config/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial/config/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial/consumer-auth/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial/consumer-auth/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial/consumer-sdk/tsup/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "@metorial/consumer-sdk/tsup/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], @@ -11130,6 +12947,14 @@ "@metorial/consumer-sdk/vitest/chai/pathval": ["pathval@1.1.1", "", {}, "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ=="], + "@metorial/context/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial/context/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@metorial/cron/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial/cron/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial/dashboard-sdk/tsup/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "@metorial/dashboard-sdk/tsup/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], @@ -11196,846 +13021,602 @@ "@metorial/dashboard-sdk/vitest/chai/pathval": ["pathval@1.1.1", "", {}, "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ=="], - "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], - - "@metorial/forge/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@metorial/forge/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@metorial/forge/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@metorial/function-bay/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@metorial/function-bay/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@metorial/function-bay/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], - - "@metorial/origin/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@metorial/origin/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@metorial/origin/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@metorial/shuttle/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@metorial/shuttle/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@metorial/shuttle/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@metorial/signal/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@metorial/signal/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@metorial/signal/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@metorial/slates/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@metorial/slates/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@metorial/slates/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@metorial/state/@metorial/generated/@metorial/util-endpoint/@metorial/util-async-iterator": ["@metorial/util-async-iterator@2.1.0", "", {}, "sha512-aD2QcSrG2kophZVWY49qh6avuQ8pL6ocOoRVVQi2UwMVnKjqPeHmK3ip8AQc3P+qQ++g9+GRivnkDYCyA0Er/Q=="], - - "@metorial/subspace-dev/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@metorial/subspace-dev/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@metorial/subspace-dev/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@metorial/synthesis/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@metorial/synthesis/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@metorial/synthesis/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - - "@prisma/adapter-pg/@types/pg/pg-types/postgres-bytea": ["postgres-bytea@3.0.0", "", { "dependencies": { "obuf": "~1.1.2" } }, "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw=="], - - "@prisma/adapter-pg/@types/pg/pg-types/postgres-date": ["postgres-date@2.1.0", "", {}, "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA=="], - - "@prisma/adapter-pg/@types/pg/pg-types/postgres-interval": ["postgres-interval@3.0.0", "", {}, "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw=="], - - "@sentry/bundler-plugin-core/@sentry/cli/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], - - "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - - "@vitest/coverage-v8/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@vitest/coverage-v8/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@vitest/coverage-v8/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@vitest/ui/vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - - "@vitest/ui/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "@vitest/ui/vitest/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - - "@vscode/test-cli/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "@vscode/test-cli/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "eslint/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "eslint/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "filelist/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "log-symbols/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "maxmin/chalk/strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], - - "mocha/glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - - "mocha/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "mongoose/mongodb/mongodb-connection-string-url/@types/whatwg-url": ["@types/whatwg-url@13.0.0", "", { "dependencies": { "@types/webidl-conversions": "*" } }, "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q=="], - - "mongoose/mongodb/mongodb-connection-string-url/whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], - - "npm-run-all/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], - - "npm-run-all/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "pkg-dir/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - - "rollup-plugin-bundle-size/chalk/strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], - - "rollup-plugin-postcss/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "tar-fs/tar-stream/bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - - "tar-fs/tar-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - - "test-exclude/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "typeorm/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - - "unplugin/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "vscode-test/http-proxy-agent/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "vscode-test/https-proxy-agent/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "wrap-ansi-cjs/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "@aws-sdk/client-s3/@smithy/eventstream-serde-browser/@smithy/eventstream-serde-universal/@smithy/eventstream-codec/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], - - "@aws-sdk/client-s3/@smithy/eventstream-serde-node/@smithy/eventstream-serde-universal/@smithy/eventstream-codec/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], - - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], - - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + "@metorial/data-hooks/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q=="], + "@metorial/data-hooks/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + "@metorial/db/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@inquirer/core/wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "@metorial/db/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@lowerdeck/lock/@types/bun/bun-types/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/debug/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "@metorial/debug/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "@metorial/dynamic-component/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "@metorial/dynamic-component/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "@metorial/event/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "@metorial/event/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "@metorial/fabric/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "@metorial/fabric/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "@metorial/frontend-config/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "@metorial/frontend-config/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "@metorial/id/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "@metorial/id/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "@metorial/internal-clients/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "@metorial/internal-clients/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "@metorial/layout/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "@metorial/layout/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "@metorial/lock/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "@metorial/lock/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "@metorial/logging/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "@metorial/logging/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "@metorial/markdown/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "@metorial/markdown/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "@metorial/mcp-server/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "@metorial/mcp-server/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "@metorial/mcp-transport-memory/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "@metorial/mcp-transport-memory/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-cargo/service/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@metorial/mcp-utils/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "@metorial/mcp-utils/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "@metorial/mcp/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "@metorial/mcp/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "@metorial/microfrontend/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "@metorial/microfrontend/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "@metorial/module-access/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "@metorial/module-access/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "@metorial/module-assistant/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "@metorial/module-assistant/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "@metorial/module-community/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "@metorial/module-community/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "@metorial/module-consumer/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "@metorial/module-consumer/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "@metorial/module-email/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "@metorial/module-email/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "@metorial/module-event/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "@metorial/module-event/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "@metorial/module-file/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "@metorial/module-file/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "@metorial/module-flags/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "@metorial/module-flags/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "@metorial/module-machine-access/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "@metorial/module-machine-access/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "@metorial/module-magic/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "@metorial/module-magic/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-subspace/app-controller/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@metorial/module-markdown/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "@metorial/module-markdown/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "@metorial/module-organization/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "@metorial/module-organization/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "@metorial/module-protect/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "@metorial/module-protect/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "@metorial/module-search/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "@metorial/module-search/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "@metorial/module-subspace/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "@metorial/module-subspace/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "@metorial/module-usage/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "@metorial/module-usage/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "@metorial/module-user/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "@metorial/module-user/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "@metorial/pages/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "@metorial/pages/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "@metorial/presenter/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "@metorial/presenter/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "@metorial/queue/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "@metorial/queue/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "@metorial/redis/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "@metorial/redis/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "@metorial/rest/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "@metorial/rest/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "@metorial/rpc/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/ares/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@metorial/rpc/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/code-editor/tsup/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@metorial/scene-assistant/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/consumer-sdk/tsup/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@metorial/scene-assistant/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/dashboard-sdk/tsup/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@metorial/scene-docs/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "@metorial/scene-docs/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "@metorial/scene-skills/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "@metorial/scene-skills/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "@metorial/slates/@metorial-services/slates-registry-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "@metorial/state/@metorial/generated/@metorial/util-endpoint/@metorial/util-async-iterator": ["@metorial/util-async-iterator@3.0.0", "", {}, "sha512-XaPNjifR7u0TAboXy0Axw8nrCNV5gU7i+TVFRXiBqR5zzz8+mu0FWqaTB9yw2VrjP4FKkHC+2GI8Vxg/CgH5Og=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "@metorial/state/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "@metorial/state/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "@metorial/storage/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "@metorial/storage/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "@metorial/ui-product/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "@metorial/ui-product/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "@metorial/unified-id/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "@metorial/unified-id/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "@prisma/adapter-pg/@types/pg/pg-types/postgres-bytea": ["postgres-bytea@3.0.0", "", { "dependencies": { "obuf": "~1.1.2" } }, "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "@prisma/adapter-pg/@types/pg/pg-types/postgres-date": ["postgres-date@2.1.0", "", {}, "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "@prisma/adapter-pg/@types/pg/pg-types/postgres-interval": ["postgres-interval@3.0.0", "", {}, "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "@sentry/bundler-plugin-core/@sentry/cli/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "@vitest/mocker/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "@vitest/mocker/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "@vitest/mocker/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], - "@metorial/forge/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@vitest/mocker/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "@vitest/mocker/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "@vitest/mocker/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "@vitest/mocker/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "@vitest/mocker/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "@vitest/mocker/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "@vitest/mocker/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "@vitest/mocker/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "@vitest/mocker/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "@vitest/mocker/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "@vitest/mocker/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "@vitest/mocker/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "@vitest/mocker/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "@vitest/mocker/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "@vitest/mocker/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "@vitest/mocker/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "@vitest/mocker/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "@vitest/mocker/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "@vitest/mocker/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "@vitest/mocker/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "@vitest/mocker/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "@vitest/mocker/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "@vitest/mocker/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "@vscode/test-cli/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "@vscode/test-cli/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "eslint/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - "@metorial/function-bay/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "eslint/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "filelist/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "function-bay/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "function-bay/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "log-symbols/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "maxmin/chalk/strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "mocha/glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "mocha/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "mongoose/mongodb/mongodb-connection-string-url/@types/whatwg-url": ["@types/whatwg-url@13.0.0", "", { "dependencies": { "@types/webidl-conversions": "*" } }, "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "mongoose/mongodb/mongodb-connection-string-url/whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "npm-run-all/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "npm-run-all/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "pkg-dir/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "rollup-plugin-bundle-size/chalk/strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "rollup-plugin-postcss/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "tar-fs/tar-stream/bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "tar-fs/tar-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "test-exclude/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "typeorm/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "unplugin/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], - "@metorial/origin/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "vscode-test/http-proxy-agent/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "vscode-test/https-proxy-agent/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "wrap-ansi-cjs/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "@aws-sdk/client-s3/@smithy/eventstream-serde-browser/@smithy/eventstream-serde-universal/@smithy/eventstream-codec/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], - "@metorial/shuttle/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@aws-sdk/client-s3/@smithy/eventstream-serde-node/@smithy/eventstream-serde-universal/@smithy/eventstream-codec/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "@function-bay/nodejs/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "@function-bay/types/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "@function-bay/utils/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "@inquirer/core/wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "@lowerdeck/lock/@types/bun/bun-types/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "@metorial-services/slates-registry-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "@metorial-services/slates-registry-internal-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "@metorial-subspace/list-utils/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "@metorial-subspace/module-agent/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "@metorial-subspace/module-auth/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/signal/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@metorial-subspace/module-callback/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "@metorial-subspace/module-catalog/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "@metorial-subspace/module-connection/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "@metorial-subspace/module-custom-provider/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "@metorial-subspace/module-deployment/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "@metorial-subspace/module-identity/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "@metorial-subspace/module-integration/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "@metorial-subspace/module-session/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "@metorial-subspace/module-skills/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "@metorial-subspace/module-tenant/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "@metorial/api-auth/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "@metorial/api-core/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "@metorial/api-custom-portal/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "@metorial/api-files/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "@metorial/api-keys/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "@metorial/api-oauth/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "@metorial/app-api/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "@metorial/auth/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "@metorial/bearer/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "@metorial/cache/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "@metorial/chart/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "@metorial/code-editor/tsup/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "@metorial/code/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "@metorial/config/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "@metorial/consumer-auth/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@metorial/consumer-sdk/tsup/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "@metorial/context/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "@metorial/cron/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "@metorial/dashboard-sdk/tsup/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "@metorial/data-hooks/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "@metorial/db/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "@metorial/debug/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "@metorial/dynamic-component/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "@metorial/event/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "@metorial/fabric/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "@metorial/frontend-config/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "@metorial/id/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "@metorial/internal-clients/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "@metorial/layout/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "@metorial/lock/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "@metorial/logging/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "@metorial/markdown/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "@metorial/mcp-server/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "@metorial/mcp-transport-memory/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "@metorial/mcp-utils/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "@metorial/mcp/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "@metorial/microfrontend/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "@metorial/module-access/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "@metorial/module-assistant/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "@metorial/module-community/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "@metorial/module-consumer/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/subspace-dev/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@metorial/module-email/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + "@metorial/module-event/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + "@metorial/module-file/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + "@metorial/module-flags/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + "@metorial/module-machine-access/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + "@metorial/module-magic/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + "@metorial/module-markdown/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + "@metorial/module-organization/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + "@metorial/module-protect/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + "@metorial/module-search/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + "@metorial/module-subspace/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + "@metorial/module-usage/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + "@metorial/module-user/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + "@metorial/pages/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + "@metorial/presenter/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + "@metorial/queue/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + "@metorial/redis/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + "@metorial/rest/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + "@metorial/rpc/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + "@metorial/scene-assistant/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + "@metorial/scene-docs/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + "@metorial/scene-skills/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + "@metorial/slates/@metorial-services/slates-registry-client/@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + "@metorial/state/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + "@metorial/storage/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + "@metorial/ui-product/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/synthesis/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@metorial/unified-id/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], - - "@vitest/coverage-v8/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], - - "@vitest/ui/vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], - "eslint/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "function-bay/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "log-symbols/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], "mocha/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], diff --git a/package.json b/package.json index 993df600d..dd1b41578 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "scripts": { "build": "turbo run --ui=stream build", "generate:client": "turbo run generate:client && turbo run build", + "control": "bun run --cwd ./src/tooling/control ./src/cli.ts", "client:generate": "bun run generate:client", "client:generate:dashboard": "turbo run generate:client:dashboard", "client:generate:consumer": "turbo run generate:client:consumer", @@ -42,6 +43,8 @@ "src/systems/*/*/*", "src/systems/*/*/*/*", "src/systems/*/*/*/*/*" + , + "src/tooling/*" ], "dependencies": { "sade": "^1.8.1", diff --git a/scripts/dev-tools/src/cli.ts b/scripts/dev-tools/src/cli.ts index 307481b6c..7330165b9 100755 --- a/scripts/dev-tools/src/cli.ts +++ b/scripts/dev-tools/src/cli.ts @@ -1,5 +1,6 @@ #!/usr/bin/env bun +import { runControl } from './commands/control'; import { initMinio } from './commands/initMinio'; import { setEnv } from './commands/setEnv'; @@ -17,9 +18,14 @@ switch (command) { initMinio(); break; + case 'control': + await runControl(args); + break; + default: console.error(`Unknown command: ${command ?? ''}`); console.error('Use `./dev-tools start` to start the development server.'); + console.error('Use `./dev-tools control` to run control test commands.'); process.exit(1); break; } diff --git a/scripts/dev-tools/src/commands/control.ts b/scripts/dev-tools/src/commands/control.ts new file mode 100644 index 000000000..e2587c161 --- /dev/null +++ b/scripts/dev-tools/src/commands/control.ts @@ -0,0 +1,17 @@ +import { join, resolve } from 'path'; +import { OSS_DIR } from '../const'; + +export let runControl = async (args: string[]) => { + let controlCli = join(OSS_DIR, 'src/tooling/control/src/cli.ts'); + let cwd = process.env.METORIAL_PWD ? resolve(process.env.METORIAL_PWD) : process.cwd(); + + let proc = Bun.spawn(['bun', controlCli, ...args], { + cwd, + env: process.env, + stdin: 'inherit', + stdout: 'inherit', + stderr: 'inherit' + }); + let code = await proc.exited; + process.exit(code); +}; diff --git a/src/systems/cargo/service/control.toml b/src/systems/cargo/service/control.toml new file mode 100644 index 000000000..b45e3cdc9 --- /dev/null +++ b/src/systems/cargo/service/control.toml @@ -0,0 +1,50 @@ +[control] +name = "cargo" + +[service] +port = 52150 +dockerfile = "src/systems/cargo/service/dev.Dockerfile" +build_context = "oss" +health = { path = "/ping", cmd = "bun -e \"fetch('http://localhost:52151/ping').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" } + +[test.e2e] +command = "bun run test" +setup = ["bun prisma generate --schema ../db/prisma/schema --config ../db/prisma.config.ts", "bun prisma db push --accept-data-loss --schema ../db/prisma/schema --config ../db/prisma.config.ts"] +cwd = "/app/src/systems/cargo/service" +runner = "service" + +[env] +DATABASE_URL = "postgresql://cargo:cargo@$deps.postgres.5432/cargo-test" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +VOYAGER_URL = "http://$deps.voyager.52060/metorial-voyager" +FILES_BUCKET_NAME = "cargo-files-test" +CARGO_API_PORT = "52150" +CARGO_CONTENT_PORT = "52151" +CARGO_HEALTH_PORT = "12121" +DOWNLOAD_PUBLIC_URL = "http://cargo-content.test" +CARGO_REGION = "tst" +SIGNED_DOWNLOAD_URL_TOKEN_SECRET = "cargo-download-test-secret" +METORIAL_ENV = "development" + +[[deps]] +name = "postgres" +preset = "postgres" +init = "init-test-db.sh" + +[deps.env] +POSTGRES_USER = "cargo" +POSTGRES_PASSWORD = "cargo" +POSTGRES_DB = "cargo" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "object-store" +mock = "object-store" + +[[deps]] +name = "voyager" +mock = "voyager" diff --git a/src/systems/cargo/service/src/test/preload-env.ts b/src/systems/cargo/service/src/test/preload-env.ts new file mode 100644 index 000000000..236fed270 --- /dev/null +++ b/src/systems/cargo/service/src/test/preload-env.ts @@ -0,0 +1,17 @@ +process.env.CARGO_API_PORT ??= '52150'; +process.env.CARGO_CONTENT_PORT ??= '52151'; +process.env.CARGO_HEALTH_PORT ??= '12121'; +process.env.REDIS_URL ??= 'redis://localhost:56379/0'; +process.env.VOYAGER_URL ??= 'http://voyager.test/metorial-voyager'; +process.env.OBJECT_STORAGE_URL ??= 'http://object-storage.test'; +process.env.FILES_BUCKET_NAME ??= 'cargo-files-test'; +process.env.DOWNLOAD_PUBLIC_URL ??= 'http://cargo-content.test'; +process.env.API_URL ??= 'http://cargo-api.test'; +process.env.CARGO_REGION ??= 'tst'; +process.env.SIGNED_DOWNLOAD_URL_TOKEN_SECRET ??= 'cargo-download-test-secret'; +process.env.ORIGIN_URL ??= 'http://origin.test/metorial-origin'; +process.env.CODE_BUCKET_SERVICE_URL ??= 'code-bucket:5050'; + +if (process.env.CARGO_DATABASE_URL) { + process.env.DATABASE_URL = process.env.CARGO_DATABASE_URL; +} diff --git a/src/systems/cargo/service/src/test/setup.ts b/src/systems/cargo/service/src/test/setup.ts index 58a541226..310942d2e 100644 --- a/src/systems/cargo/service/src/test/setup.ts +++ b/src/systems/cargo/service/src/test/setup.ts @@ -1,14 +1,4 @@ -process.env.CARGO_API_PORT ??= '52150'; -process.env.CARGO_CONTENT_PORT ??= '52151'; -process.env.CARGO_HEALTH_PORT ??= '12121'; -process.env.REDIS_URL ??= 'redis://localhost:56379/0'; -process.env.VOYAGER_URL ??= 'http://voyager.test/metorial-voyager'; -process.env.OBJECT_STORAGE_URL ??= 'http://object-storage.test'; -process.env.FILES_BUCKET_NAME ??= 'cargo-files-test'; -process.env.DOWNLOAD_PUBLIC_URL ??= 'http://cargo-content.test'; -process.env.API_URL ??= 'http://cargo-api.test'; -process.env.CARGO_REGION ??= 'tst'; -process.env.SIGNED_DOWNLOAD_URL_TOKEN_SECRET ??= 'cargo-download-test-secret'; +import './preload-env'; import { PrismaPg } from '@prisma/adapter-pg'; import { flushAfterTransactionHooks, PrismaClient } from '@metorial-cargo/db'; diff --git a/src/systems/forge/service/control.toml b/src/systems/forge/service/control.toml new file mode 100644 index 000000000..65b7491c3 --- /dev/null +++ b/src/systems/forge/service/control.toml @@ -0,0 +1,45 @@ +[control] +name = "forge" + +[service] +port = 52020 +dockerfile = "dev.Dockerfile" +build_context = "." + +[test.e2e] +command = "bun run test" +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] +cwd = "/app" +runner = "service" + +[test.unit] +command = "bun run test" +cwd = "/app" + +[env] +DATABASE_URL = "postgresql://forge:forge@$deps.postgres.5432/forge-test" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +ARTIFACT_BUCKET_NAME = "artifacts-test" +LOG_BUCKET_NAME = "logs-test" +ENCRYPTION_KEY = "test-encryption-key-32-bytes!!" +DEFAULT_PROVIDER = "aws.code-build" +CODE_BUILD_AWS_REGION = "us-east-1" + +[[deps]] +name = "postgres" +preset = "postgres" +init = "init-test-db.sh" + +[deps.env] +POSTGRES_USER = "forge" +POSTGRES_PASSWORD = "forge" +POSTGRES_DB = "forge" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "object-store" +mock = "object-store" diff --git a/src/systems/function-bay/service/control.toml b/src/systems/function-bay/service/control.toml new file mode 100644 index 000000000..d7a34a0c5 --- /dev/null +++ b/src/systems/function-bay/service/control.toml @@ -0,0 +1,56 @@ +[control] +name = "function-bay" + +[service] +port = 52030 +dockerfile = "src/systems/function-bay/service/dev.Dockerfile" +build_context = "oss" + +[test.e2e] +command = "bun run test" +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] +cwd = "/app/src/systems/function-bay/service" +runner = "service" + +[env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/function-bay-test" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +BUNDLE_BUCKET_NAME = "bundles" +ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" +FORGE_API_URL = "http://$deps.forge.52020/metorial-forge" +DEFAULT_PROVIDER = "aws.lambda" +LAMBDA_AWS_REGION = "us-east-1" + +[[deps]] +name = "postgres" +preset = "postgres" +init = "init-test-db.sh" + +[deps.env] +POSTGRES_USER = "postgres" +POSTGRES_PASSWORD = "postgres" +POSTGRES_DB = "postgres" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "object-store" +mock = "object-store" + +[[deps]] +name = "forge" +control = "../../forge/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/forge" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +ARTIFACT_BUCKET_NAME = "artifacts-test" +LOG_BUCKET_NAME = "logs-test" +ENCRYPTION_KEY = "test-encryption-key-32-bytes!!" +DEFAULT_PROVIDER = "aws.code-build" +CODE_BUILD_AWS_REGION = "us-east-1" diff --git a/src/systems/origin/apps/code-bucket/Dockerfile b/src/systems/origin/apps/code-bucket/Dockerfile index bc13f8855..046c97b74 100644 --- a/src/systems/origin/apps/code-bucket/Dockerfile +++ b/src/systems/origin/apps/code-bucket/Dockerfile @@ -49,7 +49,7 @@ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o code-bucket ./cmd # Stage 3: Final minimal image FROM alpine:latest -RUN apk --no-cache add ca-certificates tzdata +RUN apk --no-cache add ca-certificates tzdata netcat-openbsd WORKDIR /root/ diff --git a/src/systems/origin/apps/code-bucket/control.toml b/src/systems/origin/apps/code-bucket/control.toml new file mode 100644 index 000000000..4e192c67a --- /dev/null +++ b/src/systems/origin/apps/code-bucket/control.toml @@ -0,0 +1,25 @@ +[control] +name = "code-bucket" + +[service] +port = 52091 +dockerfile = "src/systems/origin/apps/code-bucket/Dockerfile" +build_context = "oss" +health = { cmd = "nc -z localhost 52091" } + +[env] +CODE_BUCKET_JWT_SECRET = "dev-secret-change-in-production" +CODE_BUCKET_OBJECT_STORAGE_BUCKET = "code-bucket" +CODE_BUCKET_OBJECT_STORAGE_ENDPOINT = "http://$deps.object-store.52010" +CODE_BUCKET_REDIS_URL = "redis://$deps.redis.6379" +CODE_BUCKET_HTTP_ADDRESS = ":52091" +CODE_BUCKET_WORKSPACE_ADDRESS = ":52092" +CODE_BUCKET_RPC_ADDRESS = ":5050" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "object-store" +mock = "object-store" diff --git a/src/systems/origin/apps/service/control.toml b/src/systems/origin/apps/service/control.toml new file mode 100644 index 000000000..87f5b6343 --- /dev/null +++ b/src/systems/origin/apps/service/control.toml @@ -0,0 +1,54 @@ +[control] +name = "origin" + +[service] +port = 52090 +dockerfile = "src/systems/origin/apps/service/dev.Dockerfile" +build_context = "oss" +health = { path = "/ping" } + +[env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/origin" +REDIS_URL = "redis://$deps.redis.6379/0" +ORIGIN_SERVICE_PUBLIC_URL = "http://origin:52093" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +CODE_BUCKET_OBJECT_STORAGE_BUCKET = "code-bucket" +CODE_BUCKET_SERVICE_URL = "code-bucket:5050" +CODE_BUCKET_EDITOR_URL = "http://code-bucket:52092" +CODE_BUCKET_EDITOR_API_URL = "http://code-bucket:52091" +SCM_GITHUB_APP_ID = "test-github-app-id" +SCM_GITHUB_APP_SLUG = "test-github-app" +SCM_GITHUB_APP_CLIENT_ID = "test-github-client-id" +SCM_GITHUB_APP_CLIENT_SECRET = "test-github-client-secret" +SCM_GITHUB_APP_PRIVATE_KEY_BASE_64 = "dGVzdC1wcml2YXRlLWtleQ==" + +[[deps]] +name = "postgres" +preset = "postgres" + +[deps.env] +POSTGRES_USER = "postgres" +POSTGRES_PASSWORD = "postgres" +POSTGRES_DB = "origin" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "object-store" +mock = "object-store" + +[[deps]] +name = "code-bucket" +control = "../code-bucket" +scope = "service" + +[deps.env] +CODE_BUCKET_JWT_SECRET = "dev-secret-change-in-production" +CODE_BUCKET_OBJECT_STORAGE_BUCKET = "code-bucket" +CODE_BUCKET_OBJECT_STORAGE_ENDPOINT = "http://$deps.object-store.52010" +CODE_BUCKET_REDIS_URL = "redis://$deps.redis.6379" +CODE_BUCKET_HTTP_ADDRESS = ":52091" +CODE_BUCKET_WORKSPACE_ADDRESS = ":52092" +CODE_BUCKET_RPC_ADDRESS = ":5050" diff --git a/src/systems/origin/apps/service/dev.Dockerfile b/src/systems/origin/apps/service/dev.Dockerfile index dd774b295..388cbf403 100644 --- a/src/systems/origin/apps/service/dev.Dockerfile +++ b/src/systems/origin/apps/service/dev.Dockerfile @@ -2,17 +2,14 @@ FROM oven/bun:1 WORKDIR /app -# Copy package files -COPY package.json bun.lock* ./ +COPY . . -# Install dependencies -RUN bun install +RUN sh ./src/systems/origin/scripts/prepare-docker-build.sh -# Copy source code -COPY . . +WORKDIR /app/src/systems/origin/apps/service -# Expose port -EXPOSE 51001 +RUN mkdir -p ./node_modules/@metorial/code-bucket-service-generated && \ + cp ../code-bucket/package.json ../code-bucket/index.ts ./node_modules/@metorial/code-bucket-service-generated/ && \ + cp -r ../code-bucket/ts-proto-gen ./node_modules/@metorial/code-bucket-service-generated/ts-proto-gen -# Run in dev mode with hot reloading -CMD ["sh", "-c", "bun --watch src/server.ts"] +CMD ["sh", "-c", "bunx prisma generate && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/shuttle/service/control.toml b/src/systems/shuttle/service/control.toml new file mode 100644 index 000000000..2d2169a23 --- /dev/null +++ b/src/systems/shuttle/service/control.toml @@ -0,0 +1,82 @@ +[control] +name = "shuttle" + +[service] +port = 52080 +dockerfile = "src/systems/shuttle/service/dev.Dockerfile" +build_context = "oss" + +[test.e2e] +command = "bun run test:e2e" +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] +cwd = "/app/src/systems/shuttle/service" +runner = "service" + +[test.unit] +command = "bun run test:unit" +cwd = "/app/src/systems/shuttle/service" + +[env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/shuttle-test" +REDIS_URL = "redis://$deps.redis.6379/0" +PROVIDER_OAUTH_URL = "http://shuttle:52081" +ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" +HOLOPOD_HTTP_ENDPOINT = "test.local:50051" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +LOGS_BUCKET_NAME = "shuttle-logs" +FUNCTION_BAY_API_URL = "http://$deps.function-bay.52030/metorial-function-bay" +FUNCTION_BAY_TENANT_IDENTIFIER = "shuttle-ci" +FUNCTION_BAY_DEFAULT_MEMORY_MB = "512" +FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS = "15" +FORGE_API_URL = "http://$deps.forge.52020/metorial-forge" +DEFAULT_PROVIDER = "aws.lambda" +BUNDLE_BUCKET_NAME = "bundles" +OBJECT_STORAGE_BACKEND_TYPE = "local" +OBJECT_STORAGE_BACKEND_ROOT_PATH = "/app/data" + +[[deps]] +name = "postgres" +preset = "postgres" +init = "init-test-db.sh" + +[deps.env] +POSTGRES_USER = "postgres" +POSTGRES_PASSWORD = "postgres" +POSTGRES_DB = "postgres" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "object-store" +mock = "object-store" + +[[deps]] +name = "forge" +control = "../../forge/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/forge" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" +DEFAULT_PROVIDER = "aws.code-build" +ARTIFACT_BUCKET_NAME = "artifacts" +LOG_BUCKET_NAME = "logs" + +[[deps]] +name = "function-bay" +control = "../../function-bay/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/function-bay" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +BUNDLE_BUCKET_NAME = "bundles" +ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" +FORGE_API_URL = "http://$deps.forge.52020/metorial-forge" +DEFAULT_PROVIDER = "aws.lambda" +LAMBDA_AWS_REGION = "us-east-1" diff --git a/src/systems/signal/service/control.toml b/src/systems/signal/service/control.toml new file mode 100644 index 000000000..76633c472 --- /dev/null +++ b/src/systems/signal/service/control.toml @@ -0,0 +1,37 @@ +[control] +name = "signal" + +[service] +port = 52050 +dockerfile = "dev.Dockerfile" +build_context = "." + +[test.e2e] +command = "bun run test" +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] +cwd = "/app/service" +runner = "service" + +[env] +DATABASE_URL = "postgresql://signal:signal@$deps.postgres.5432/signal-test" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +LOGS_BUCKET_NAME = "bundles-test" + +[[deps]] +name = "postgres" +preset = "postgres" +init = "init-test-db.sh" + +[deps.env] +POSTGRES_USER = "signal" +POSTGRES_PASSWORD = "signal" +POSTGRES_DB = "signal" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "object-store" +mock = "object-store" diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml new file mode 100644 index 000000000..8958141f4 --- /dev/null +++ b/src/systems/slates/apps/hub/control.toml @@ -0,0 +1,101 @@ +[control] +name = "slates-hub" + +[service] +port = 52045 +dockerfile = "src/systems/slates/apps/hub/dev.Dockerfile" +build_context = "oss" + +[test.e2e] +command = "bun run test" +setup = ["bun prisma generate --schema prisma/schema", "bun prisma db push --accept-data-loss --schema prisma/schema"] +cwd = "/app/src/systems/slates/apps/hub" +runner = "service" + +[env] +DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/slates-hub-test" +REDIS_URL = "redis://$deps.redis.6379/0" +METORIAL_ENV = "development" +ENCRYPTION_KEY = "sTrG+z8ewVo7JJsgmv39UL/YDdgxlHSVhVPJOV7Omdg" +FUNCTION_BAY_API_URL = "http://$deps.function-bay.52030/metorial-function-bay" +FUNCTION_BAY_TENANT_IDENTIFIER = "test-tenant" +FUNCTION_BAY_DEFAULT_MEMORY_MB = "512" +FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS = "15" +SIGNAL_API_URL = "http://$deps.signal.52050/metorial-signal" +SIGNAL_SENDER_IDENTIFIER = "test-slates-hub" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +INVOCATIONS_BUCKET_NAME = "test-invocations" +INITIAL_REGISTRIES = "http://$deps.slates-registry.52040" +SLATES_HUB_INSTANCE_IDENTIFIER = "test-slates-hub" +SERVICE_PUBLIC_URL = "http://slates-hub:52045" + +[[deps]] +name = "postgres" +preset = "postgres" +init = "init-test-db.sh" + +[deps.env] +POSTGRES_USER = "slates-hub" +POSTGRES_PASSWORD = "slates-hub" +POSTGRES_DB = "slates-hub" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "object-store" +mock = "object-store" + +[[deps]] +name = "forge" +control = "../../../forge/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/forge" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +ENCRYPTION_KEY = "sTrG+z8ewVo7JJsgmv39UL/YDdgxlHSVhVPJOV7Omdg" +DEFAULT_PROVIDER = "aws.code-build" +ARTIFACT_BUCKET_NAME = "artifacts" +LOG_BUCKET_NAME = "logs" + +[[deps]] +name = "function-bay" +control = "../../../function-bay/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/function-bay" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +BUNDLE_BUCKET_NAME = "bundles" +ENCRYPTION_KEY = "sTrG+z8ewVo7JJsgmv39UL/YDdgxlHSVhVPJOV7Omdg" +FORGE_API_URL = "http://$deps.forge.52020/metorial-forge" +DEFAULT_PROVIDER = "aws.lambda" +LAMBDA_AWS_REGION = "us-east-1" + +[[deps]] +name = "signal" +control = "../../../signal/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/signal" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +LOGS_BUCKET_NAME = "bundles" + +[[deps]] +name = "slates-registry" +control = "../registry" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/slates-registry" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +PACKAGE_BUCKET_NAME = "slates-hub-packages" +SERVICE_PUBLIC_URL = "http://slates-registry:52040" +PUBLIC_ACCESS_PERMITTED = "true" diff --git a/src/systems/slates/apps/registry/control.toml b/src/systems/slates/apps/registry/control.toml new file mode 100644 index 000000000..569fa0242 --- /dev/null +++ b/src/systems/slates/apps/registry/control.toml @@ -0,0 +1,39 @@ +[control] +name = "slates-registry" + +[service] +port = 52040 +dockerfile = "src/systems/slates/apps/registry/dev.Dockerfile" +build_context = "oss" +health = { path = "/ping" } + +[test.e2e] +command = "bun run test" +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] +cwd = "/app/src/systems/slates/apps/registry" +runner = "service" + +[env] +DATABASE_URL = "postgresql://slates-registry:slates-registry@$deps.postgres.5432/slates-registry" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +PACKAGE_BUCKET_NAME = "slates-registry-packages-test" +SERVICE_PUBLIC_URL = "http://slates-registry:52040" +PUBLIC_ACCESS_PERMITTED = "true" + +[[deps]] +name = "postgres" +preset = "postgres" + +[deps.env] +POSTGRES_USER = "slates-registry" +POSTGRES_PASSWORD = "slates-registry" +POSTGRES_DB = "slates-registry" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "object-store" +mock = "object-store" diff --git a/src/systems/slates/apps/registry/package.json b/src/systems/slates/apps/registry/package.json index 899b7fd00..a2c2dc8d5 100644 --- a/src/systems/slates/apps/registry/package.json +++ b/src/systems/slates/apps/registry/package.json @@ -20,6 +20,7 @@ "infra:up": "docker compose -p slates-registry -f ./docker-compose.dev.yml up --pull always --build slates-registry object-storage", "admin:build": "vite build --config admin/vite.config.ts", "admin:dev": "vite --config admin/vite.config.ts", + "test": "bun test", "typecheck": "tsc --noEmit && bun run admin:typecheck", "admin:typecheck": "tsc --noEmit --project admin/tsconfig.json" }, diff --git a/src/systems/subspace/apps/controller/.env.ci b/src/systems/subspace/apps/controller/.env.ci index bdd7bc810..8a111fb0c 100644 --- a/src/systems/subspace/apps/controller/.env.ci +++ b/src/systems/subspace/apps/controller/.env.ci @@ -5,7 +5,7 @@ DATABASE_URL=postgresql://postgres:postgres@postgres:5432/subspace-test PUBLIC_SERVICE_URL=http://subspace-public:52071 REDIS_URL=redis://redis:6379/0 -NATS_URL=nats://nats-1:4222,nats://nats-2:4222 +NATS_URL=nats://nats:4222 SLATES_HUB_URL=http://slates-hub:52046/slates-hub SLATES_HUB_PUBLIC_URL=http://slates-hub:52045 @@ -18,7 +18,19 @@ TEST_MCP_SERVER_BASE_URL=http://mcp-test-server:52198 VOYAGER_URL=http://voyager:52060/metorial-voyager ORIGIN_URL=http://origin:52090/metorial-origin -OBJECT_STORAGE_URL=http://object-storage:52010 +OBJECT_STORAGE_URL=http://object-store:52010 MESSAGE_BUCKET_NAME=subspace-messages-test METORIAL_ENV=development + +CARGO_API_URL=http://cargo:52150/metorial-cargo +CARGO_API_PORT=52150 +CARGO_CONTENT_PORT=52151 +CARGO_HEALTH_PORT=12121 +CARGO_REGION=tst +FILES_BUCKET_NAME=cargo-files-test +SIGNED_DOWNLOAD_URL_TOKEN_SECRET=cargo-download-test-secret +API_URL=http://cargo:52150 +DOWNLOAD_PUBLIC_URL=http://cargo:52151 +CARGO_DATABASE_URL=postgresql://postgres:postgres@postgres:5432/cargo-test +CODE_BUCKET_SERVICE_URL=code-bucket:5050 diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml new file mode 100644 index 000000000..1b05b7600 --- /dev/null +++ b/src/systems/subspace/apps/controller/control.toml @@ -0,0 +1,216 @@ +[control] +name = "subspace-controller" + +[service] +port = 52070 +dockerfile = "src/systems/subspace/apps/controller/dev.Dockerfile" +build_context = "oss" + +[test.e2e] +command = "set -a && . ./.env.ci && set +a && bun run test:ci" +setup = [ + "bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", + "bunx prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts" +] +cwd = "/app/src/systems/subspace/apps/controller" +runner = "sidecar" + +[env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/subspace-test" +PUBLIC_SERVICE_URL = "http://subspace-public:52071" +REDIS_URL = "redis://$deps.redis.6379/0" +NATS_URL = "nats://$deps.nats.4222" +SLATES_HUB_URL = "http://$deps.slates-hub.52046/slates-hub" +SLATES_HUB_PUBLIC_URL = "http://$deps.slates-hub.52045" +SHUTTLE_URL = "http://$deps.shuttle.52080/metorial-shuttle" +SHUTTLE_LIVE_URL = "http://$deps.shuttle.52080" +SHUTTLE_PUBLIC_URL = "http://$deps.shuttle.52081" +TEST_MCP_SERVER_BASE_URL = "http://$deps.mcp-test-server.52198" +VOYAGER_URL = "http://$deps.voyager.52060/metorial-voyager" +ORIGIN_URL = "http://origin:52090/metorial-origin" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +MESSAGE_BUCKET_NAME = "subspace-messages-test" +METORIAL_ENV = "development" +CARGO_API_URL = "http://$deps.cargo.52150/metorial-cargo" + +[[deps]] +name = "postgres" +preset = "postgres" +init = "../../init-test-db.sh" + +[deps.env] +POSTGRES_USER = "postgres" +POSTGRES_PASSWORD = "postgres" +POSTGRES_DB = "postgres" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "nats" +preset = "nats" + +[[deps]] +name = "object-store" +mock = "object-store" + +[[deps]] +name = "voyager" +mock = "voyager" + +[[deps]] +name = "forge" +control = "../../../forge/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/forge" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +ENCRYPTION_KEY = "test-encryption-key-32-bytes!!" +DEFAULT_PROVIDER = "aws.code-build" +ARTIFACT_BUCKET_NAME = "artifacts" +LOG_BUCKET_NAME = "logs" +CODE_BUILD_AWS_REGION = "us-east-1" + +[[deps]] +name = "function-bay" +control = "../../../function-bay/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/function-bay" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +BUNDLE_BUCKET_NAME = "bundles" +ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" +FORGE_API_URL = "http://$deps.forge.52020/metorial-forge" +DEFAULT_PROVIDER = "aws.lambda" +LAMBDA_AWS_REGION = "us-east-1" + +[[deps]] +name = "signal" +control = "../../../signal/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/signal" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +LOGS_BUCKET_NAME = "bundles" + +[[deps]] +name = "slates-registry" +control = "../../../slates/apps/registry" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/slates-registry" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +PACKAGE_BUCKET_NAME = "subspace-packages" +SERVICE_PUBLIC_URL = "http://slates-registry:52040" +PUBLIC_ACCESS_PERMITTED = "true" + +[[deps]] +name = "slates-hub" +control = "../../../slates/apps/hub" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/slates-hub" +REDIS_URL = "redis://$deps.redis.6379/0" +METORIAL_ENV = "development" +ENCRYPTION_KEY = "sTrG+z8ewVo7JJsgmv39UL/YDdgxlHSVhVPJOV7Omdg" +FUNCTION_BAY_API_URL = "http://$deps.function-bay.52030/metorial-function-bay" +FUNCTION_BAY_TENANT_IDENTIFIER = "dev-tenant" +FUNCTION_BAY_DEFAULT_MEMORY_MB = "512" +FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS = "15" +SIGNAL_API_URL = "http://$deps.signal.52050/metorial-signal" +SIGNAL_SENDER_IDENTIFIER = "dev-subspace" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +INVOCATIONS_BUCKET_NAME = "subspace-invocations" +INITIAL_REGISTRIES = "http://$deps.slates-registry.52040" +SLATES_HUB_INSTANCE_IDENTIFIER = "dev-subspace" +SERVICE_PUBLIC_URL = "http://slates-hub:52045" + +[[deps]] +name = "shuttle" +control = "../../../shuttle/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/shuttle" +REDIS_URL = "redis://$deps.redis.6379/0" +ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" +PROVIDER_OAUTH_URL = "http://shuttle:52081" +HOLOPOD_HTTP_ENDPOINT = "test.local:50051" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +LOGS_BUCKET_NAME = "shuttle-logs" +FUNCTION_BAY_API_URL = "http://$deps.function-bay.52030/metorial-function-bay" +FUNCTION_BAY_TENANT_IDENTIFIER = "dev-tenant" +FUNCTION_BAY_DEFAULT_MEMORY_MB = "512" +FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS = "15" +SHUTTLE_ALLOW_PRIVATE_URLS = "true" +SHUTTLE_UNSAFE_SSRF_BYPASS = "true" + +[[deps]] +name = "cargo" +control = "../../../cargo/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/cargo-test" +REDIS_URL = "redis://$deps.redis.6379/0" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +VOYAGER_URL = "http://$deps.voyager.52060/metorial-voyager" +FILES_BUCKET_NAME = "cargo-files-test" +CARGO_API_PORT = "52150" +CARGO_CONTENT_PORT = "52151" +CARGO_HEALTH_PORT = "12121" +DOWNLOAD_PUBLIC_URL = "http://cargo:52151" +CARGO_REGION = "tst" +SIGNED_DOWNLOAD_URL_TOKEN_SECRET = "cargo-download-test-secret" +METORIAL_ENV = "development" +ORIGIN_URL = "http://origin:52090/metorial-origin" +CODE_BUCKET_SERVICE_URL = "code-bucket:5050" +API_URL = "http://cargo:52150" + +[[deps]] +name = "code-bucket" +control = "../../../origin/apps/code-bucket" +scope = "service" + +[deps.env] +CODE_BUCKET_JWT_SECRET = "dev-secret-change-in-production" +CODE_BUCKET_OBJECT_STORAGE_BUCKET = "code-bucket" +CODE_BUCKET_OBJECT_STORAGE_ENDPOINT = "http://$deps.object-store.52010" +CODE_BUCKET_REDIS_URL = "redis://$deps.redis.6379" +CODE_BUCKET_HTTP_ADDRESS = ":52091" +CODE_BUCKET_WORKSPACE_ADDRESS = ":52092" +CODE_BUCKET_RPC_ADDRESS = ":5050" + +[[deps]] +name = "origin" +control = "../../../origin/apps/service" +scope = "service" + +[deps.env] +DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/origin" +REDIS_URL = "redis://$deps.redis.6379/0" +ORIGIN_SERVICE_PUBLIC_URL = "http://origin:52093" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +CODE_BUCKET_OBJECT_STORAGE_BUCKET = "code-bucket" +CODE_BUCKET_SERVICE_URL = "code-bucket:5050" +CODE_BUCKET_EDITOR_URL = "http://code-bucket:52092" +CODE_BUCKET_EDITOR_API_URL = "http://code-bucket:52091" +SCM_GITHUB_APP_ID = "test-github-app-id" +SCM_GITHUB_APP_SLUG = "test-github-app" +SCM_GITHUB_APP_CLIENT_ID = "test-github-client-id" +SCM_GITHUB_APP_CLIENT_SECRET = "test-github-client-secret" +SCM_GITHUB_APP_PRIVATE_KEY_BASE_64 = "dGVzdC1wcml2YXRlLWtleQ==" + +[[deps]] +name = "mcp-test-server" +inline = { build = { context = "oss", dockerfile = "src/systems/subspace/apps/controller/dev.Dockerfile" }, command = ["sh", "-c", "PORT=52198 bun ./src/systems/subspace/test-servers/index.ts"], port = 52198, health = { cmd = "bun -e \"fetch('http://localhost:52198/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } } diff --git a/src/systems/subspace/apps/controller/src/connection/tests/mcp.e2e.test.ts b/src/systems/subspace/apps/controller/src/connection/tests/mcp.e2e.test.ts index 32a43830f..a235964c3 100644 --- a/src/systems/subspace/apps/controller/src/connection/tests/mcp.e2e.test.ts +++ b/src/systems/subspace/apps/controller/src/connection/tests/mcp.e2e.test.ts @@ -1,5 +1,6 @@ import { createHono } from '@lowerdeck/hono'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; +import { applySessionProviderNameTemplate } from '@metorial-subspace/module-session/src/lib/sessionProviderNameTemplate'; import { describe, expect, it } from 'vitest'; import { createMcpE2eContext } from '../../test/fixtures'; import { createHonoFetchAdapter } from '../../test/helpers/honoFetchAdapter'; @@ -25,6 +26,18 @@ let transportCases = [ let defaultTransportCase = transportCases[0]; +let getSessionProviderNameTemplate = async (sessionOid: bigint) => { + let sessionProvider = await testDb.sessionProvider.findFirstOrThrow({ + where: { sessionOid, status: 'active' } + }); + + expect(sessionProvider.nameTemplate).toBeTruthy(); + return sessionProvider.nameTemplate!; +}; + +let withNameTemplate = (template: string, original: string) => + applySessionProviderNameTemplate(template, original); + describe('mcp.e2e', () => { let lifecycle = setupMcpE2ELifecycle(); let api = createHono().route('/:solutionId/:tenantId/sessions/:sessionId/mcp', mcpRouter); @@ -149,6 +162,7 @@ describe('mcp.e2e', () => { try { await mcp.connect(); + let nameTemplate = await getSessionProviderNameTemplate(ctx.session.oid); let tools = await mcp.client.listTools(); let toolNames = tools.tools.map(t => t.name); @@ -162,15 +176,29 @@ describe('mcp.e2e', () => { let resourceTemplates = await mcp.client.listResourceTemplates(); let templateUris = resourceTemplates.resourceTemplates.map(t => t.uriTemplate); - expect(templateUris.some(uri => uri.startsWith('test://user/{id}'))).toBe(true); - expect(templateUris.some(uri => uri.startsWith('test://log/{date}'))).toBe(false); + expect( + templateUris.some(uri => uri.startsWith(withNameTemplate(nameTemplate, 'test://user/{id}'))) + ).toBe(true); + expect( + templateUris.some(uri => uri.startsWith(withNameTemplate(nameTemplate, 'test://log/{date}'))) + ).toBe(false); let resources = await mcp.client.listResources(); let resourceUris = resources.resources.map(r => r.uri); - expect(resourceUris.some(uri => uri.startsWith('test://data/config_'))).toBe(true); - expect(resourceUris.some(uri => uri.startsWith('test://data/users_'))).toBe(false); + expect( + resourceUris.some(uri => + uri.startsWith(withNameTemplate(nameTemplate, 'test://data/config')) + ) + ).toBe(true); + expect( + resourceUris.some(uri => + uri.startsWith(withNameTemplate(nameTemplate, 'test://data/users')) + ) + ).toBe(false); - let configResource = resourceUris.find(uri => uri.startsWith('test://data/config_')); + let configResource = resourceUris.find(uri => + uri.startsWith(withNameTemplate(nameTemplate, 'test://data/config')) + ); expect(configResource).toBeTruthy(); let configContents = await mcp.client.readResource({ uri: configResource! }); @@ -215,6 +243,7 @@ describe('mcp.e2e', () => { try { await mcp.connect(); + let nameTemplate = await getSessionProviderNameTemplate(ctx.session.oid); let tools = await mcp.client.listTools(); let toolNames = tools.tools.map(t => t.name); @@ -228,15 +257,25 @@ describe('mcp.e2e', () => { let resources = await mcp.client.listResources(); let resourceUris = resources.resources.map(r => r.uri); - expect(resourceUris.some(uri => uri.startsWith('test://data/config_'))).toBe(true); - expect(resourceUris.some(uri => uri.startsWith('test://data/users_'))).toBe(false); + expect( + resourceUris.some(uri => + uri.startsWith(withNameTemplate(nameTemplate, 'test://data/config')) + ) + ).toBe(true); + expect( + resourceUris.some(uri => + uri.startsWith(withNameTemplate(nameTemplate, 'test://data/users')) + ) + ).toBe(false); - let configResource = resourceUris.find(uri => uri.startsWith('test://data/config_')); + let configResource = resourceUris.find(uri => + uri.startsWith(withNameTemplate(nameTemplate, 'test://data/config')) + ); expect(configResource).toBeTruthy(); let blockedUsersResource = configResource!.replace( - 'test://data/config_', - 'test://data/users_' + withNameTemplate(nameTemplate, 'test://data/config'), + withNameTemplate(nameTemplate, 'test://data/users') ); await expect(mcp.client.readResource({ uri: blockedUsersResource })).rejects.toThrow( diff --git a/src/systems/subspace/apps/controller/src/controllers/tests/skill.e2e.test.ts b/src/systems/subspace/apps/controller/src/controllers/tests/skill.e2e.test.ts index fb6c95aac..f1c8ad2b4 100644 --- a/src/systems/subspace/apps/controller/src/controllers/tests/skill.e2e.test.ts +++ b/src/systems/subspace/apps/controller/src/controllers/tests/skill.e2e.test.ts @@ -192,8 +192,7 @@ describe('skill.e2e', () => { }); it('creates, updates, and archives a skill through the controller', async () => { - let { client, tenant, tenantRecord, environmentRecord, solutionRecord } = - await createTenantContext(); + let { client, tenant, environmentRecord } = await createTenantContext(); let created = await client.skill.create({ tenantId: tenant.id, @@ -203,20 +202,16 @@ describe('skill.e2e', () => { }); let createdSkillRecord = await testDb.skill.findUniqueOrThrow({ - where: { id: created.id } - }); - let createdSkillGroupRecord = await testDb.skillGroup.findUniqueOrThrow({ - where: { id: created.skillGroupId } + where: { id: created.id }, + include: { skillEntity: true } }); expect(created.name).toBe('Draft Skill'); - expect(created.skillGroupId).toBe(createdSkillGroupRecord.id); + expect(created.description).toBe('Initial description'); expect(created.integrations).toEqual([]); expect(created.providers).toEqual([]); - expect(createdSkillGroupRecord.ownerSkillOid).toBe(createdSkillRecord.oid); - expect(createdSkillGroupRecord.slug).toBe(created.slug); - expect(createdSkillGroupRecord.name).toBe(created.name); - expect(createdSkillGroupRecord.description).toBe(created.description); + expect(created.hierarchy.type).toBe('root'); + expect(createdSkillRecord.skillEntity.ownerSkillOid).toBe(createdSkillRecord.oid); let updated = await client.skill.update({ tenantId: tenant.id, @@ -229,13 +224,12 @@ describe('skill.e2e', () => { expect(updated.name).toBe('Updated Skill'); expect(updated.description).toBe('Updated description'); - let updatedSkillGroupRecord = await testDb.skillGroup.findUniqueOrThrow({ - where: { id: created.skillGroupId } + let updatedSkillEntity = await testDb.skillEntity.findUniqueOrThrow({ + where: { oid: createdSkillRecord.skillEntityOid } }); - expect(updatedSkillGroupRecord.slug).toBe(updated.slug); - expect(updatedSkillGroupRecord.name).toBe(updated.name); - expect(updatedSkillGroupRecord.description).toBe(updated.description); + expect(updatedSkillEntity.name).toBe('Updated Skill'); + expect(updatedSkillEntity.description).toBe('Updated description'); let archived = await client.skill.delete({ tenantId: tenant.id, @@ -310,9 +304,14 @@ describe('skill.e2e', () => { expect(skillIntegrationRecord.status).toBe('active'); }); - it('passes the owner skill group through fork chains', async () => { - let { client, tenant, tenantRecord, environmentRecord, solutionRecord } = - await createTenantContext(); + it('passes the owner skill entity through fork chains', async () => { + let { client, tenant, environmentRecord } = await createTenantContext(); + let actor = await client.actor.upsert({ + tenantId: tenant.id, + name: 'Skill Fork Actor', + identifier: 'test-skill-fork-actor', + type: 'external' + }); let original = await client.skill.create({ tenantId: tenant.id, @@ -324,45 +323,43 @@ describe('skill.e2e', () => { tenantId: tenant.id, environmentId: environmentRecord.id, skillId: original.id, + actorId: actor.id, name: 'Forked Skill' }); let transientFork = await client.skill.fork({ tenantId: tenant.id, environmentId: environmentRecord.id, skillId: fork.id, + actorId: actor.id, name: 'Transient Fork' }); expect(fork.name).toBe('Forked Skill'); - expect(fork.forkedFromId).toBe(original.id); - expect(fork.skillGroupId).toBe(original.skillGroupId); - expect(transientFork.forkedFromId).toBe(fork.id); - expect(transientFork.skillGroupId).toBe(original.skillGroupId); + expect(fork.hierarchy.type).toBe('fork'); + expect(fork.hierarchy.parentSkillId).toBe(original.id); + expect(fork.hierarchy.entity.id).toBe(original.hierarchy.entity.id); + expect(transientFork.hierarchy.parentSkillId).toBe(fork.id); + expect(transientFork.hierarchy.entity.id).toBe(original.hierarchy.entity.id); - let [originalRecord, forkRecord, transientForkRecord, skillGroupRecord] = await Promise.all([ + let [originalRecord, forkRecord, transientForkRecord] = await Promise.all([ testDb.skill.findUniqueOrThrow({ - where: { id: original.id } + where: { id: original.id }, + include: { skillEntity: true } }), testDb.skill.findUniqueOrThrow({ where: { id: fork.id }, - include: { forkedFrom: true } + include: { fork: { include: { parentSkill: true } }, skillEntity: true } }), testDb.skill.findUniqueOrThrow({ where: { id: transientFork.id }, - include: { forkedFrom: true } - }), - testDb.skillGroup.findUniqueOrThrow({ - where: { id: original.skillGroupId } + include: { fork: { include: { parentSkill: true } }, skillEntity: true } }) ]); - expect(skillGroupRecord.ownerSkillOid).toBe(originalRecord.oid); - expect(forkRecord.skillGroupOid).toBe(originalRecord.skillGroupOid); - expect(transientForkRecord.skillGroupOid).toBe(originalRecord.skillGroupOid); - expect(forkRecord.parentSkillOid).toBeTruthy(); - expect(forkRecord.forkedFrom?.parentSkillOid).toBeTruthy(); - expect(transientForkRecord.parentSkillOid).toBeTruthy(); - expect(transientForkRecord.forkedFrom?.parentSkillOid).toBeTruthy(); + expect(originalRecord.skillEntityOid).toBe(forkRecord.skillEntityOid); + expect(originalRecord.skillEntityOid).toBe(transientForkRecord.skillEntityOid); + expect(forkRecord.fork?.parentSkill.id).toBe(original.id); + expect(transientForkRecord.fork?.parentSkill.id).toBe(fork.id); let updatedOriginal = await client.skill.update({ tenantId: tenant.id, @@ -371,13 +368,12 @@ describe('skill.e2e', () => { name: 'Updated Original Skill', description: 'Updated original description' }); - let updatedSkillGroupRecord = await testDb.skillGroup.findUniqueOrThrow({ - where: { id: original.skillGroupId } + let updatedSkillEntity = await testDb.skillEntity.findUniqueOrThrow({ + where: { id: original.hierarchy.entity.id } }); - expect(updatedSkillGroupRecord.slug).toBe(updatedOriginal.slug); - expect(updatedSkillGroupRecord.name).toBe(updatedOriginal.name); - expect(updatedSkillGroupRecord.description).toBe(updatedOriginal.description); + expect(updatedSkillEntity.name).toBe(updatedOriginal.name); + expect(updatedSkillEntity.description).toBe(updatedOriginal.description); }); it('reconciles provider links and indexes integrations/providers into the skill document', async () => { diff --git a/src/systems/subspace/apps/controller/src/test/setup.ts b/src/systems/subspace/apps/controller/src/test/setup.ts index cc98c6648..9debea3c1 100644 --- a/src/systems/subspace/apps/controller/src/test/setup.ts +++ b/src/systems/subspace/apps/controller/src/test/setup.ts @@ -2,6 +2,8 @@ import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '@metorial-subspace/db'; import { sessionMessageBucketRecord } from '@metorial-subspace/connection-utils'; +import { resetProviderTypeCache } from '@metorial-subspace/provider-utils'; +import { ensurePlainTemplate } from '@metorial-subspace/module-skills/src/definitions/plain'; import { afterAll } from 'vitest'; import { setupVoyagerStub, resetVoyagerStub } from './helpers/voyagerStub'; @@ -33,6 +35,8 @@ await ensureSessionMessageBucket(); export let testDb = db.client; export let cleanDatabase = async () => { await db.clean(); + resetProviderTypeCache(); resetVoyagerStub(); await ensureSessionMessageBucket(); + await ensurePlainTemplate(); }; diff --git a/src/systems/subspace/apps/controller/vitest.config.ts b/src/systems/subspace/apps/controller/vitest.config.ts index 4c3899b0f..5e3729c21 100644 --- a/src/systems/subspace/apps/controller/vitest.config.ts +++ b/src/systems/subspace/apps/controller/vitest.config.ts @@ -7,6 +7,7 @@ export default defineConfig(({ mode }: any): any => { return createVitestConfig({ test: { pool: 'forks', + ...(mode === 'ci' ? { fileParallelism: false } : {}), setupFiles: ['./src/test/setup.ts'], env: { ...env, diff --git a/src/systems/subspace/init-test-db.sh b/src/systems/subspace/init-test-db.sh index de7025c86..7534d06af 100755 --- a/src/systems/subspace/init-test-db.sh +++ b/src/systems/subspace/init-test-db.sh @@ -2,7 +2,7 @@ set -e # Create databases for CI/local-compose services if they don't exist -dbs="subspace subspace-test slates-hub slates-registry forge function-bay signal voyager voyager-search shuttle" +dbs="subspace subspace-test slates-hub slates-registry forge function-bay signal voyager voyager-search shuttle cargo-test cargo origin" for db in $dbs; do exists=$(psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ -tAc "SELECT 1 FROM pg_database WHERE datname='${db}'") diff --git a/src/systems/subspace/modules/provider-internal/src/lib/toolFilter.test.ts b/src/systems/subspace/modules/provider-internal/src/lib/toolFilter.test.ts index ce41dd243..bc5c57fe5 100644 --- a/src/systems/subspace/modules/provider-internal/src/lib/toolFilter.test.ts +++ b/src/systems/subspace/modules/provider-internal/src/lib/toolFilter.test.ts @@ -1,5 +1,9 @@ import { describe, expect, it } from 'vitest'; -import { buildIntegrationProviderToolFilterChain, checkToolAccess } from './toolFilter'; +import { + buildIntegrationProviderToolFilterChain, + checkToolAccess, + resolveSessionProviderToolFilterChain +} from './toolFilter'; let createTool = (key: string) => ({ @@ -201,3 +205,91 @@ describe('buildIntegrationProviderToolFilterChain', () => { }); }); }); + +let createMcpTool = (d: { key: string; mcpToolType: Record }) => + ({ + id: `ptl_${d.key}`, + key: `${d.key}_67228`, + callableId: d.key, + value: { + key: d.key, + mcpToolType: d.mcpToolType + } + }) as any; + +describe('resolveSessionProviderToolFilterChain', () => { + it('lets session filters with ignoreParentFilters replace deployment filters', () => { + let echoTool = createTool('echo'); + let addTool = createTool('add'); + let provider = { + config: { toolFilter: { type: 'v1.allow_all' } }, + authConfig: null, + deployment: { + toolFilter: { + type: 'v1.filter', + filters: [{ type: 'tool_keys', keys: ['add'] }] + } + }, + toolFilter: { + type: 'v1.filter', + ignoreParentFilters: true, + filters: [{ type: 'tool_keys', keys: ['echo'] }] + } + } as any; + + expect(checkToolAccess(echoTool, provider, 'list')).toEqual({ allowed: true }); + expect(checkToolAccess(addTool, provider, 'list')).toEqual({ allowed: false }); + }); + + it('matches resource_regex filters against resource template uri templates', () => { + let userTemplate = createMcpTool({ + key: 'user_template', + mcpToolType: { + type: 'mcp.resource_template', + uriTemplate: 'test://user/{id}' + } + }); + let logTemplate = createMcpTool({ + key: 'log_template', + mcpToolType: { + type: 'mcp.resource_template', + uriTemplate: 'test://log/{date}' + } + }); + let provider = { + config: { toolFilter: { type: 'v1.allow_all' } }, + authConfig: null, + deployment: { toolFilter: { type: 'v1.allow_all' } }, + toolFilter: { + type: 'v1.filter', + filters: [{ type: 'resource_regex', pattern: '^test://user/[^/]+$' }] + } + } as any; + + expect(checkToolAccess(userTemplate, provider, 'list')).toEqual({ allowed: true }); + expect(checkToolAccess(logTemplate, provider, 'list')).toEqual({ allowed: false }); + }); + + it('matches prompt_keys filters against prompt tools', () => { + let summarizePrompt = createMcpTool({ + key: 'summarize', + mcpToolType: { type: 'mcp.prompt', key: 'summarize' } + }); + let codeReviewPrompt = createMcpTool({ + key: 'code_review', + mcpToolType: { type: 'mcp.prompt', key: 'code_review' } + }); + let chain = resolveSessionProviderToolFilterChain({ + config: { toolFilter: { type: 'v1.allow_all' } }, + authConfig: null, + deployment: { toolFilter: { type: 'v1.allow_all' } }, + toolFilter: { + type: 'v1.filter', + filters: [{ type: 'prompt_keys', keys: ['summarize'] }] + } + }); + + expect(checkToolAccess(summarizePrompt, chain, 'list')).toEqual({ allowed: true }); + expect(checkToolAccess(codeReviewPrompt, chain, 'list')).toEqual({ allowed: false }); + }); +}); diff --git a/src/systems/subspace/modules/provider-internal/src/lib/toolFilter.ts b/src/systems/subspace/modules/provider-internal/src/lib/toolFilter.ts index 664e044f7..5dd93c7b8 100644 --- a/src/systems/subspace/modules/provider-internal/src/lib/toolFilter.ts +++ b/src/systems/subspace/modules/provider-internal/src/lib/toolFilter.ts @@ -183,40 +183,13 @@ export let resolveToolFilterChain = (d: { providerAuthConfigToolFilter?: ToolFilter | null; providerDeploymentToolFilter?: ToolFilter | null; sessionProviderToolFilter?: ToolFilterChain | null; -}) => { - let providerConfigToolFilter = normalizeToolFilters(d.providerConfigToolFilter); - let providerAuthConfigToolFilter = normalizeToolFilters(d.providerAuthConfigToolFilter); - let providerDeploymentToolFilter = normalizeToolFilters(d.providerDeploymentToolFilter); - let sessionProviderToolFilterChain = normalizeToolFilterChain(d.sessionProviderToolFilter); - - if (providerDeploymentToolFilter.ignoreParentFilters) { - return [providerDeploymentToolFilter, ...sessionProviderToolFilterChain]; - } - - if (providerAuthConfigToolFilter.ignoreParentFilters) { - return [ - providerAuthConfigToolFilter, - providerDeploymentToolFilter, - ...sessionProviderToolFilterChain - ]; - } - - if (providerConfigToolFilter.ignoreParentFilters) { - return [ - providerConfigToolFilter, - providerAuthConfigToolFilter, - providerDeploymentToolFilter, - ...sessionProviderToolFilterChain - ]; - } - - return [ - providerConfigToolFilter, - providerAuthConfigToolFilter, - providerDeploymentToolFilter, - ...sessionProviderToolFilterChain - ]; -}; +}) => + resolveStackedToolFilterChain([ + d.providerConfigToolFilter, + d.providerAuthConfigToolFilter, + d.providerDeploymentToolFilter, + d.sessionProviderToolFilter + ]); export let resolveSessionProviderToolFilterChain = (provider: ToolFilterCarrier) => resolveToolFilterChain({ diff --git a/src/systems/subspace/modules/skills/src/definitions/plain.ts b/src/systems/subspace/modules/skills/src/definitions/plain.ts index 8fe1658c3..a4323302d 100644 --- a/src/systems/subspace/modules/skills/src/definitions/plain.ts +++ b/src/systems/subspace/modules/skills/src/definitions/plain.ts @@ -97,3 +97,11 @@ export let plainTemplate = template({ description: 'A plain skill template with no items.', items: plainSkillTemplateItems }); + +export let ensurePlainTemplate = () => + template({ + identifier: 'plain', + name: 'Plain', + description: 'A plain skill template with no items.', + items: plainSkillTemplateItems + }); diff --git a/src/systems/subspace/modules/skills/src/index.ts b/src/systems/subspace/modules/skills/src/index.ts index fe282f27d..c478e0656 100644 --- a/src/systems/subspace/modules/skills/src/index.ts +++ b/src/systems/subspace/modules/skills/src/index.ts @@ -1,3 +1,6 @@ export * from './services'; +export { indexSkillRecord } from './queues/search/skill'; +export { reconcileSkillProviderLinks } from './queues/reconciler/reconcileSkillProviderLink'; + import './definitions'; diff --git a/src/systems/subspace/modules/skills/src/lib/template.ts b/src/systems/subspace/modules/skills/src/lib/template.ts index 1b3276dc2..18e6793fc 100644 --- a/src/systems/subspace/modules/skills/src/lib/template.ts +++ b/src/systems/subspace/modules/skills/src/lib/template.ts @@ -22,7 +22,7 @@ export let template = async (d: { } )[]; }) => { - let newId = getId('skillTemplate'); + let createIds = getId('skillTemplate'); let existing = await db.skillTemplate.findUnique({ where: { systemIdentifier: d.identifier }, select: { id: true } @@ -30,7 +30,7 @@ export let template = async (d: { let cargoTemplate = await cargo.skillTemplate.upsert({ systemIdentifier: d.identifier, - skillTemplateId: newId.id, + skillTemplateId: existing?.id ?? createIds.id, name: d.name, items: d.items }); @@ -48,7 +48,8 @@ export let template = async (d: { let skillTemplate = await db.skillTemplate.upsert({ where: { systemIdentifier: d.identifier }, create: { - ...newId, + ...createIds, + id: cargoTemplate.id, ...inner }, update: inner diff --git a/src/systems/subspace/modules/skills/src/services/skill.ts b/src/systems/subspace/modules/skills/src/services/skill.ts index 9c1e94c9a..ab470a2a3 100644 --- a/src/systems/subspace/modules/skills/src/services/skill.ts +++ b/src/systems/subspace/modules/skills/src/services/skill.ts @@ -29,7 +29,7 @@ import { import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { checkTenant } from '@metorial-subspace/module-tenant'; import { cargo, ensureCargoActor, ensureCargoScope } from '../cargo'; -import { plainTemplate } from '../definitions'; +import { ensurePlainTemplate } from '../definitions'; import { inferClientName, normalizeSkillClientFields } from '../lib/clientMetadata'; import { skillArchivedQueue, @@ -418,7 +418,7 @@ class skillServiceImpl { }) : parentSkill ? null - : await plainTemplate; + : await ensurePlainTemplate(); let skillData = this.skillCreateData({ tenant: d.tenant, diff --git a/src/systems/subspace/provider-backends/provider-utils/src/providerTypes.ts b/src/systems/subspace/provider-backends/provider-utils/src/providerTypes.ts index 7d97a459a..93e4393ab 100644 --- a/src/systems/subspace/provider-backends/provider-utils/src/providerTypes.ts +++ b/src/systems/subspace/provider-backends/provider-utils/src/providerTypes.ts @@ -5,6 +5,10 @@ import { db, get4ByteIntId, ID, type ProviderType } from '@metorial-subspace/db' let cachedProviderTypes: Record = {}; +export let resetProviderTypeCache = () => { + cachedProviderTypes = {}; +}; + export let ensureProviderType = async ( name: string, attributes: PrismaJson.ProviderTypeAttributes diff --git a/src/tooling/control/mocks/Dockerfile b/src/tooling/control/mocks/Dockerfile new file mode 100644 index 000000000..a92557b01 --- /dev/null +++ b/src/tooling/control/mocks/Dockerfile @@ -0,0 +1,7 @@ +FROM oven/bun:1 +WORKDIR /mock +ARG MOCK_SERVER=object-store/server.ts +COPY ${MOCK_SERVER} ./server.ts +ENV PORT=52010 +EXPOSE 52010 +CMD ["bun", "./server.ts"] diff --git a/src/tooling/control/mocks/object-store/server.ts b/src/tooling/control/mocks/object-store/server.ts new file mode 100644 index 000000000..fbf824b10 --- /dev/null +++ b/src/tooling/control/mocks/object-store/server.ts @@ -0,0 +1,52 @@ +let store = new Map(); + +let port = Number(process.env.PORT || 52010); + +let server = Bun.serve({ + port, + hostname: '0.0.0.0', + async fetch(req) { + let url = new URL(req.url); + let path = url.pathname; + + if (path === '/health' || path === '/ping') { + return new Response('ok', { status: 200 }); + } + + if (req.method === 'PUT' || req.method === 'POST') { + let body = new Uint8Array(await req.arrayBuffer()); + store.set(path, { body, contentType: req.headers.get('content-type') ?? undefined }); + return new Response(null, { status: 200 }); + } + + if (req.method === 'HEAD') { + let entry = store.get(path); + if (!entry) return new Response(null, { status: 404 }); + return new Response(null, { + status: 200, + headers: { + 'content-length': String(entry.body.byteLength), + ...(entry.contentType ? { 'content-type': entry.contentType } : {}) + } + }); + } + + if (req.method === 'GET') { + let entry = store.get(path); + if (!entry) return new Response(null, { status: 404 }); + return new Response(entry.body, { + status: 200, + headers: entry.contentType ? { 'content-type': entry.contentType } : undefined + }); + } + + if (req.method === 'DELETE') { + store.delete(path); + return new Response(null, { status: 204 }); + } + + return new Response('noop object-store mock', { status: 200 }); + } +}); + +console.log(`object-store mock listening on ${server.hostname}:${server.port}`); diff --git a/src/tooling/control/mocks/relay/server.ts b/src/tooling/control/mocks/relay/server.ts new file mode 100644 index 000000000..16b7c9e7f --- /dev/null +++ b/src/tooling/control/mocks/relay/server.ts @@ -0,0 +1,51 @@ +type RpcCall = { id: string; name: string; payload: any }; + +let counter = 0; +let port = Number(process.env.PORT || 52110); + +let noop = (payload: any = {}) => ({ + id: `relay_${++counter}`, + ...payload, + success: true +}); + +let handlers: Record any> = { + 'sender:upsert': noop, + 'emailIdentity:upsert': noop, + 'email:send': () => ({ success: true }), + 'email:get': () => ({ status: 'sent' }) +}; + +let server = Bun.serve({ + port, + hostname: '0.0.0.0', + async fetch(req) { + let url = new URL(req.url); + if (req.method === 'GET' && (url.pathname === '/ping' || url.pathname.endsWith('/ping'))) { + return new Response('ok', { status: 200 }); + } + + if (req.method !== 'POST') { + return new Response('Method Not Allowed', { status: 405 }); + } + + let text = await req.text(); + let body = text ? JSON.parse(text) : {}; + let calls: RpcCall[] = body.calls ?? []; + + let results = calls.map(call => { + let handler = handlers[call.name] ?? noop; + return { + __typename: 'rpc.response.call', + id: call.id, + name: call.name, + status: 200, + result: handler(call.payload) + }; + }); + + return Response.json({ __typename: 'rpc.response', calls: results }); + } +}); + +console.log(`relay mock listening on ${server.hostname}:${server.port}`); diff --git a/src/tooling/control/mocks/voyager/server.ts b/src/tooling/control/mocks/voyager/server.ts new file mode 100644 index 000000000..9daca983f --- /dev/null +++ b/src/tooling/control/mocks/voyager/server.ts @@ -0,0 +1,77 @@ +type RpcCall = { id: string; name: string; payload: any }; + +let counter = 0; +let port = Number(process.env.PORT || 52060); + +let handlers: Record any> = { + 'source:upsert': p => ({ + object: 'voyager.source', + id: `src_${++counter}`, + identifier: p?.identifier ?? 'default', + name: p?.name ?? 'Default' + }), + 'index:upsert': p => ({ + object: 'voyager.index', + id: `idx_${++counter}`, + identifier: p?.identifier ?? 'default', + name: p?.name ?? 'Default', + sourceId: p?.sourceId ?? 'src_1' + }), + 'record:search': () => [], + 'record:index': p => ({ + object: 'voyager.record', + id: `rec_${++counter}`, + documentId: p?.documentId ?? 'doc', + fields: p?.fields ?? {}, + body: p?.body ?? {}, + metadata: p?.metadata ?? {}, + hash: 'stub', + isTenantSpecific: Array.isArray(p?.tenantIds) && p.tenantIds.length > 0, + createdAt: new Date().toISOString() + }), + 'record:delete': () => ({ success: true }) +}; + +let server = Bun.serve({ + port, + hostname: '0.0.0.0', + async fetch(req) { + let url = new URL(req.url); + if (req.method === 'GET' && (url.pathname === '/' || url.pathname === '/ping')) { + return new Response('ok', { status: 200 }); + } + + if (req.method !== 'POST') { + return new Response('Method Not Allowed', { status: 405 }); + } + + let text = await req.text(); + let body = text ? JSON.parse(text) : {}; + let calls: RpcCall[] = body.calls ?? []; + + let results = calls.map(call => { + let handler = handlers[call.name]; + if (!handler) { + return { + __typename: 'rpc.response.call', + id: call.id, + name: call.name, + status: 501, + result: { error: `unsupported RPC ${call.name}` } + }; + } + + return { + __typename: 'rpc.response.call', + id: call.id, + name: call.name, + status: 200, + result: handler(call.payload) + }; + }); + + return Response.json({ __typename: 'rpc.response', calls: results }); + } +}); + +console.log(`voyager mock listening on ${server.hostname}:${server.port}`); diff --git a/src/tooling/control/package.json b/src/tooling/control/package.json new file mode 100644 index 000000000..577693d63 --- /dev/null +++ b/src/tooling/control/package.json @@ -0,0 +1,22 @@ +{ + "name": "@metorial/control", + "version": "0.1.0", + "private": true, + "type": "module", + "bin": { + "control": "./src/cli.ts" + }, + "scripts": { + "start": "bun ./src/cli.ts", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "sade": "^1.8.1", + "smol-toml": "^1.3.1", + "yaml": "^2.8.2" + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "5.8.2" + } +} diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts new file mode 100755 index 000000000..678c699fd --- /dev/null +++ b/src/tooling/control/src/cli.ts @@ -0,0 +1,240 @@ +#!/usr/bin/env bun +import sade from 'sade'; +import { buildGlobalGraph } from './graph/planner'; +import { + formatGlobalGraphJson, + formatGlobalGraphTree, + formatServicesJson, + formatServicesTable +} from './graph/format'; +import { resolveGraph } from './graph/resolver'; +import { generateCompose } from './compose/generator'; +import { getRegistry, resolveService, resolveTargets } from './registry'; +import { planExecutionOrder } from './graph/planner'; +import { runControlTargets } from './run/runner'; +import { formatControlError, InvalidFlagsError } from './errors'; +import { createLogger, isVerbose } from './log'; +import { formatRunPlan } from './log/formatRunPlan'; +import { resolveControlCwd } from './entrypoint'; + +let collectFilters = (argv: string[]): string[] => { + let filters: string[] = []; + for (let i = 0; i < argv.length; i++) { + if (argv[i] === '--filter' || argv[i] === '-f') { + let val = argv[i + 1]; + if (val && !val.startsWith('-')) { + filters.push(val); + i++; + } + } + } + return filters; +}; + +let runCommand = async (fn: () => Promise, opts?: { verbose?: boolean }) => { + try { + await fn(); + } catch (err) { + let logger = createLogger(opts); + logger.error(formatControlError(err, { verbose: isVerbose(opts) })); + process.exit(1); + } +}; + +let prog = sade('control'); + +prog + .command('ls') + .describe('List all control-managed services') + .option('--entrypoint, -e', 'Workspace entrypoint') + .option('--json', 'Output as JSON') + .option('--filter, -f', 'Filter by service name') + .action(async (opts: { entrypoint?: string; json?: boolean; filter?: string }) => { + await runCommand(async () => { + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let filters = collectFilters(process.argv); + let services = filters.length + ? filters.map(name => resolveService(registry, name)) + : registry.services; + + if (opts.json) { + console.log(formatServicesJson(registry, services)); + } else { + console.log(formatServicesTable(registry, services)); + } + }); + }); + +prog + .command('graph [target]') + .describe('View dependency graph (global or per-service)') + .option('--entrypoint, -e', 'Workspace entrypoint') + .option('--json', 'Output as JSON') + .option('--format', 'Output format: tree or json (global graph only)') + .action(async (target: string | undefined, opts: { entrypoint?: string; json?: boolean; format?: string }) => { + await runCommand(async () => { + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + + if (!target) { + let graph = buildGlobalGraph(registry); + if (opts.json || opts.format === 'json') { + console.log(formatGlobalGraphJson(graph)); + } else { + console.log(formatGlobalGraphTree(registry)); + } + return; + } + + let service = resolveService(registry, target); + let graph = resolveGraph({ + entrypoint: registry.controlRoot, + targetDir: service.dir, + registry + }); + console.log(JSON.stringify(graph, null, 2)); + }); + }); + +prog + .command('plan [target]') + .describe('Show test execution order for selected services') + .option('--entrypoint, -e', 'Workspace entrypoint') + .option('--all', 'Plan all services with tests for the given mode') + .option('--mode, -m', 'Test mode: e2e or unit', 'e2e') + .option('--filter, -f', 'Filter by service name') + .action(async (target: string | undefined, opts: { entrypoint?: string; all?: boolean; mode?: string; filter?: string }) => { + await runCommand(async () => { + if (opts.mode && opts.mode !== 'e2e' && opts.mode !== 'unit') { + throw new InvalidFlagsError('Mode must be e2e or unit'); + } + let mode = (opts.mode === 'unit' ? 'unit' : 'e2e') as 'e2e' | 'unit'; + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let filters = collectFilters(process.argv); + + let services = resolveTargets({ + registry, + cwd: resolveControlCwd(), + target, + all: opts.all, + filters: filters.length ? filters : undefined, + mode + }); + + let ordered = planExecutionOrder(services, registry); + console.log( + formatRunPlan({ + mode, + controlRoot: registry.controlRoot, + services: ordered, + title: 'Control test plan' + }) + ); + }); + }); + +prog + .command('compose print ') + .describe('Print generated docker compose') + .option('--entrypoint, -e', 'Workspace entrypoint') + .action(async (target: string, opts: { entrypoint?: string }) => { + await runCommand(async () => { + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let service = resolveService(registry, target); + let graph = resolveGraph({ entrypoint: registry.controlRoot, targetDir: service.dir, registry }); + console.log(generateCompose(graph, `control-${graph.name}`)); + }); + }); + +let addRunCommand = (mode: 'e2e' | 'unit', name: string) => { + prog + .command(`${name} [target]`) + .describe(`Run ${mode} tests for a service`) + .option('--entrypoint, -e', 'Workspace entrypoint') + .option('--project-prefix, -p', 'Docker compose project prefix') + .option('--all', 'Run all services with this test mode') + .option('--filter, -f', 'Run tests for named services') + .option('--keep', 'Keep containers running after test') + .option('--verbose, -v', 'Verbose output') + .action(async (target: string | undefined, opts: { + entrypoint?: string; + 'project-prefix'?: string; + all?: boolean; + keep?: boolean; + verbose?: boolean; + filter?: string; + }) => { + await runCommand(async () => { + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let filters = collectFilters(process.argv); + + let services = resolveTargets({ + registry, + cwd: resolveControlCwd(), + target, + all: opts.all, + filters: filters.length ? filters : undefined, + mode + }); + + let ordered = planExecutionOrder(services, registry); + + await runControlTargets({ + mode, + entrypoint: opts.entrypoint, + projectPrefix: opts['project-prefix'], + keep: opts.keep, + verbose: opts.verbose, + services: ordered + }); + }, { verbose: opts.verbose }); + }); +}; + +addRunCommand('e2e', 'e2e'); +addRunCommand('unit', 'unit'); + +prog + .command('ci [target]') + .describe('CI entrypoint (e2e or unit)') + .option('--entrypoint, -e', 'Workspace entrypoint') + .option('--project-prefix, -p', 'Docker compose project prefix') + .option('--all', 'Run all services with this test mode') + .option('--filter, -f', 'Run tests for named services') + .action(async (mode: string, target: string | undefined, opts: { + entrypoint?: string; + 'project-prefix'?: string; + all?: boolean; + filter?: string; + }) => { + let verbose = !!process.env.CONTROL_VERBOSE; + await runCommand(async () => { + if (mode !== 'e2e' && mode !== 'unit') { + throw new InvalidFlagsError('Mode must be e2e or unit'); + } + + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let filters = collectFilters(process.argv); + + let services = resolveTargets({ + registry, + cwd: resolveControlCwd(), + target, + all: opts.all, + filters: filters.length ? filters : undefined, + mode: mode as 'e2e' | 'unit' + }); + + let ordered = planExecutionOrder(services, registry); + + await runControlTargets({ + mode: mode as 'e2e' | 'unit', + entrypoint: opts.entrypoint, + projectPrefix: opts['project-prefix'], + ci: true, + verbose, + services: ordered + }); + }, { verbose }); + }); + +prog.parse(process.argv); diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts new file mode 100644 index 000000000..6006a50d0 --- /dev/null +++ b/src/tooling/control/src/compose/generator.ts @@ -0,0 +1,372 @@ +import { join, resolve } from 'path'; +import { stringify } from 'yaml'; +import type { ResolvedDep, ResolvedGraph } from '../types'; +import { MOCK_DEFINITIONS } from '../types'; +import { controlToolingDir } from '../entrypoint'; +import { interpolateEnv, mergeEnv } from '../graph/env'; + +let networkConfig = (alias: string) => ({ + 'control-network': { + aliases: [alias] + } +}); + +let resolveBuild = (graph: ResolvedGraph) => { + let svc = graph.config.service!; + let dockerfile = svc.dockerfile ?? 'dev.Dockerfile'; + + if (svc.build_context === 'oss') { + return { + context: graph.ossRoot, + dockerfile: dockerfile.startsWith('./') ? dockerfile : `./${dockerfile.replace(/^\.\//, '')}` + }; + } + + let context = resolve(graph.dir, svc.build_context ?? '.'); + return { context, dockerfile: svc.dockerfile ?? 'dev.Dockerfile' }; +}; + +let defaultServiceHealth = (port: number, path = '/') => ({ + test: [ + 'CMD-SHELL', + `bun -e "fetch('http://localhost:${port}${path}').then(()=>process.exit(0)).catch(()=>process.exit(1))"` + ], + interval: '5s', + timeout: '5s', + retries: 20 +}); + +let resolveServiceHealth = (graph: ResolvedGraph) => { + let svc = graph.config.service; + if (!svc?.port) return undefined; + if (svc.health?.cmd) { + return { test: ['CMD-SHELL', svc.health.cmd], interval: '5s', timeout: '5s', retries: 20 }; + } + return defaultServiceHealth(svc.port, svc.health?.path ?? '/'); +}; + +let resolveControlServiceEnv = (dep: ResolvedDep, graph: ResolvedGraph): Record => { + if (!dep.children) return {}; + + let childEnv = interpolateEnv(dep.children.config.env ?? {}, graph.depHosts); + let depEnv = dep.config.env ? interpolateEnv(dep.config.env, graph.depHosts) : {}; + return mergeEnv(childEnv, depEnv); +}; + +let depHasHealth = (dep: ResolvedDep) => { + if (dep.config.preset === 'nats') return false; + if (dep.kind === 'mock' || dep.kind === 'preset') return true; + if (dep.kind === 'control') return true; + if (dep.kind === 'inline') { + let inline = typeof dep.config.inline === 'object' ? dep.config.inline : undefined; + return !!(inline?.health?.cmd || inline?.port); + } + return true; +}; + +let resolveControlDependsOn = ( + dep: ResolvedDep, + graph: ResolvedGraph +): Record => { + if (!dep.children) return {}; + + let dependsOn: Record = {}; + for (let childDep of dep.children.deps ?? []) { + let parentDep = graph.deps.find(d => d.name === childDep.name); + if (!parentDep) continue; + + dependsOn[parentDep.composeName] = { + condition: depHasHealth(parentDep) ? 'service_healthy' : 'service_started' + }; + } + + return dependsOn; +}; + +let buildControlService = (dep: ResolvedDep, graph: ResolvedGraph, containerName: string) => { + if (!dep.children) throw new Error(`Control dependency "${dep.name}" is missing resolved child graph`); + + let child = dep.children; + let build = resolveBuild(child); + let health = resolveServiceHealth(child); + let dependsOn = resolveControlDependsOn(dep, graph); + + return { + build, + container_name: containerName, + restart: 'unless-stopped', + environment: resolveControlServiceEnv(dep, graph), + depends_on: Object.keys(dependsOn).length > 0 ? dependsOn : undefined, + healthcheck: health, + networks: networkConfig(dep.alias) + }; +}; + +let presetPostgres = (dep: ResolvedDep, containerName: string) => { + let env = dep.config.env ?? { + POSTGRES_USER: 'postgres', + POSTGRES_PASSWORD: 'postgres', + POSTGRES_DB: 'postgres' + }; + let user = env.POSTGRES_USER ?? 'postgres'; + + let volumes: Record = { + [`${dep.composeName}-data`]: {} + }; + + let serviceVolumes = [`${dep.composeName}-data:/var/lib/postgresql/data`]; + if (dep.config.init) { + serviceVolumes.push( + `${resolve(dep.sourceDir, dep.config.init)}:/docker-entrypoint-initdb.d/init-test-db.sh:ro` + ); + } + + return { + volumes, + service: { + image: dep.config.image ?? 'postgres:16-alpine', + container_name: containerName, + restart: 'unless-stopped', + environment: env, + volumes: serviceVolumes, + healthcheck: { + test: ['CMD-SHELL', `pg_isready -U ${user}`], + interval: '5s', + timeout: '5s', + retries: 10 + }, + networks: networkConfig(dep.alias) + }, + hasHealth: true + }; +}; + +let presetRedis = (dep: ResolvedDep, containerName: string) => ({ + volumes: {}, + service: { + image: dep.config.image ?? 'redis:7-alpine', + container_name: containerName, + restart: 'unless-stopped', + healthcheck: { + test: ['CMD', 'redis-cli', 'ping'], + interval: '5s', + timeout: '5s', + retries: 10 + }, + networks: networkConfig(dep.alias) + }, + hasHealth: true +}); + +let presetNats = (dep: ResolvedDep, containerName: string) => ({ + volumes: {}, + service: { + image: dep.config.image ?? 'nats:2-alpine', + container_name: containerName, + restart: 'unless-stopped', + command: '--cluster_name NATS --cluster nats://0.0.0.0:6222 --http_port 8222', + networks: networkConfig(dep.alias) + }, + hasHealth: false +}); + +let mockService = (dep: ResolvedDep, containerName: string) => { + let mock = MOCK_DEFINITIONS[dep.config.mock!]; + if (!mock) throw new Error(`Unknown mock "${dep.config.mock}"`); + + return { + volumes: {}, + service: { + build: { + context: join(controlToolingDir, 'mocks'), + dockerfile: 'Dockerfile', + args: { MOCK_SERVER: mock.serverPath } + }, + container_name: containerName, + restart: 'unless-stopped', + environment: { PORT: String(mock.port) }, + healthcheck: { + test: ['CMD-SHELL', mock.healthCmd], + interval: '5s', + timeout: '5s', + retries: 10 + }, + networks: networkConfig(dep.alias) + }, + hasHealth: true + }; +}; + +let inlineService = (dep: ResolvedDep, graph: ResolvedGraph, containerName: string) => { + let inline = typeof dep.config.inline === 'object' ? dep.config.inline : undefined; + if (!inline) throw new Error(`Inline dependency ${dep.name} is missing [deps.inline] config`); + + let build = inline.build + ? { + context: inline.build.context === 'oss' ? graph.ossRoot : resolve(dep.sourceDir, inline.build.context), + dockerfile: inline.build.dockerfile + } + : undefined; + + let health = inline.health?.cmd + ? { test: ['CMD-SHELL', inline.health.cmd], interval: '5s', timeout: '5s', retries: 10 } + : inline.port + ? defaultServiceHealth(inline.port, inline.health?.path ?? '/health') + : undefined; + + return { + volumes: {}, + service: { + ...(inline.image ? { image: inline.image } : {}), + ...(build ? { build } : {}), + container_name: containerName, + restart: 'unless-stopped', + ...(dep.config.env + ? { environment: interpolateEnv(dep.config.env, graph.depHosts) } + : {}), + command: inline.command, + healthcheck: health, + networks: networkConfig(dep.alias) + }, + hasHealth: !!health + }; +}; + +let buildLeafDep = (dep: ResolvedDep, graph: ResolvedGraph, containerName: string) => { + if (dep.kind === 'preset') { + if (dep.config.preset === 'postgres') return presetPostgres(dep, containerName); + if (dep.config.preset === 'redis') return presetRedis(dep, containerName); + if (dep.config.preset === 'nats') return presetNats(dep, containerName); + } + if (dep.kind === 'mock') return mockService(dep, containerName); + if (dep.kind === 'inline') return inlineService(dep, graph, containerName); + throw new Error(`Unhandled dependency ${dep.name}`); +}; + +let depWaitCondition = (dep: ResolvedDep, hasHealth?: boolean) => ({ + condition: (hasHealth ?? depHasHealth(dep)) ? 'service_healthy' : 'service_started' +}); + +let containerNameFor = (projectName: string, depName: string) => `${projectName}-${depName}`; + +export let collectContainerNames = (graph: ResolvedGraph, projectName: string): string[] => { + let names = graph.deps.map(dep => containerNameFor(projectName, dep.name)); + let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; + names.push(isSidecar ? containerNameFor(projectName, 'test') : containerNameFor(projectName, 'service')); + return names; +}; + +export let generateComposeServices = (graph: ResolvedGraph, projectName: string) => { + let services: Record = {}; + let volumes: Record = {}; + let dependsOn: Record = {}; + let seen = new Set(); + + for (let dep of graph.deps) { + if (seen.has(dep.name)) continue; + + let containerName = containerNameFor(projectName, dep.name); + + if (dep.kind === 'control') { + let scope = dep.config.scope ?? 'service'; + + if (scope === 'service') { + seen.add(dep.name); + let built = buildControlService(dep, graph, containerName); + services[dep.composeName] = built; + dependsOn[dep.composeName] = depWaitCondition(dep, !!built.healthcheck); + continue; + } + + if (!dep.children) throw new Error(`Control dependency "${dep.name}" is missing child graph`); + + for (let childDep of dep.children.deps) { + if (seen.has(childDep.name)) continue; + seen.add(childDep.name); + + let childContainerName = containerNameFor(projectName, childDep.name); + let childComposeName = `${graph.rootPrefix}-${childDep.name}`; + + if (childDep.kind === 'control' && childDep.config.scope === 'service') { + let built = buildControlService( + { + ...childDep, + composeName: childComposeName, + alias: childDep.name, + sourceDir: dep.children!.dir + }, + dep.children!, + childContainerName + ); + services[childComposeName] = built; + dependsOn[childComposeName] = depWaitCondition(childDep, !!built.healthcheck); + continue; + } + + let leaf = buildLeafDep( + { + ...childDep, + composeName: childComposeName, + alias: childDep.name, + sourceDir: dep.children!.dir + }, + dep.children!, + childContainerName + ); + services[childComposeName] = leaf.service; + Object.assign(volumes, leaf.volumes); + dependsOn[childComposeName] = depWaitCondition(childDep, leaf.hasHealth ?? true); + } + + let childService = buildControlService(dep, graph, containerName); + services[dep.composeName] = childService; + dependsOn[dep.composeName] = depWaitCondition(dep, !!childService.healthcheck); + seen.add(dep.name); + continue; + } + + seen.add(dep.name); + let built = buildLeafDep(dep, graph, containerName); + services[dep.composeName] = built.service; + Object.assign(volumes, built.volumes); + dependsOn[dep.composeName] = depWaitCondition(dep, built.hasHealth ?? true); + } + + let build = resolveBuild(graph); + let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; + let runnerKey = graph.testRunnerComposeName; + let runnerContainer = isSidecar + ? containerNameFor(projectName, 'test') + : containerNameFor(projectName, 'service'); + + services[runnerKey] = { + build, + container_name: runnerContainer, + restart: 'unless-stopped', + command: ['sh', '-c', 'sleep infinity'], + environment: graph.env, + depends_on: dependsOn, + networks: networkConfig(graph.name) + }; + + if (isSidecar) { + services[runnerKey].healthcheck = { + test: ['CMD-SHELL', 'sleep 0'], + interval: '5s', + timeout: '5s', + retries: 3 + }; + } + + return { services, volumes }; +}; + +export let generateCompose = (graph: ResolvedGraph, projectName: string) => { + let { services, volumes } = generateComposeServices(graph, projectName); + return stringify({ + name: projectName, + services, + volumes, + networks: { 'control-network': { driver: 'bridge' } } + }); +}; diff --git a/src/tooling/control/src/discovery.ts b/src/tooling/control/src/discovery.ts new file mode 100644 index 000000000..89b43f127 --- /dev/null +++ b/src/tooling/control/src/discovery.ts @@ -0,0 +1,52 @@ +import { readFileSync, readdirSync, statSync } from 'fs'; +import { join } from 'path'; +import { parse } from 'smol-toml'; +import type { ControlConfig } from './types'; + +export let SKIP_DIRS = new Set([ + 'node_modules', + '.git', + 'dist', + '.turbo', + '.control', + 'out', + 'generated', + 'build', + '.next', + 'coverage', + '.cache', + 'vendor', + 'target' +]); + +export let discoverControlFiles = (root: string): string[] => { + let results: string[] = []; + + let walk = (dir: string) => { + let entries: string[]; + try { + entries = readdirSync(dir); + } catch { + return; + } + + for (let entry of entries) { + if (SKIP_DIRS.has(entry)) continue; + let full = join(dir, entry); + let stat = statSync(full); + if (stat.isDirectory()) { + walk(full); + continue; + } + if (entry === 'control.toml') results.push(full); + } + }; + + walk(root); + return results.sort(); +}; + +export let loadControlConfigSync = (controlFile: string): ControlConfig => { + let text = readFileSync(controlFile, 'utf8'); + return parse(text) as ControlConfig; +}; diff --git a/src/tooling/control/src/entrypoint.ts b/src/tooling/control/src/entrypoint.ts new file mode 100644 index 000000000..4a4be12c4 --- /dev/null +++ b/src/tooling/control/src/entrypoint.ts @@ -0,0 +1,80 @@ +import { existsSync } from 'fs'; +import { dirname, join, resolve } from 'path'; +import { EntrypointError, ResolveTargetError } from './errors'; + +export let resolveControlCwd = (): string => { + if (process.env.METORIAL_PWD) return resolve(process.env.METORIAL_PWD); + return process.cwd(); +}; + +export let findControlRoot = (start: string): string => { + let dir = resolve(start); + let repoRoots: string[] = []; + + while (true) { + if (existsSync(join(dir, '.git'))) { + repoRoots.push(dir); + } + let parent = dirname(dir); + if (parent === dir) break; + dir = parent; + } + + if (repoRoots.length > 0) return repoRoots[repoRoots.length - 1]!; + return resolve(start); +}; + +export let findOssRoot = (start: string): string | null => { + let dir = resolve(start); + while (true) { + if (existsSync(join(dir, 'src/systems')) && existsSync(join(dir, 'package.json'))) { + return dir; + } + let parent = dirname(dir); + if (parent === dir) return null; + dir = parent; + } +}; + +export let resolveEntrypoint = (opts: { cwd: string; entrypoint?: string }): string => { + if (opts.entrypoint) { + let ep = resolve(opts.cwd, opts.entrypoint); + if (!existsSync(ep)) { + throw new EntrypointError(`Entrypoint not found: ${ep}`, [`Resolved from: ${opts.cwd}`]); + } + + try { + resolveOssRoot(ep); + return ep; + } catch { + return findControlRoot(ep); + } + } + + return findControlRoot(opts.cwd); +}; + +export let resolveOssRoot = (entrypoint: string): string => { + let ossAt = join(entrypoint, 'oss'); + if (existsSync(join(ossAt, 'src/systems'))) return ossAt; + if (existsSync(join(entrypoint, 'src/systems'))) return entrypoint; + throw new EntrypointError(`Could not resolve OSS root from entrypoint ${entrypoint}`, [ + `Expected oss/src/systems or src/systems under ${entrypoint}` + ]); +}; + +export let resolveControlDir = (entrypoint: string, target: string): string => { + let candidates = [ + resolve(entrypoint, target), + resolve(resolveOssRoot(entrypoint), target.replace(/^oss\//, '')), + resolve(entrypoint, 'oss', target.replace(/^oss\//, '')) + ]; + + for (let candidate of candidates) { + if (existsSync(join(candidate, 'control.toml'))) return candidate; + } + + throw new ResolveTargetError({ target, candidates }); +}; + +export let controlToolingDir = import.meta.dir.replace(/\/src$/, ''); diff --git a/src/tooling/control/src/errors.ts b/src/tooling/control/src/errors.ts new file mode 100644 index 000000000..6587c3166 --- /dev/null +++ b/src/tooling/control/src/errors.ts @@ -0,0 +1,226 @@ +import type { ServiceRegistry } from './types'; +import { dim, red } from './log'; + +export class ControlError extends Error { + code: string; + hint?: string; + details?: string[]; + cause?: Error; + + constructor(opts: { + code: string; + message: string; + hint?: string; + details?: string[]; + cause?: Error; + }) { + super(opts.message); + this.name = 'ControlError'; + this.code = opts.code; + this.hint = opts.hint; + this.details = opts.details; + this.cause = opts.cause; + } +} + +export class UnknownServiceError extends ControlError { + constructor(opts: { input: string; known: string[]; suggestion?: string }) { + let details = [`Known services: ${formatNameList(opts.known)}`]; + if (opts.suggestion) details.unshift(`Did you mean: ${opts.suggestion}`); + + super({ + code: 'unknown_service', + message: `Unknown control service "${opts.input}"`, + hint: 'Run `control ls` to list all services', + details + }); + } +} + +export class NoTestError extends ControlError { + constructor(opts: { name: string; mode: 'e2e' | 'unit' }) { + super({ + code: 'no_test', + message: `Service "${opts.name}" has no ${opts.mode} tests defined`, + hint: 'Run `control ls` to see which services have e2e/unit tests' + }); + } +} + +export class NotInServiceDirError extends ControlError { + constructor(opts: { cwd: string; controlRoot: string }) { + super({ + code: 'not_in_service_dir', + message: 'Not inside a control-managed service directory', + hint: 'Specify a target, use --all, or --filter', + details: [`Current directory: ${opts.cwd}`, `Control root: ${opts.controlRoot}`] + }); + } +} + +export class InvalidFlagsError extends ControlError { + constructor(message: string, hint?: string) { + super({ code: 'invalid_flags', message, hint }); + } +} + +export class ResolveTargetError extends ControlError { + constructor(opts: { target: string; candidates: string[] }) { + super({ + code: 'resolve_target', + message: `No control.toml found for target "${opts.target}"`, + hint: 'Run `control ls` to list valid service paths', + details: opts.candidates.map(c => `Tried: ${c}`) + }); + } +} + +export class DuplicateServiceError extends ControlError { + constructor(opts: { name: string; existing: string; duplicate: string }) { + super({ + code: 'duplicate_service', + message: `Duplicate control service name "${opts.name}"`, + details: [`Existing: ${opts.existing}`, `Duplicate: ${opts.duplicate}`] + }); + } +} + +export class CircularDependencyError extends ControlError { + constructor(opts: { services: string[] }) { + super({ + code: 'circular_dependency', + message: 'Circular control dependency detected among selected services', + details: opts.services.length ? [`Involved: ${opts.services.join(', ')}`] : undefined + }); + } +} + +export class DockerError extends ControlError { + phase?: string; + + constructor(opts: { + phase: string; + command: string; + exitCode: number; + service?: string; + composeFile?: string; + keep?: boolean; + }) { + let details = [`Command: ${opts.command}`, `Exit code: ${opts.exitCode}`]; + if (opts.composeFile) details.push(`Compose file: ${opts.composeFile}`); + + super({ + code: 'docker_error', + message: opts.service + ? `Docker command failed during ${opts.phase} for ${opts.service}` + : `Docker command failed during ${opts.phase}`, + hint: opts.keep + ? 'Containers were kept running for inspection' + : 'Re-run with --keep to inspect containers after failure', + details + }); + this.phase = opts.phase; + } +} + +export class HealthTimeoutError extends ControlError { + constructor(opts: { containers: { name: string; status: string }[] }) { + super({ + code: 'health_timeout', + message: `Timed out waiting for ${opts.containers.length} container(s) to become healthy`, + hint: 'Re-run with --keep and check container logs', + details: opts.containers.map(c => `${c.name}: ${c.status}`) + }); + } +} + +export class EntrypointError extends ControlError { + constructor(message: string, details?: string[]) { + super({ + code: 'entrypoint', + message, + hint: 'Use --entrypoint to specify the workspace root', + details + }); + } +} + +export let suggestServiceName = (input: string, known: string[]): string | undefined => { + let lower = input.toLowerCase(); + let prefix = known.find(n => n.toLowerCase().startsWith(lower)); + if (prefix) return prefix; + + let contains = known.find(n => n.toLowerCase().includes(lower) || lower.includes(n.toLowerCase())); + if (contains) return contains; + + let best: { name: string; dist: number } | undefined; + for (let name of known) { + let dist = levenshtein(lower, name.toLowerCase()); + if (dist <= 3 && (!best || dist < best.dist)) best = { name, dist }; + } + return best?.name; +}; + +let levenshtein = (a: string, b: string): number => { + let matrix: number[][] = []; + for (let i = 0; i <= b.length; i++) matrix[i] = [i]; + for (let j = 0; j <= a.length; j++) matrix[0]![j] = j; + + for (let i = 1; i <= b.length; i++) { + for (let j = 1; j <= a.length; j++) { + if (b.charAt(i - 1) === a.charAt(j - 1)) { + matrix[i]![j] = matrix[i - 1]![j - 1]!; + } else { + matrix[i]![j] = Math.min( + matrix[i - 1]![j - 1]! + 1, + matrix[i]![j - 1]! + 1, + matrix[i - 1]![j]! + 1 + ); + } + } + } + return matrix[b.length]![a.length]!; +}; + +export let listServiceNames = (registry: ServiceRegistry): string[] => + registry.services.map(s => s.name); + +export let formatNameList = (names: string[]): string => { + if (names.length <= 8) return names.join(', '); + return names.slice(0, 8).join(', ') + `, ... (+${names.length - 8} more)`; +}; + +export let formatControlError = (err: unknown, opts?: { verbose?: boolean }): string => { + let lines: string[] = []; + + if (err instanceof ControlError) { + lines.push(red(`error: ${err.message}`)); + lines.push(''); + if (err.details?.length) { + for (let detail of err.details) lines.push(` ${detail}`); + lines.push(''); + } + if (err.hint) lines.push(`hint: ${err.hint}`); + if (opts?.verbose && err.stack) { + lines.push(''); + lines.push(dim(err.stack)); + } + if (opts?.verbose && err.cause?.stack) { + lines.push(''); + lines.push(dim(`Caused by: ${err.cause.stack}`)); + } + return lines.join('\n'); + } + + if (err instanceof Error) { + lines.push(red(`error: ${err.message}`)); + if (opts?.verbose && err.stack) { + lines.push(''); + lines.push(dim(err.stack)); + } + return lines.join('\n'); + } + + lines.push(red(`error: ${String(err)}`)); + return lines.join('\n'); +}; diff --git a/src/tooling/control/src/graph/env.ts b/src/tooling/control/src/graph/env.ts new file mode 100644 index 000000000..b7150b584 --- /dev/null +++ b/src/tooling/control/src/graph/env.ts @@ -0,0 +1,24 @@ +export let interpolateEnv = ( + env: Record, + hosts: Record +): Record => { + let result: Record = {}; + + for (let [key, value] of Object.entries(env)) { + result[key] = value.replace(/\$deps\.([a-zA-Z0-9_-]+)(?:\.(\d+)|\.url)?/g, (match, name, port) => { + let dep = hosts[name]; + if (!dep) throw new Error(`Unknown dependency "${name}" in env var ${key}=${value}`); + if (match.endsWith('.url')) { + return `http://${dep.host}:${port ?? dep.port ?? 80}`; + } + if (port) return `${dep.host}:${port}`; + return dep.host; + }); + } + + return result; +}; + +export let mergeEnv = ( + ...layers: Record[] +): Record => Object.assign({}, ...layers); diff --git a/src/tooling/control/src/graph/format.ts b/src/tooling/control/src/graph/format.ts new file mode 100644 index 000000000..992309213 --- /dev/null +++ b/src/tooling/control/src/graph/format.ts @@ -0,0 +1,116 @@ +import type { ControlService, GlobalGraph, ServiceRegistry } from '../types'; +import { buildControlDepGraph } from './planner'; + +export let formatServicesTable = (registry: ServiceRegistry, services?: ControlService[]): string => { + let list = services ?? registry.services; + let lines: string[] = []; + lines.push(`Control root: ${registry.controlRoot}`); + lines.push(`Services: ${list.length}`); + lines.push(''); + lines.push(`${'NAME'.padEnd(22)}${'PATH'.padEnd(44)}E2E UNIT`); + + for (let service of list) { + let e2e = service.config.test?.e2e ? 'yes' : '-'; + let unit = service.config.test?.unit ? 'yes' : '-'; + lines.push(`${service.name.padEnd(22)}${service.relPath.padEnd(44)}${e2e.padEnd(5)}${unit}`); + } + + return lines.join('\n'); +}; + +export let formatServicesJson = (registry: ServiceRegistry, services?: ControlService[]): string => { + let list = services ?? registry.services; + return JSON.stringify( + { + controlRoot: registry.controlRoot, + ossRoot: registry.ossRoot, + services: list.map(s => ({ + name: s.name, + relPath: s.relPath, + dir: s.dir, + e2e: !!s.config.test?.e2e, + unit: !!s.config.test?.unit + })) + }, + null, + 2 + ); +}; + +export let formatGlobalGraphJson = (graph: GlobalGraph): string => { + return JSON.stringify(graph, null, 2); +}; + +export let formatGlobalGraphTree = (registry: ServiceRegistry): string => { + let { edges, missing } = buildControlDepGraph(registry); + let isDepTarget = new Set(); + for (let [, deps] of edges) { + for (let dep of deps) isDepTarget.add(dep); + } + + let roots = registry.services + .map(s => s.name) + .filter(name => !isDepTarget.has(name)) + .sort(); + + if (roots.length === 0) { + roots = registry.services.map(s => s.name).sort(); + } + + let visited = new Set(); + let lines: string[] = []; + + let getChildren = (name: string): string[] => { + let children: string[] = []; + for (let dep of edges.get(name) ?? []) children.push(dep); + for (let dep of missing.get(name) ?? []) children.push(`${dep} (missing)`); + return children.sort(); + }; + + let render = (name: string, prefix: string, isLast: boolean, isRoot: boolean) => { + let displayName = name.endsWith(' (missing)') ? name : name; + let inRegistry = !name.endsWith('(missing)') && registry.byName.has(name.replace(' (missing)', '')); + + if (!name.endsWith('(missing)') && visited.has(name)) { + lines.push(`${prefix}${isRoot ? '' : isLast ? '└── ' : '├── '}${displayName} (see above)`); + return; + } + + if (!name.endsWith('(missing)')) visited.add(name); + + let label = inRegistry || name.endsWith('(missing)') ? displayName : `${displayName} (missing)`; + lines.push(`${prefix}${isRoot ? '' : isLast ? '└── ' : '├── '}${label}`); + + let children = name.endsWith('(missing)') ? [] : getChildren(name); + let childPrefix = isRoot ? '' : prefix + (isLast ? ' ' : '│ '); + + children.forEach((child, i) => { + render(child, childPrefix, i === children.length - 1, false); + }); + }; + + roots.forEach((root, i) => { + render(root, '', i === roots.length - 1, true); + if (i < roots.length - 1) lines.push(''); + }); + + return lines.join('\n'); +}; + +export let formatPlan = (opts: { + mode: 'e2e' | 'unit'; + controlRoot: string; + services: ControlService[]; +}): string => { + return [ + 'Control test plan', + ` Mode: ${opts.mode}`, + ` Control root: ${opts.controlRoot}`, + ` Services: ${opts.services.length}`, + '', + 'Execution order:', + ...opts.services.map( + (service, i) => ` ${String(i + 1).padStart(2)}. ${service.name.padEnd(24)} ${service.relPath}` + ) + ].join('\n'); +}; diff --git a/src/tooling/control/src/graph/planner.ts b/src/tooling/control/src/graph/planner.ts new file mode 100644 index 000000000..0c55ebcaf --- /dev/null +++ b/src/tooling/control/src/graph/planner.ts @@ -0,0 +1,135 @@ +import type { ControlService, GlobalGraph, GlobalGraphEdge, GlobalGraphNode, ServiceRegistry } from '../types'; +import { resolveControlDepTarget } from '../registry'; +import { CircularDependencyError } from '../errors'; + +export type ControlDepGraph = { + edges: Map>; + missing: Map>; +}; + +export let buildControlDepGraph = (registry: ServiceRegistry): ControlDepGraph => { + let edges = new Map>(); + let missing = new Map>(); + + for (let service of registry.services) { + if (!edges.has(service.name)) edges.set(service.name, new Set()); + } + + for (let service of registry.services) { + for (let dep of service.config.deps ?? []) { + if (!dep.control) continue; + + let child = resolveControlDepTarget(registry, service, dep.control); + if (child) { + if (!edges.has(service.name)) edges.set(service.name, new Set()); + edges.get(service.name)!.add(child.name); + continue; + } + + let missingName = dep.name; + if (!missing.has(service.name)) missing.set(service.name, new Set()); + missing.get(service.name)!.add(missingName); + } + } + + return { edges, missing }; +}; + +export let buildGlobalGraph = (registry: ServiceRegistry): GlobalGraph => { + let { edges, missing } = buildControlDepGraph(registry); + let nodeNames = new Set(); + + for (let service of registry.services) { + nodeNames.add(service.name); + } + + for (let [, deps] of edges) { + for (let dep of deps) nodeNames.add(dep); + } + + for (let [, deps] of missing) { + for (let dep of deps) nodeNames.add(dep); + } + + let byName = registry.byName; + let nodes: GlobalGraphNode[] = [...nodeNames] + .sort() + .map(name => { + let service = byName.get(name); + if (service) { + return { name, relPath: service.relPath }; + } + return { name, relPath: '', missing: true }; + }); + + let graphEdges: GlobalGraphEdge[] = []; + for (let [from, deps] of edges) { + for (let to of deps) { + graphEdges.push({ from, to }); + } + } + for (let [from, deps] of missing) { + for (let to of deps) { + graphEdges.push({ from, to, missing: true }); + } + } + + graphEdges.sort((a, b) => a.from.localeCompare(b.from) || a.to.localeCompare(b.to)); + + return { nodes, edges: graphEdges }; +}; + +export let planExecutionOrder = ( + services: ControlService[], + registry: ServiceRegistry +): ControlService[] => { + if (services.length <= 1) return services; + + let selected = new Set(services.map(s => s.name)); + let { edges } = buildControlDepGraph(registry); + let inDegree = new Map(); + let adj = new Map>(); + + for (let service of services) { + inDegree.set(service.name, 0); + adj.set(service.name, new Set()); + } + + for (let service of services) { + let deps = edges.get(service.name) ?? new Set(); + for (let dep of deps) { + if (!selected.has(dep)) continue; + adj.get(dep)!.add(service.name); + inDegree.set(service.name, (inDegree.get(service.name) ?? 0) + 1); + } + } + + let queue = services + .filter(s => (inDegree.get(s.name) ?? 0) === 0) + .sort((a, b) => a.name.localeCompare(b.name)); + + let ordered: ControlService[] = []; + let byName = registry.byName; + + while (queue.length > 0) { + let current = queue.shift()!; + ordered.push(byName.get(current.name)!); + + for (let next of [...(adj.get(current.name) ?? [])].sort()) { + let deg = (inDegree.get(next) ?? 0) - 1; + inDegree.set(next, deg); + if (deg === 0) { + queue.push(byName.get(next)!); + queue.sort((a, b) => a.name.localeCompare(b.name)); + } + } + } + + if (ordered.length !== services.length) { + throw new CircularDependencyError({ + services: services.map(s => s.name) + }); + } + + return ordered; +}; diff --git a/src/tooling/control/src/graph/resolver.ts b/src/tooling/control/src/graph/resolver.ts new file mode 100644 index 000000000..90554cfd0 --- /dev/null +++ b/src/tooling/control/src/graph/resolver.ts @@ -0,0 +1,157 @@ +import { existsSync, readFileSync } from 'fs'; +import { join, resolve } from 'path'; +import { parse } from 'smol-toml'; +import type { ControlConfig, ControlDep, ResolvedDep, ResolvedGraph } from '../types'; +import { MOCK_DEFINITIONS, PRESET_PORTS } from '../types'; +import { interpolateEnv } from './env'; +import { resolveControlDir, resolveOssRoot } from '../entrypoint'; +import type { ServiceRegistry } from '../types'; +import { resolveControlDepTarget } from '../registry'; + +let loadConfig = (controlFile: string): ControlConfig => { + return parse(readFileSync(controlFile, 'utf8')) as ControlConfig; +}; + +let resolveDepKind = (dep: ControlDep): ResolvedDep['kind'] => { + if (dep.mock) return 'mock'; + if (dep.control) return 'control'; + if (dep.preset) return 'preset'; + if (dep.inline !== undefined && dep.inline !== false) return 'inline'; + if (dep.image) return 'docker'; + throw new Error(`Dependency "${dep.name}" must specify mock, control, preset, inline, or image`); +}; + +let resolveDepPort = (dep: ControlDep): number | undefined => { + if (dep.port) return dep.port; + if (dep.mock) return MOCK_DEFINITIONS[dep.mock]?.port; + if (dep.preset) return PRESET_PORTS[dep.preset]; + if (typeof dep.inline === 'object' && dep.inline.port) return dep.inline.port; + return undefined; +}; + +let resolveChildControlDir = (opts: { + entrypoint: string; + ossRoot: string; + targetDir: string; + controlPath: string; + registry?: ServiceRegistry; +}): string => { + if (opts.registry) { + let service = opts.registry.byDir.get(resolve(opts.targetDir)); + if (service) { + let child = resolveControlDepTarget(opts.registry, service, opts.controlPath); + if (child) return child.dir; + } + + for (let svc of opts.registry.services) { + if (resolve(svc.dir) === resolve(opts.targetDir)) { + let child = resolveControlDepTarget(opts.registry, svc, opts.controlPath); + if (child) return child.dir; + } + } + } + + let childDir = resolve(opts.targetDir, opts.controlPath); + if (existsSync(join(childDir, 'control.toml'))) return childDir; + + childDir = resolve( + opts.ossRoot, + opts.controlPath.replace(/^oss\//, 'src/systems/').replace(/^src\//, 'src/') + ); + if (existsSync(join(childDir, 'control.toml'))) return childDir; + + childDir = resolveControlDir(opts.entrypoint, opts.controlPath); + return childDir; +}; + +export let resolveGraph = (opts: { + entrypoint: string; + targetDir: string; + rootPrefix?: string; + visiting?: Set; + registry?: ServiceRegistry; +}): ResolvedGraph => { + let controlFile = join(opts.targetDir, 'control.toml'); + if (!existsSync(controlFile)) throw new Error(`Missing control.toml at ${opts.targetDir}`); + + let config = loadConfig(controlFile); + let name = config.control.name; + let rootPrefix = opts.rootPrefix ?? name; + let graphKey = rootPrefix === name ? name : `${rootPrefix}/${name}`; + + let visiting = opts.visiting ?? new Set(); + if (visiting.has(graphKey)) throw new Error(`Circular control dependency detected at ${graphKey}`); + visiting.add(graphKey); + + let entrypoint = opts.entrypoint; + let ossRoot = resolveOssRoot(entrypoint); + let serviceComposeName = `${rootPrefix}-service`; + let testRunnerComposeName = + config.test?.e2e?.runner === 'sidecar' ? `${rootPrefix}-test` : serviceComposeName; + + let depHosts: Record = {}; + let resolvedDeps: ResolvedDep[] = []; + + for (let dep of config.deps ?? []) { + let alias = dep.name; + let depComposeName = `${rootPrefix}-${dep.name}`; + let port = resolveDepPort(dep); + + depHosts[dep.name] = { host: alias, port }; + + let kind = resolveDepKind(dep); + let resolved: ResolvedDep = { + key: `${graphKey}:${dep.name}`, + name: dep.name, + composeName: depComposeName, + alias, + port, + kind, + config: dep, + sourceDir: opts.targetDir, + children: undefined + }; + + if (kind === 'control' && dep.control) { + let childDir = resolveChildControlDir({ + entrypoint, + ossRoot, + targetDir: opts.targetDir, + controlPath: dep.control, + registry: opts.registry + }); + + resolved.children = resolveGraph({ + entrypoint, + targetDir: childDir, + rootPrefix, + visiting: new Set(visiting), + registry: opts.registry + }); + + let childPort = resolved.children.config.service?.port; + depHosts[dep.name] = { + host: alias, + port: childPort ?? port + }; + } + + resolvedDeps.push(resolved); + } + + let env = interpolateEnv(config.env ?? {}, depHosts); + + return { + name, + dir: opts.targetDir, + config, + entrypoint, + ossRoot, + rootPrefix, + deps: resolvedDeps, + depHosts, + env, + serviceComposeName, + testRunnerComposeName + }; +}; diff --git a/src/tooling/control/src/log/formatRunPlan.ts b/src/tooling/control/src/log/formatRunPlan.ts new file mode 100644 index 000000000..6f4cc14de --- /dev/null +++ b/src/tooling/control/src/log/formatRunPlan.ts @@ -0,0 +1,94 @@ +import type { ControlService } from '../types'; + +export let formatRunPlan = (opts: { + mode: 'e2e' | 'unit'; + controlRoot: string; + services: ControlService[]; + title?: string; +}): string => { + let lines: string[] = []; + lines.push(opts.title ?? 'Control test run'); + lines.push(` Mode: ${opts.mode}`); + lines.push(` Control root: ${opts.controlRoot}`); + lines.push(` Services: ${opts.services.length}`); + lines.push(''); + lines.push('Execution order:'); + + opts.services.forEach((service, i) => { + lines.push(` ${String(i + 1).padStart(2)}. ${service.name.padEnd(24)} ${service.relPath}`); + }); + + return lines.join('\n'); +}; + +export let formatServiceHeader = (opts: { + index: number; + total: number; + service: ControlService; + mode: 'e2e' | 'unit'; + projectName?: string; +}): string => { + let lines: string[] = []; + lines.push(`[${opts.index}/${opts.total}] ${opts.service.name} (${opts.mode})`); + lines.push(` Path: ${opts.service.relPath}`); + if (opts.projectName) lines.push(` Stack: ${opts.projectName}`); + return lines.join('\n'); +}; + +export let formatBatchSummary = (opts: { + results: { + name: string; + relPath: string; + status: 'passed' | 'failed'; + durationMs: number; + phase?: string; + errorMessage?: string; + }[]; + totalDurationMs: number; + mode: 'e2e' | 'unit'; +}): string => { + let passed = opts.results.filter(r => r.status === 'passed'); + let failed = opts.results.filter(r => r.status === 'failed'); + let lines: string[] = []; + + let totalLabel = `${opts.results.length} service${opts.results.length === 1 ? '' : 's'}`; + lines.push(`Results (${totalLabel}, ${formatDurationLabel(opts.totalDurationMs)})`); + lines.push(''); + + for (let result of opts.results) { + let status = result.status === 'passed' ? 'PASS' : 'FAIL'; + let duration = formatDurationShort(result.durationMs); + let phase = result.phase ? ` during: ${result.phase}` : ''; + lines.push(` ${status} ${result.name.padEnd(26)} (${duration})${phase}`); + if (result.errorMessage) { + lines.push(` ${result.errorMessage}`); + } + } + + lines.push(''); + lines.push(`${passed.length} passed, ${failed.length} failed`); + + if (failed.length > 0) { + lines.push(''); + lines.push('hint: Re-run failed services with:'); + let filters = failed.map(f => `--filter ${f.name}`).join(' '); + lines.push(` control ${opts.mode} ${filters}`); + } + + return lines.join('\n'); +}; + +let formatDurationLabel = (ms: number): string => { + let totalSec = Math.round(ms / 1000); + let min = Math.floor(totalSec / 60); + let sec = totalSec % 60; + return `${min}m ${String(sec).padStart(2, '0')}s`; +}; + +let formatDurationShort = (ms: number): string => { + let totalSec = Math.round(ms / 1000); + let min = Math.floor(totalSec / 60); + let sec = totalSec % 60; + if (min > 0) return `${min}m ${String(sec).padStart(2, '0')}s`; + return `${sec}s`; +}; diff --git a/src/tooling/control/src/log/index.ts b/src/tooling/control/src/log/index.ts new file mode 100644 index 000000000..87b5108f7 --- /dev/null +++ b/src/tooling/control/src/log/index.ts @@ -0,0 +1,55 @@ +export type LogOptions = { + verbose?: boolean; +}; + +let useColor = () => process.stderr.isTTY && process.env.CI !== 'true'; + +let wrap = (code: string, text: string) => (useColor() ? `\x1b[${code}m${text}\x1b[0m` : text); + +export let bold = (text: string) => wrap('1', text); +export let dim = (text: string) => wrap('2', text); +export let red = (text: string) => wrap('31', text); +export let green = (text: string) => wrap('32', text); +export let yellow = (text: string) => wrap('33', text); +export let cyan = (text: string) => wrap('36', text); + +export let isVerbose = (opts?: LogOptions) => + !!opts?.verbose || process.env.CONTROL_VERBOSE === '1'; + +export let createLogger = (opts?: LogOptions) => { + let verbose = isVerbose(opts); + + return { + info: (msg: string) => console.log(msg), + success: (msg: string) => console.log(green(msg)), + warn: (msg: string) => console.warn(yellow(msg)), + error: (msg: string) => console.error(red(msg)), + debug: (msg: string) => { + if (verbose) console.log(dim(msg)); + }, + section: (title: string) => console.log(bold(title)), + detail: (label: string, value: string) => console.log(` ${label.padEnd(14)}${value}`), + list: (items: string[], indent = 2) => { + let pad = ' '.repeat(indent); + for (let item of items) console.log(`${pad}${item}`); + }, + blank: () => console.log('') + }; +}; + +export let log = createLogger(); + +export let formatDuration = (ms: number): string => { + let totalSec = Math.round(ms / 1000); + let min = Math.floor(totalSec / 60); + let sec = totalSec % 60; + return `${min}m ${String(sec).padStart(2, '0')}s`; +}; + +export let formatDurationShort = (ms: number): string => { + let totalSec = Math.round(ms / 1000); + let min = Math.floor(totalSec / 60); + let sec = totalSec % 60; + if (min > 0) return `${min}m ${String(sec).padStart(2, '0')}s`; + return `${sec}s`; +}; diff --git a/src/tooling/control/src/registry.ts b/src/tooling/control/src/registry.ts new file mode 100644 index 000000000..de78848d3 --- /dev/null +++ b/src/tooling/control/src/registry.ts @@ -0,0 +1,191 @@ +import { dirname, join, relative, resolve } from 'path'; +import { discoverControlFiles, loadControlConfigSync } from './discovery'; +import { resolveControlDir, resolveEntrypoint, resolveOssRoot } from './entrypoint'; +import { + DuplicateServiceError, + InvalidFlagsError, + listServiceNames, + NoTestError, + NotInServiceDirError, + suggestServiceName, + UnknownServiceError +} from './errors'; +import type { ControlService, ServiceRegistry } from './types'; + +let normalizeDir = (dir: string): string => resolve(dir); + +export let hasTest = (service: ControlService, mode: 'e2e' | 'unit'): boolean => { + if (mode === 'e2e') return !!service.config.test?.e2e; + return !!service.config.test?.unit; +}; + +export let buildRegistry = (controlRoot: string): ServiceRegistry => { + let ossRoot = resolveOssRoot(controlRoot); + let files = discoverControlFiles(controlRoot); + let services: ControlService[] = []; + let byName = new Map(); + let byDir = new Map(); + + for (let controlFile of files) { + let dir = normalizeDir(dirname(controlFile)); + if (byDir.has(dir)) continue; + + let config = loadControlConfigSync(controlFile); + let name = config.control.name; + if (byName.has(name)) { + throw new DuplicateServiceError({ + name, + existing: byName.get(name)!.dir, + duplicate: dir + }); + } + + let service: ControlService = { + name, + dir, + relPath: relative(controlRoot, dir), + controlFile, + config + }; + + services.push(service); + byName.set(name, service); + byDir.set(dir, service); + } + + services.sort((a, b) => a.name.localeCompare(b.name)); + + return { controlRoot, ossRoot, services, byName, byDir }; +}; + +export let resolveService = (registry: ServiceRegistry, input: string): ControlService => { + let byName = registry.byName.get(input); + if (byName) return byName; + + let candidates = [ + resolve(registry.controlRoot, input), + resolve(registry.ossRoot, input.replace(/^oss\//, '')), + resolve(registry.controlRoot, 'oss', input.replace(/^oss\//, '')) + ]; + + for (let candidate of candidates) { + let normalized = normalizeDir(candidate); + let service = registry.byDir.get(normalized); + if (service) return service; + } + + try { + let dir = resolveControlDir(registry.controlRoot, input); + let service = registry.byDir.get(normalizeDir(dir)); + if (service) return service; + } catch { + // fall through + } + + let known = listServiceNames(registry); + throw new UnknownServiceError({ + input, + known, + suggestion: suggestServiceName(input, known) + }); +}; + +export let findServiceForCwd = (registry: ServiceRegistry, cwd: string): ControlService | null => { + let dir = resolve(cwd); + let controlRoot = resolve(registry.controlRoot); + + while (dir.startsWith(controlRoot) || dir === controlRoot) { + let service = registry.byDir.get(normalizeDir(dir)); + if (service) return service; + if (dir === controlRoot) break; + dir = dirname(dir); + } + + return null; +}; + +export let resolveControlDepTarget = ( + registry: ServiceRegistry, + service: ControlService, + controlPath: string +): ControlService | null => { + let childDir = normalizeDir(resolve(service.dir, controlPath)); + let byDir = registry.byDir.get(childDir); + if (byDir) return byDir; + + childDir = normalizeDir( + resolve(registry.ossRoot, controlPath.replace(/^oss\//, 'src/systems/').replace(/^src\//, 'src/')) + ); + byDir = registry.byDir.get(childDir); + if (byDir) return byDir; + + try { + let dir = resolveControlDir(registry.controlRoot, controlPath); + return registry.byDir.get(normalizeDir(dir)) ?? null; + } catch { + return null; + } +}; + +export let resolveTargets = (opts: { + registry: ServiceRegistry; + cwd: string; + target?: string; + all?: boolean; + filters?: string[]; + mode?: 'e2e' | 'unit'; +}): ControlService[] => { + if (opts.all && opts.filters?.length) { + throw new InvalidFlagsError( + 'Cannot use --all and --filter together', + 'Use --all to run every service, or --filter to select specific ones' + ); + } + + if (opts.all) { + if (!opts.mode) throw new InvalidFlagsError('Mode is required when using --all'); + return opts.registry.services.filter(s => hasTest(s, opts.mode!)); + } + + if (opts.filters?.length) { + if (!opts.mode) throw new InvalidFlagsError('Mode is required when using --filter'); + return opts.filters.map(name => { + let service = opts.registry.byName.get(name); + if (!service) { + let known = listServiceNames(opts.registry); + throw new UnknownServiceError({ + input: name, + known, + suggestion: suggestServiceName(name, known) + }); + } + if (!hasTest(service, opts.mode!)) { + throw new NoTestError({ name, mode: opts.mode! }); + } + return service; + }); + } + + if (opts.target) { + return [resolveService(opts.registry, opts.target)]; + } + + let service = findServiceForCwd(opts.registry, opts.cwd); + if (!service) { + throw new NotInServiceDirError({ + cwd: opts.cwd, + controlRoot: opts.registry.controlRoot + }); + } + + if (opts.mode && !hasTest(service, opts.mode)) { + throw new NoTestError({ name: service.name, mode: opts.mode }); + } + + return [service]; +}; + +export let getRegistry = (opts: { cwd: string; entrypoint?: string }): ServiceRegistry => { + let controlRoot = resolveEntrypoint(opts); + return buildRegistry(controlRoot); +}; diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts new file mode 100644 index 000000000..d82e71632 --- /dev/null +++ b/src/tooling/control/src/run/runner.ts @@ -0,0 +1,356 @@ +import { mkdirSync, writeFileSync } from 'fs'; +import { join } from 'path'; +import { generateCompose, collectContainerNames } from '../compose/generator'; +import { resolveGraph } from '../graph/resolver'; +import { resolveControlDir, resolveEntrypoint, resolveControlCwd } from '../entrypoint'; +import { getRegistry } from '../registry'; +import { planExecutionOrder } from '../graph/planner'; +import { createLogger } from '../log'; +import { formatBatchSummary, formatRunPlan, formatServiceHeader } from '../log/formatRunPlan'; +import { DockerError, HealthTimeoutError, NoTestError } from '../errors'; +import type { + BatchResult, + BatchServiceResult, + ControlService, + RunOptions, + RunPhase +} from '../types'; + +type RunControlContext = { + index: number; + total: number; + service: ControlService; +}; + +type ShellOpts = { + cwd?: string; + env?: Record; + phase: RunPhase; + service?: string; + composeFile?: string; + keep?: boolean; + verbose?: boolean; +}; + +let runShell = async (cmd: string[], opts: ShellOpts) => { + let proc = Bun.spawn(cmd, { + cwd: opts.cwd, + env: { ...process.env, ...opts.env }, + stdout: 'inherit', + stderr: 'inherit' + }); + let code = await proc.exited; + if (code !== 0) { + throw new DockerError({ + phase: opts.phase, + command: cmd.join(' '), + exitCode: code, + service: opts.service, + composeFile: opts.composeFile, + keep: opts.keep + }); + } +}; + +let waitForServices = async (opts: { + services: string[]; + verbose?: boolean; + logger: ReturnType; +}): Promise => { + let attempts = 60; + let interval = 5000; + + let inspect = async (service: string) => { + let proc = Bun.spawn(['docker', 'inspect', '-f', '{{.State.Health.Status}}', service], { + stdout: 'pipe', + stderr: 'pipe' + }); + let out = (await new Response(proc.stdout).text()).trim(); + await proc.exited; + + if (out && out !== '{{.State.Health.Status}}' && out !== 'none' && out !== 'None') { + return out; + } + + let proc2 = Bun.spawn(['docker', 'inspect', '-f', '{{.State.Status}}', service], { + stdout: 'pipe', + stderr: 'pipe' + }); + let out2 = (await new Response(proc2.stdout).text()).trim(); + await proc2.exited; + return out2 || 'missing'; + }; + + opts.logger.info(`Waiting for ${opts.services.length} container(s)...`); + + for (let attempt = 1; attempt <= attempts; attempt++) { + let pending: { name: string; status: string }[] = []; + + for (let service of opts.services) { + let status = await inspect(service); + let ready = status === 'healthy' || status === 'running'; + if (!ready) pending.push({ name: service, status }); + if (opts.verbose) opts.logger.debug(` ${service}: ${status}`); + } + + if (pending.length === 0) return; + await Bun.sleep(interval); + } + + let finalStatuses: { name: string; status: string }[] = []; + for (let service of opts.services) { + finalStatuses.push({ name: service, status: await inspect(service) }); + } + + throw new HealthTimeoutError({ containers: finalStatuses }); +}; + +export let runControl = async ( + opts: RunOptions & { target: string; context?: RunControlContext } +) => { + let logger = createLogger(opts); + let cwd = resolveControlCwd(); + let entrypoint = resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); + let registry = getRegistry({ cwd, entrypoint: opts.entrypoint }); + let targetDir = resolveControlDir(entrypoint, opts.target); + let graph = resolveGraph({ entrypoint, targetDir, registry }); + let runId = `${Date.now()}`; + let projectName = opts.projectPrefix ?? `control-${graph.name}-${runId}`; + let serviceName = graph.name; + + if (opts.context) { + logger.section( + formatServiceHeader({ + index: opts.context.index, + total: opts.context.total, + service: opts.context.service, + mode: opts.mode, + projectName + }) + ); + logger.blank(); + } + + let runDir = join(entrypoint, '.control', 'runs', runId); + mkdirSync(runDir, { recursive: true }); + + let composeFile = join(runDir, 'compose.yml'); + let envFile = join(runDir, '.env.control'); + writeFileSync(composeFile, generateCompose(graph, projectName)); + + let envLines = Object.entries(graph.env).map(([k, v]) => `${k}=${JSON.stringify(v).slice(1, -1)}`); + writeFileSync(envFile, envLines.join('\n') + '\n'); + + logger.debug(`Compose file: ${composeFile}`); + logger.debug(`Env file: ${envFile}`); + logger.debug(`Dependencies: ${graph.deps.length}`); + + if (opts.verbose) { + logger.debug(await Bun.file(composeFile).text()); + } + + let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; + let runnerContainer = isSidecar ? `${projectName}-test` : `${projectName}-service`; + let failedPhase: RunPhase = 'build'; + + try { + failedPhase = 'build'; + logger.info('Building containers...'); + logger.debug(`Command: docker compose -p ${projectName} up -d --build`); + await runShell( + ['docker', 'compose', '-p', projectName, '-f', composeFile, '--env-file', envFile, 'up', '-d', '--build'], + { cwd: runDir, phase: 'build', service: serviceName, composeFile, keep: opts.keep, verbose: opts.verbose } + ); + + failedPhase = 'health'; + let waitServices = collectContainerNames(graph, projectName); + await waitForServices({ services: waitServices, verbose: opts.verbose, logger }); + + if (opts.mode === 'unit') { + let unit = graph.config.test?.unit; + if (!unit) throw new NoTestError({ name: graph.name, mode: 'unit' }); + + failedPhase = 'test'; + logger.info('Running unit tests...'); + let unitCmd = unit.cwd ? `cd ${unit.cwd} && ${unit.command}` : unit.command; + logger.debug(`Command: docker exec ${runnerContainer} sh -c ${JSON.stringify(unitCmd)}`); + await runShell(['docker', 'exec', runnerContainer, 'sh', '-c', unitCmd], { + phase: 'test', + service: serviceName, + composeFile, + keep: opts.keep, + verbose: opts.verbose + }); + return; + } + + let e2e = graph.config.test?.e2e; + if (!e2e) throw new NoTestError({ name: graph.name, mode: 'e2e' }); + + let cwdInContainer = e2e.cwd ?? '.'; + let setupSteps = e2e.setup ?? []; + if (setupSteps.length > 0) { + failedPhase = 'test-setup'; + logger.info(`Running setup (${setupSteps.length} step${setupSteps.length === 1 ? '' : 's'})...`); + for (let step of setupSteps) logger.debug(` setup: ${step}`); + } + + failedPhase = 'test'; + logger.info(`Running ${opts.mode} tests...`); + + let setup = setupSteps.join(' && '); + let fullCmd = setup ? `${setup} && ${e2e.command}` : e2e.command; + if (cwdInContainer !== '.') fullCmd = `cd ${cwdInContainer} && ${fullCmd}`; + logger.debug(`Command: docker exec ${runnerContainer} sh -c ${JSON.stringify(fullCmd)}`); + + await runShell(['docker', 'exec', runnerContainer, 'sh', '-c', fullCmd], { + phase: 'test', + service: serviceName, + composeFile, + keep: opts.keep, + verbose: opts.verbose + }); + } catch (err) { + let phase = failedPhase; + if (err instanceof DockerError) err.phase = phase; + if (err instanceof HealthTimeoutError) (err as HealthTimeoutError & { failedPhase?: RunPhase }).failedPhase = phase; + + logger.warn('Fetching container logs...'); + await runShell(['docker', 'compose', '-p', projectName, '-f', composeFile, 'logs', '--tail=100'], { + cwd: runDir, + phase: failedPhase, + service: serviceName, + composeFile, + keep: opts.keep, + verbose: opts.verbose + }).catch(() => {}); + + logger.detail('Compose file', composeFile); + if (!opts.keep) { + logger.detail('Hint', 'Re-run with --keep to inspect containers after failure'); + } + + if (err instanceof Error) { + (err as Error & { failedPhase?: RunPhase }).failedPhase = phase; + } + throw err; + } finally { + if (!opts.keep) { + logger.debug('Tearing down stack...'); + await runShell(['docker', 'compose', '-p', projectName, '-f', composeFile, 'down', '-v'], { + cwd: runDir, + phase: 'teardown', + service: serviceName, + composeFile, + keep: opts.keep, + verbose: opts.verbose + }).catch(() => {}); + } + } +}; + +let getFailedPhase = (err: Error): string | undefined => { + if ('failedPhase' in err && typeof (err as { failedPhase?: string }).failedPhase === 'string') { + return (err as { failedPhase?: string }).failedPhase; + } + if (err instanceof DockerError) return err.phase; + return undefined; +}; + +export let runControlBatch = async ( + opts: RunOptions & { services: ControlService[] } +): Promise => { + let logger = createLogger(opts); + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let ordered = planExecutionOrder(opts.services, registry); + let passed: string[] = []; + let failed: { name: string; error: Error; phase?: string }[] = []; + let results: BatchServiceResult[] = []; + let batchStarted = Date.now(); + + for (let i = 0; i < ordered.length; i++) { + let service = ordered[i]!; + let started = Date.now(); + + try { + await runControl({ + ...opts, + target: service.relPath, + context: { index: i + 1, total: ordered.length, service } + }); + let durationMs = Date.now() - started; + passed.push(service.name); + results.push({ + name: service.name, + relPath: service.relPath, + status: 'passed', + durationMs + }); + logger.success(`✓ ${service.name} passed (${Math.round(durationMs / 1000)}s)`); + logger.blank(); + } catch (err) { + let error = err instanceof Error ? err : new Error(String(err)); + let phase = getFailedPhase(error); + let durationMs = Date.now() - started; + failed.push({ name: service.name, error, phase }); + results.push({ + name: service.name, + relPath: service.relPath, + status: 'failed', + durationMs, + error, + phase + }); + logger.error(`✗ ${service.name} failed${phase ? ` during ${phase}` : ''}: ${error.message}`); + logger.blank(); + } + } + + let totalDurationMs = Date.now() - batchStarted; + + logger.section( + formatBatchSummary({ + mode: opts.mode, + totalDurationMs, + results: results.map(r => ({ + name: r.name, + relPath: r.relPath, + status: r.status, + durationMs: r.durationMs, + phase: r.phase, + errorMessage: r.error?.message + })) + }) + ); + + return { passed, failed, results, totalDurationMs }; +}; + +export let runControlTargets = async (opts: RunOptions & { services: ControlService[] }) => { + let logger = createLogger(opts); + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let ordered = planExecutionOrder(opts.services, registry); + + logger.section( + formatRunPlan({ + mode: opts.mode, + controlRoot: registry.controlRoot, + services: ordered + }) + ); + logger.blank(); + + if (ordered.length === 1) { + await runControl({ + ...opts, + target: ordered[0]!.relPath, + context: { index: 1, total: 1, service: ordered[0]! } + }); + return; + } + + let result = await runControlBatch(opts); + if (result.failed.length > 0) { + process.exit(1); + } +}; diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts new file mode 100644 index 000000000..ebcd74d01 --- /dev/null +++ b/src/tooling/control/src/types.ts @@ -0,0 +1,178 @@ +export type ControlDep = { + name: string; + preset?: string; + mock?: string; + control?: string; + scope?: 'full' | 'service'; + image?: string; + env?: Record; + init?: string; + port?: number; + inline?: { + build?: { context: string; dockerfile: string }; + image?: string; + command?: string[]; + port?: number; + health?: { path?: string; cmd?: string }; + } | boolean; +}; + +export type ControlConfig = { + control: { + name: string; + entrypoint?: string; + }; + service?: { + port?: number; + dockerfile?: string; + build_context?: string; + health?: { path?: string; cmd?: string }; + command?: string[]; + }; + test?: { + e2e?: { + command: string; + setup?: string[]; + cwd?: string; + runner?: 'service' | 'sidecar'; + vitest_mode?: string; + }; + unit?: { + command: string; + cwd?: string; + }; + }; + env?: Record; + deps?: ControlDep[]; +}; + +export type ResolvedDep = { + key: string; + name: string; + composeName: string; + alias: string; + port?: number; + kind: 'preset' | 'mock' | 'control' | 'docker' | 'inline'; + config: ControlDep; + sourceDir: string; + children?: ResolvedGraph; +}; + +export type ResolvedGraph = { + name: string; + dir: string; + config: ControlConfig; + entrypoint: string; + ossRoot: string; + rootPrefix: string; + deps: ResolvedDep[]; + depHosts: Record; + env: Record; + serviceComposeName: string; + testRunnerComposeName: string; +}; + +export type ControlService = { + name: string; + dir: string; + relPath: string; + controlFile: string; + config: ControlConfig; +}; + +export type ServiceRegistry = { + controlRoot: string; + ossRoot: string; + services: ControlService[]; + byName: Map; + byDir: Map; +}; + +export type BatchServiceResult = { + name: string; + relPath: string; + status: 'passed' | 'failed'; + durationMs: number; + error?: Error; + phase?: string; +}; + +export type BatchResult = { + passed: string[]; + failed: { name: string; error: Error; phase?: string }[]; + results: BatchServiceResult[]; + totalDurationMs: number; +}; + +export type RunPhase = + | 'setup' + | 'build' + | 'health' + | 'test-setup' + | 'test' + | 'teardown'; + +export type GlobalGraphNode = { + name: string; + relPath: string; + missing?: boolean; +}; + +export type GlobalGraphEdge = { + from: string; + to: string; + missing?: boolean; +}; + +export type GlobalGraph = { + nodes: GlobalGraphNode[]; + edges: GlobalGraphEdge[]; +}; + +export type RunOptions = { + target?: string; + mode: 'e2e' | 'unit'; + entrypoint?: string; + projectPrefix?: string; + keep?: boolean; + verbose?: boolean; + ci?: boolean; + services?: ControlService[]; +}; + +export type MockDefinition = { + name: string; + port: number; + serverPath: string; + healthCmd: string; +}; + +export let MOCK_DEFINITIONS: Record = { + 'object-store': { + name: 'object-store', + port: 52010, + serverPath: 'object-store/server.ts', + healthCmd: + 'bun -e "fetch(\'http://localhost:52010/health\').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"' + }, + voyager: { + name: 'voyager', + port: 52060, + serverPath: 'voyager/server.ts', + healthCmd: + 'bun -e "fetch(\'http://localhost:52060/\').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"' + }, + relay: { + name: 'relay', + port: 52110, + serverPath: 'relay/server.ts', + healthCmd: + 'bun -e "fetch(\'http://localhost:52110/ping\').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"' + } +}; + +export let PRESET_PORTS: Record = { + postgres: 5432, + redis: 6379, + nats: 4222 +}; diff --git a/src/tooling/control/tsconfig.json b/src/tooling/control/tsconfig.json new file mode 100644 index 000000000..c96cb7fa7 --- /dev/null +++ b/src/tooling/control/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "skipLibCheck": true, + "noEmit": true, + "types": ["bun"] + }, + "include": ["src/**/*", "mocks/**/*"] +} From 153924629b00301a700980fa461d9384f9dcc1a8 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 13:17:15 +0200 Subject: [PATCH 02/69] Improve docker builds --- clients/metorial-node | 2 +- src/systems/ares/service/Dockerfile | 4 + src/systems/ares/service/dev.Dockerfile | 15 - .../ares/service/docker-compose.dev.yml | 134 ---- src/systems/ares/service/package.json | 3 - src/systems/cargo/service/Dockerfile | 4 + src/systems/cargo/service/control.toml | 17 +- src/systems/cargo/service/dev.Dockerfile | 14 - .../cargo/service/docker-compose.dev.yml | 151 ---- src/systems/cargo/service/init-test-db.sh | 8 - src/systems/cargo/service/package.json | 4 - .../forge/scripts/prepare-docker-build.sh | 6 + src/systems/forge/service/Dockerfile | 7 +- src/systems/forge/service/control.toml | 15 +- src/systems/forge/service/dev.Dockerfile | 18 - .../forge/service/docker-compose.dev.yml | 123 ---- src/systems/forge/service/init-test-db.sh | 15 - src/systems/forge/service/package.json | 4 - src/systems/function-bay/service/Dockerfile | 4 + src/systems/function-bay/service/control.toml | 19 +- .../function-bay/service/dev.Dockerfile | 11 - .../service/docker-compose.dev.yml | 160 ---- .../function-bay/service/init-test-db.sh | 6 - src/systems/function-bay/service/package.json | 6 +- .../origin/apps/code-bucket/Dockerfile | 2 +- src/systems/origin/apps/service/Dockerfile | 4 + src/systems/origin/apps/service/control.toml | 17 +- .../origin/apps/service/dev.Dockerfile | 15 - src/systems/origin/docker-compose.dev.yml | 114 --- src/systems/shuttle/service/Dockerfile | 4 + src/systems/shuttle/service/control.toml | 28 +- src/systems/shuttle/service/dev.Dockerfile | 12 - .../shuttle/service/docker-compose.dev.yml | 197 ----- src/systems/shuttle/service/init-test-db.sh | 15 - src/systems/shuttle/service/package.json | 3 - src/systems/signal/service/Dockerfile | 4 + src/systems/signal/service/control.toml | 13 +- src/systems/signal/service/dev.Dockerfile | 15 - .../signal/service/docker-compose.dev.yml | 112 --- src/systems/signal/service/init-test-db.sh | 15 - src/systems/signal/service/package.json | 6 +- src/systems/slates/apps/hub/Dockerfile | 4 + src/systems/slates/apps/hub/control.toml | 42 +- src/systems/slates/apps/hub/dev.Dockerfile | 11 - .../slates/apps/hub/docker-compose.dev.yml | 280 ------- src/systems/slates/apps/hub/init-test-db.sh | 15 - src/systems/slates/apps/hub/package.json | 4 - src/systems/slates/apps/registry/Dockerfile | 4 + src/systems/slates/apps/registry/control.toml | 8 +- .../slates/apps/registry/dev.Dockerfile | 20 - .../apps/registry/docker-compose.dev.yml | 90 --- src/systems/slates/apps/registry/package.json | 2 - .../subspace/apps/controller/Dockerfile | 6 +- .../subspace/apps/controller/control.toml | 122 +--- .../subspace/apps/controller/dev.Dockerfile | 11 - .../subspace/apps/controller/package.json | 2 - src/systems/subspace/apps/public/Dockerfile | 6 +- .../subspace/apps/public/dev.Dockerfile | 15 - src/systems/subspace/apps/worker/Dockerfile | 6 +- .../subspace/apps/worker/dev.Dockerfile | 12 - src/systems/subspace/docker-compose.dev.yml | 691 ------------------ src/systems/subspace/init-test-db.sh | 15 - src/tooling/control/src/cli.ts | 79 +- src/tooling/control/src/compose/builds.ts | 82 +++ .../control/src/compose/databaseInit.ts | 26 + src/tooling/control/src/compose/generator.ts | 90 ++- src/tooling/control/src/errors.ts | 10 + src/tooling/control/src/graph/databases.ts | 100 +++ src/tooling/control/src/graph/env.ts | 45 +- src/tooling/control/src/graph/resolver.ts | 19 +- src/tooling/control/src/log/formatRunPlan.ts | 6 +- src/tooling/control/src/registry.ts | 68 +- src/tooling/control/src/run/build.ts | 185 +++++ src/tooling/control/src/run/runner.ts | 50 +- src/tooling/control/src/run/shell.ts | 32 + src/tooling/control/src/types.ts | 33 +- 76 files changed, 860 insertions(+), 2657 deletions(-) delete mode 100644 src/systems/ares/service/dev.Dockerfile delete mode 100644 src/systems/ares/service/docker-compose.dev.yml delete mode 100644 src/systems/cargo/service/dev.Dockerfile delete mode 100644 src/systems/cargo/service/docker-compose.dev.yml delete mode 100644 src/systems/cargo/service/init-test-db.sh create mode 100755 src/systems/forge/scripts/prepare-docker-build.sh delete mode 100644 src/systems/forge/service/dev.Dockerfile delete mode 100644 src/systems/forge/service/docker-compose.dev.yml delete mode 100755 src/systems/forge/service/init-test-db.sh delete mode 100644 src/systems/function-bay/service/dev.Dockerfile delete mode 100644 src/systems/function-bay/service/docker-compose.dev.yml delete mode 100755 src/systems/function-bay/service/init-test-db.sh delete mode 100644 src/systems/origin/apps/service/dev.Dockerfile delete mode 100644 src/systems/origin/docker-compose.dev.yml delete mode 100644 src/systems/shuttle/service/dev.Dockerfile delete mode 100644 src/systems/shuttle/service/docker-compose.dev.yml delete mode 100755 src/systems/shuttle/service/init-test-db.sh delete mode 100644 src/systems/signal/service/dev.Dockerfile delete mode 100644 src/systems/signal/service/docker-compose.dev.yml delete mode 100755 src/systems/signal/service/init-test-db.sh delete mode 100644 src/systems/slates/apps/hub/dev.Dockerfile delete mode 100644 src/systems/slates/apps/hub/docker-compose.dev.yml delete mode 100755 src/systems/slates/apps/hub/init-test-db.sh delete mode 100644 src/systems/slates/apps/registry/dev.Dockerfile delete mode 100644 src/systems/slates/apps/registry/docker-compose.dev.yml delete mode 100644 src/systems/subspace/apps/controller/dev.Dockerfile delete mode 100644 src/systems/subspace/apps/public/dev.Dockerfile delete mode 100644 src/systems/subspace/apps/worker/dev.Dockerfile delete mode 100644 src/systems/subspace/docker-compose.dev.yml delete mode 100755 src/systems/subspace/init-test-db.sh create mode 100644 src/tooling/control/src/compose/builds.ts create mode 100644 src/tooling/control/src/compose/databaseInit.ts create mode 100644 src/tooling/control/src/graph/databases.ts create mode 100644 src/tooling/control/src/run/build.ts create mode 100644 src/tooling/control/src/run/shell.ts diff --git a/clients/metorial-node b/clients/metorial-node index ba9f6bf2f..66d20b092 160000 --- a/clients/metorial-node +++ b/clients/metorial-node @@ -1 +1 @@ -Subproject commit ba9f6bf2f22e447bbe39a3390a8638ad73387ac5 +Subproject commit 66d20b092f911c8f326fd97f6462188c5eb339b2 diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index 864bcde10..3feb14651 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -21,6 +21,10 @@ RUN bun prisma generate RUN bun run server:build RUN bun run frontend:build +FROM builder AS workspace +WORKDIR /app/src/systems/ares/service +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner diff --git a/src/systems/ares/service/dev.Dockerfile b/src/systems/ares/service/dev.Dockerfile deleted file mode 100644 index f0cbae190..000000000 --- a/src/systems/ares/service/dev.Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app/service - -# Copy package files -COPY package.json bun.lock* ./ - -# Install dependencies -RUN bun install - -# Copy source code -COPY . . - -# Run in dev mode with hot reloading -CMD ["sh", "-c", "bun prisma generate && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/ares/service/docker-compose.dev.yml b/src/systems/ares/service/docker-compose.dev.yml deleted file mode 100644 index f4eb371f1..000000000 --- a/src/systems/ares/service/docker-compose.dev.yml +++ /dev/null @@ -1,134 +0,0 @@ -services: - postgres: - profiles: ['infra'] - image: postgres:16-alpine - container_name: ares-postgres - restart: unless-stopped - environment: - POSTGRES_USER: ares - POSTGRES_PASSWORD: ares - POSTGRES_DB: ares - volumes: - - postgres_data:/var/lib/postgresql/data - - ./init-test-db.sh:/docker-entrypoint-initdb.d/init-test-db.sh - ports: - - '25432:5432' - networks: - - ares-network - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U ares'] - interval: 5s - timeout: 5s - retries: 10 - - redis: - profiles: ['infra'] - image: redis:7-alpine - container_name: ares-redis - restart: unless-stopped - ports: - - '26379:6379' - networks: - - ares-network - healthcheck: - test: ['CMD', 'redis-cli', 'ping'] - interval: 5s - timeout: 5s - retries: 10 - - relay: - profiles: ['infra'] - image: ghcr.io/metorial/relay:latest - container_name: ares-relay - restart: unless-stopped - environment: - DATABASE_URL: postgresql://ares:ares@postgres:5432/relay - REDIS_URL: redis://redis:6379/0 - EMAIL_SES_ACCESS_KEY_ID: ${EMAIL_SES_ACCESS_KEY_ID} - EMAIL_SES_SECRET_ACCESS_KEY: ${EMAIL_SES_SECRET_ACCESS_KEY} - EMAIL_SES_REGION: ${EMAIL_SES_REGION} - ports: - - '52110:52110' - networks: - - ares-network - healthcheck: - test: ['CMD-SHELL', 'curl -f http://localhost:52110/ping || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - - ares: - profiles: ['service'] - build: - context: . - dockerfile: dev.Dockerfile - container_name: ares-service - restart: unless-stopped - ports: - - '52120:52120' - environment: - # Database & Cache - DATABASE_URL: postgresql://ares:ares@postgres:5432/ares - REDIS_URL: redis://redis:6379/0 - RELAY_URL: ${RELAY_URL:-http://localhost:52110} - - # Service URLs - ARES_AUTH_URL: ${ARES_AUTH_URL:-http://localhost:52120} - ARES_ADMIN_URL: ${ARES_ADMIN_URL:-http://localhost:52120} - ARES_INTERNAL_URL: ${ARES_INTERNAL_URL:-http://localhost:52120} - - # Email Configuration - EMAIL_NAME: ${EMAIL_NAME:-Ares Dev} - EMAIL_ADDRESS: ${EMAIL_ADDRESS:-dev@example.com} - - # Domain Configuration - COOKIE_DOMAIN: ${COOKIE_DOMAIN:-localhost} - - # Frontend URLs - AUTH_FRONTEND_HOST: ${AUTH_FRONTEND_HOST:-http://localhost:52120/metorial-ares} - - # Turnstile - TURNSTILE_SITE_KEY: ${TURNSTILE_SITE_KEY:-1x00000000000000000000AA} - TURNSTILE_SECRET_KEY: ${TURNSTILE_SECRET_KEY:-1x0000000000000000000000000000000AA} - - # Security Keys - AUTH_TICKET_SECRET: ${AUTH_TICKET_SECRET:-dev-secret-change-in-production} - - # AWS SES (optional) - EMAIL_SES_ACCESS_KEY_ID: ${EMAIL_SES_ACCESS_KEY_ID:-} - EMAIL_SES_SECRET_ACCESS_KEY: ${EMAIL_SES_SECRET_ACCESS_KEY:-} - EMAIL_SES_REGION: ${EMAIL_SES_REGION:-} - volumes: - - ./src:/app/service/src:ro - - ./frontend:/app/service/frontend:ro - - ./package.json:/app/service/package.json:ro - - ./tsconfig.json:/app/service/tsconfig.json:ro - - ./tsconfig.backend.json:/app/service/tsconfig.backend.json:ro - - ./prisma:/app/service/prisma:ro - - ./prisma.config.ts:/app/service/prisma.config.ts:ro - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - 'curl -f http://localhost:52120/ping || exit 1' - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - ares-network - -volumes: - postgres_data: - driver: local - object-store-data: - driver: local - -networks: - ares-network: - driver: bridge diff --git a/src/systems/ares/service/package.json b/src/systems/ares/service/package.json index 0215302f9..984b4daeb 100644 --- a/src/systems/ares/service/package.json +++ b/src/systems/ares/service/package.json @@ -17,9 +17,6 @@ "frontend:dev": "cd frontend/auth && vite", "prisma:generate": "bun run db:generate", "prisma:push": "bun run db:push:dev", - "infra:up": "docker compose -p ares -f ./docker-compose.dev.yml --profile infra up -d --pull always", - "infra:down": "docker compose -p ares -f ./docker-compose.dev.yml --profile infra down", - "infra:logs": "docker compose -p ares -f ./docker-compose.dev.yml --profile infra logs -f", "db:generate": "bun prisma generate", "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --accept-data-loss'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index 0481f39b5..a2004b16a 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -20,6 +20,10 @@ RUN bun run prisma:generate WORKDIR /app/src/systems/cargo/service RUN bun run server:build +FROM builder AS workspace +WORKDIR /app/src/systems/cargo/service +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner diff --git a/src/systems/cargo/service/control.toml b/src/systems/cargo/service/control.toml index b45e3cdc9..2e3ce985a 100644 --- a/src/systems/cargo/service/control.toml +++ b/src/systems/cargo/service/control.toml @@ -3,7 +3,7 @@ name = "cargo" [service] port = 52150 -dockerfile = "src/systems/cargo/service/dev.Dockerfile" +dockerfile = "src/systems/cargo/service/Dockerfile" build_context = "oss" health = { path = "/ping", cmd = "bun -e \"fetch('http://localhost:52151/ping').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" } @@ -13,8 +13,20 @@ setup = ["bun prisma generate --schema ../db/prisma/schema --config ../db/prisma cwd = "/app/src/systems/cargo/service" runner = "service" +[[databases]] +adapter = "postgres" +name = "cargo-test" + +[[databases]] +adapter = "postgres" +name = "voyager" + +[[databases]] +adapter = "postgres" +name = "voyager-search" + [env] -DATABASE_URL = "postgresql://cargo:cargo@$deps.postgres.5432/cargo-test" +DATABASE_URL = "$db.cargo-test.url" REDIS_URL = "redis://$deps.redis.6379/0" OBJECT_STORAGE_URL = "http://$deps.object-store.52010" VOYAGER_URL = "http://$deps.voyager.52060/metorial-voyager" @@ -30,7 +42,6 @@ METORIAL_ENV = "development" [[deps]] name = "postgres" preset = "postgres" -init = "init-test-db.sh" [deps.env] POSTGRES_USER = "cargo" diff --git a/src/systems/cargo/service/dev.Dockerfile b/src/systems/cargo/service/dev.Dockerfile deleted file mode 100644 index 777ffeae9..000000000 --- a/src/systems/cargo/service/dev.Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -# Copy OSS workspace files -COPY . . - -# Install dependencies and build workspace clients used at runtime -RUN sh ./src/systems/cargo/scripts/prepare-docker-build.sh - -WORKDIR /app/src/systems/cargo/service - -# Run in dev mode with hot reloading -CMD ["sh", "-c", "bun prisma generate --schema ../db/prisma/schema --config ../db/prisma.config.ts && bun prisma db push --accept-data-loss --schema ../db/prisma/schema --config ../db/prisma.config.ts && bun --watch src/server.ts"] diff --git a/src/systems/cargo/service/docker-compose.dev.yml b/src/systems/cargo/service/docker-compose.dev.yml deleted file mode 100644 index cc9aea78f..000000000 --- a/src/systems/cargo/service/docker-compose.dev.yml +++ /dev/null @@ -1,151 +0,0 @@ -services: - postgres: - profiles: ['infra'] - image: postgres:16-alpine - container_name: cargo-postgres - restart: unless-stopped - ports: - - '65432:5432' - environment: - POSTGRES_USER: cargo - POSTGRES_PASSWORD: cargo - POSTGRES_DB: cargo - volumes: - - postgres_data:/var/lib/postgresql/data - - ./init-test-db.sh:/docker-entrypoint-initdb.d/init-test-db.sh - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U cargo'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - cargo-network - - redis: - profiles: ['infra'] - image: redis:7-alpine - container_name: cargo-redis - restart: unless-stopped - ports: - - '56379:6379' - networks: - - cargo-network - healthcheck: - test: ['CMD', 'redis-cli', 'ping'] - interval: 5s - timeout: 5s - retries: 10 - - object-storage: - profiles: ['infra'] - image: ghcr.io/metorial/object-storage:latest - container_name: cargo-object-storage - restart: unless-stopped - ports: - - '65010:52010' - volumes: - - object-store-data:/app/data - environment: - RUST_LOG: info - AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID:-test} - AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY:-test} - AWS_REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__SERVER__HOST: 0.0.0.0 - OBJECT_STORE__SERVER__PORT: 52010 - OBJECT_STORE__BACKEND__TYPE: ${OBJECT_STORAGE_BACKEND_TYPE:-local} - OBJECT_STORE__BACKEND__ROOT_PATH: ${OBJECT_STORAGE_BACKEND_ROOT_PATH:-/app/data} - OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET:-cargo-local} - healthcheck: - test: ['CMD-SHELL', 'curl -f http://localhost:52010/health || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - cargo-network - - voyager: - profiles: ['infra'] - image: ghcr.io/metorial/voyager:latest - container_name: cargo-voyager - restart: unless-stopped - ports: - - '52060:52060' - environment: - DATABASE_URL: postgresql://cargo:cargo@postgres:5432/voyager - SEARCH_DATABASE_URL: postgresql://cargo:cargo@postgres:5432/voyager-search - REDIS_URL: redis://redis:6379/0 - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52060/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - cargo-network - - cargo: - profiles: ['service'] - build: - context: ../../../.. - dockerfile: src/systems/cargo/service/dev.Dockerfile - container_name: cargo-service - restart: unless-stopped - ports: - - '52150:52150' - - '52151:52151' - environment: - DATABASE_URL: ${DATABASE_URL:-postgresql://cargo:cargo@postgres:5432/cargo} - REDIS_URL: ${REDIS_URL:-redis://redis:6379/0} - VOYAGER_URL: ${VOYAGER_URL:-http://voyager:52060/metorial-voyager} - OBJECT_STORAGE_URL: ${OBJECT_STORAGE_URL:-http://object-storage:52010} - FILES_BUCKET_NAME: ${FILES_BUCKET_NAME:-mte-files} - DOWNLOAD_PUBLIC_URL: ${DOWNLOAD_PUBLIC_URL:-http://localhost:52151} - API_URL: ${API_URL:-http://localhost:52150} - SIGNED_DOWNLOAD_URL_TOKEN_SECRET: ${SIGNED_DOWNLOAD_URL_TOKEN_SECRET:-cargo-download-test-secret} - CARGO_REGION: ${CARGO_REGION:-local} - CARGO_API_PORT: ${CARGO_API_PORT:-52150} - CARGO_CONTENT_PORT: ${CARGO_CONTENT_PORT:-52151} - CARGO_HEALTH_PORT: ${CARGO_HEALTH_PORT:-12121} - ORIGIN_URL: ${ORIGIN_URL:-http://origin:52090/metorial-origin} - CODE_BUCKET_SERVICE_URL: ${CODE_BUCKET_SERVICE_URL:-code-bucket:5050} - volumes: - - ./src:/app/src/systems/cargo/service/src:ro - - ./package.json:/app/src/systems/cargo/service/package.json:ro - - ./tsconfig.json:/app/src/systems/cargo/service/tsconfig.json:ro - - ../db:/app/src/systems/cargo/db - - ../modules:/app/src/systems/cargo/modules:ro - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - voyager: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52151/ping').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - cargo-network - -volumes: - postgres_data: - driver: local - object-store-data: - driver: local - -networks: - cargo-network: - driver: bridge diff --git a/src/systems/cargo/service/init-test-db.sh b/src/systems/cargo/service/init-test-db.sh deleted file mode 100644 index b4b05f2a0..000000000 --- a/src/systems/cargo/service/init-test-db.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eu - -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL - CREATE DATABASE "cargo-test"; - CREATE DATABASE "voyager"; - CREATE DATABASE "voyager-search"; -EOSQL diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index e128a1476..dc80c12e8 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -14,10 +14,6 @@ "dev": "bun --watch ./src/server.ts", "worker:dev": "bun --watch ./src/worker.ts", "enterprise:dev": "bun run dev", - "dev:docker": "docker compose -p cargo -f ./docker-compose.dev.yml --profile infra --profile service up -d --pull always --build", - "infra:up": "docker compose -p cargo -f ./docker-compose.dev.yml --profile infra up -d --pull always", - "infra:down": "docker compose -p cargo -f ./docker-compose.dev.yml --profile infra down", - "infra:logs": "docker compose -p cargo -f ./docker-compose.dev.yml --profile infra logs -f", "prisma:generate": "bun run db:generate", "prisma:push": "bun run db:push:dev", "db:generate": "cd ../db && bun run prisma:generate", diff --git a/src/systems/forge/scripts/prepare-docker-build.sh b/src/systems/forge/scripts/prepare-docker-build.sh new file mode 100755 index 000000000..24f71342a --- /dev/null +++ b/src/systems/forge/scripts/prepare-docker-build.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -eu + +cd /app + +bun install --linker=hoisted diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index ae0ed8446..57ef0816a 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -12,14 +12,17 @@ COPY . . # Install CA certificates for Sentry CLI uploads RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -# Install dependencies from the OSS workspace -RUN bun install --linker=hoisted +RUN sh ./src/systems/forge/scripts/prepare-docker-build.sh # Generate Prisma client and build the service from the monorepo path WORKDIR /app/src/systems/forge/service RUN bun prisma generate RUN bun run server:build +FROM builder AS workspace +WORKDIR /app/src/systems/forge/service +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner diff --git a/src/systems/forge/service/control.toml b/src/systems/forge/service/control.toml index 65b7491c3..bab23b3c0 100644 --- a/src/systems/forge/service/control.toml +++ b/src/systems/forge/service/control.toml @@ -3,21 +3,25 @@ name = "forge" [service] port = 52020 -dockerfile = "dev.Dockerfile" -build_context = "." +dockerfile = "src/systems/forge/service/Dockerfile" +build_context = "oss" [test.e2e] command = "bun run test" setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] -cwd = "/app" +cwd = "/app/src/systems/forge/service" runner = "service" [test.unit] command = "bun run test" -cwd = "/app" +cwd = "/app/src/systems/forge/service" + +[[databases]] +adapter = "postgres" +name = "forge-test" [env] -DATABASE_URL = "postgresql://forge:forge@$deps.postgres.5432/forge-test" +DATABASE_URL = "$db.forge-test.url" REDIS_URL = "redis://$deps.redis.6379/0" OBJECT_STORAGE_URL = "http://$deps.object-store.52010" ARTIFACT_BUCKET_NAME = "artifacts-test" @@ -29,7 +33,6 @@ CODE_BUILD_AWS_REGION = "us-east-1" [[deps]] name = "postgres" preset = "postgres" -init = "init-test-db.sh" [deps.env] POSTGRES_USER = "forge" diff --git a/src/systems/forge/service/dev.Dockerfile b/src/systems/forge/service/dev.Dockerfile deleted file mode 100644 index 7582ae366..000000000 --- a/src/systems/forge/service/dev.Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -# Copy package files -COPY package.json bun.lock* ./ - -# Install dependencies -RUN bun install - -# Copy source code -COPY . . - -# Expose port -EXPOSE 52020 - -# Run in dev mode with hot reloading -CMD ["sh", "-c", "bun prisma generate && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/forge/service/docker-compose.dev.yml b/src/systems/forge/service/docker-compose.dev.yml deleted file mode 100644 index b9dc9aa84..000000000 --- a/src/systems/forge/service/docker-compose.dev.yml +++ /dev/null @@ -1,123 +0,0 @@ -services: - postgres: - profiles: ['infra'] - image: postgres:16-alpine - container_name: forge-postgres - restart: unless-stopped - ports: - - '55432:5432' - environment: - POSTGRES_USER: forge - POSTGRES_PASSWORD: forge - POSTGRES_DB: forge - volumes: - - postgres_data:/var/lib/postgresql/data - - ./init-test-db.sh:/docker-entrypoint-initdb.d/init-test-db.sh - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U forge'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - forge-network - - redis: - profiles: ['infra'] - image: redis:7-alpine - container_name: forge-redis - restart: unless-stopped - ports: - - '56379:6379' - healthcheck: - test: ['CMD', 'redis-cli', 'ping'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - forge-network - - object-storage: - profiles: ['infra'] - image: ghcr.io/metorial/object-storage:latest - container_name: forge-object-storage - restart: unless-stopped - ports: - - '55010:52010' - volumes: - - object-store-data:/app/data - environment: - RUST_LOG: info - AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID:-test} - AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY:-test} - AWS_REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__SERVER__HOST: 0.0.0.0 - OBJECT_STORE__SERVER__PORT: 52010 - OBJECT_STORE__BACKEND__TYPE: ${OBJECT_STORAGE_BACKEND_TYPE:-local} - OBJECT_STORE__BACKEND__ROOT_PATH: ${OBJECT_STORAGE_BACKEND_ROOT_PATH:-/app/data} - OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET:-forge-local} - healthcheck: - test: ['CMD-SHELL', 'curl -f http://localhost:52010/health || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - forge-network - - forge: - profiles: ['service'] - build: - context: . - dockerfile: dev.Dockerfile - container_name: forge-service - restart: unless-stopped - ports: - - '55020:52020' - environment: - DATABASE_URL: ${DATABASE_URL:-postgresql://forge:forge@postgres:5432/forge} - REDIS_URL: ${REDIS_URL:-redis://redis:6379/0} - - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - DEFAULT_PROVIDER: ${DEFAULT_PROVIDER:-aws.code-build} - - OBJECT_STORAGE_URL: ${OBJECT_STORAGE_URL:-http://object-storage:52010} - LOG_BUCKET_NAME: ${LOG_BUCKET_NAME:-logs} - ARTIFACT_BUCKET_NAME: ${ARTIFACT_BUCKET_NAME:-artifacts} - - CODE_BUILD_AWS_REGION: ${CODE_BUILD_AWS_REGION:-us-east-1} - CODE_BUILD_AWS_ACCESS_KEY_ID: ${CODE_BUILD_AWS_ACCESS_KEY_ID:-test} - CODE_BUILD_AWS_SECRET_ACCESS_KEY: ${CODE_BUILD_AWS_SECRET_ACCESS_KEY:-test} - CODE_BUILD_PROJECT_NAME: ${CODE_BUILD_PROJECT_NAME:-} - CODE_BUILD_ROLE_ARN: ${CODE_BUILD_ROLE_ARN:-} - volumes: - - ./src:/app/src:ro - - ./package.json:/app/package.json:ro - - ./tsconfig.json:/app/tsconfig.json:ro - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52020/').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - forge-network - -volumes: - postgres_data: - driver: local - object-store-data: - driver: local - -networks: - forge-network: - driver: bridge diff --git a/src/systems/forge/service/init-test-db.sh b/src/systems/forge/service/init-test-db.sh deleted file mode 100755 index a25698aca..000000000 --- a/src/systems/forge/service/init-test-db.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -set -e - -# Create databases for CI/local-compose services if they don't exist -dbs="forge-test" -for db in $dbs; do - exists=$(psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -tAc "SELECT 1 FROM pg_database WHERE datname='${db}'") - if [ "$exists" != "1" ]; then - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -c "CREATE DATABASE \"${db}\";" - fi -done - -echo "Database initialization complete" diff --git a/src/systems/forge/service/package.json b/src/systems/forge/service/package.json index a278e711c..c83e7ab88 100644 --- a/src/systems/forge/service/package.json +++ b/src/systems/forge/service/package.json @@ -13,10 +13,6 @@ "enterprise:dev": "bun run dev", "prisma:generate": "bun run db:generate", "prisma:push": "bun run db:push:dev", - "dev:docker": "docker compose -p forge -f ./docker-compose.dev.yml --profile infra --profile service up -d --pull always --build", - "infra:up": "docker compose -p forge -f ./docker-compose.dev.yml --profile infra up -d --pull always", - "infra:down": "docker compose -p forge -f ./docker-compose.dev.yml --profile infra down", - "infra:logs": "docker compose -p forge -f ./docker-compose.dev.yml --profile infra logs -f", "db:generate": "bun prisma generate", "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --accept-data-loss'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 1bfeb22b4..e7e82792c 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -18,6 +18,10 @@ WORKDIR /app/src/systems/function-bay/service RUN bun prisma generate RUN bun run server:build +FROM builder AS workspace +WORKDIR /app/src/systems/function-bay/service +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner diff --git a/src/systems/function-bay/service/control.toml b/src/systems/function-bay/service/control.toml index d7a34a0c5..15ef0d185 100644 --- a/src/systems/function-bay/service/control.toml +++ b/src/systems/function-bay/service/control.toml @@ -3,7 +3,7 @@ name = "function-bay" [service] port = 52030 -dockerfile = "src/systems/function-bay/service/dev.Dockerfile" +dockerfile = "src/systems/function-bay/service/Dockerfile" build_context = "oss" [test.e2e] @@ -12,8 +12,12 @@ setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] cwd = "/app/src/systems/function-bay/service" runner = "service" +[[databases]] +adapter = "postgres" +name = "function-bay-test" + [env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/function-bay-test" +DATABASE_URL = "$db.function-bay-test.url" REDIS_URL = "redis://$deps.redis.6379/0" OBJECT_STORAGE_URL = "http://$deps.object-store.52010" BUNDLE_BUCKET_NAME = "bundles" @@ -25,7 +29,6 @@ LAMBDA_AWS_REGION = "us-east-1" [[deps]] name = "postgres" preset = "postgres" -init = "init-test-db.sh" [deps.env] POSTGRES_USER = "postgres" @@ -44,13 +47,3 @@ mock = "object-store" name = "forge" control = "../../forge/service" scope = "service" - -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/forge" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -ARTIFACT_BUCKET_NAME = "artifacts-test" -LOG_BUCKET_NAME = "logs-test" -ENCRYPTION_KEY = "test-encryption-key-32-bytes!!" -DEFAULT_PROVIDER = "aws.code-build" -CODE_BUILD_AWS_REGION = "us-east-1" diff --git a/src/systems/function-bay/service/dev.Dockerfile b/src/systems/function-bay/service/dev.Dockerfile deleted file mode 100644 index 632eddf1f..000000000 --- a/src/systems/function-bay/service/dev.Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -RUN sh ./src/systems/function-bay/scripts/prepare-docker-build.sh - -# Run in dev mode with hot reloading -CMD ["sh", "-c", "cd /app/src/systems/function-bay/service && bun prisma generate && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/function-bay/service/docker-compose.dev.yml b/src/systems/function-bay/service/docker-compose.dev.yml deleted file mode 100644 index 948517fb7..000000000 --- a/src/systems/function-bay/service/docker-compose.dev.yml +++ /dev/null @@ -1,160 +0,0 @@ -services: - postgres: - profiles: ['infra'] - image: postgres:16-alpine - container_name: function-bay-postgres - restart: unless-stopped - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: function-bay - volumes: - - postgres_data:/var/lib/postgresql/data - - ./init-test-db.sh:/docker-entrypoint-initdb.d/init-test-db.sh - ports: - - '45432:5432' - networks: - - function-bay-network - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U postgres'] - interval: 5s - timeout: 5s - retries: 10 - - redis: - profiles: ['infra'] - image: redis:7-alpine - container_name: function-bay-redis - restart: unless-stopped - ports: - - '46379:6379' - networks: - - function-bay-network - healthcheck: - test: ['CMD', 'redis-cli', 'ping'] - interval: 5s - timeout: 5s - retries: 10 - - object-storage: - profiles: ['infra'] - image: ghcr.io/metorial/object-storage:latest - container_name: function-bay-object-storage - restart: unless-stopped - volumes: - - object-store-data:/app/data - environment: - RUST_LOG: info - - OBJECT_STORE__SERVER__HOST: 0.0.0.0 - OBJECT_STORE__SERVER__PORT: 52010 - OBJECT_STORE__BACKEND__TYPE: ${OBJECT_STORAGE_BACKEND_TYPE:-local} - OBJECT_STORE__BACKEND__ROOT_PATH: ${OBJECT_STORAGE_BACKEND_ROOT_PATH:-/app/data} - OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET:-function-bay-local} - AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID:-test} - AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY:-test} - AWS_REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - ports: - - '45010:52010' - networks: - - function-bay-network - healthcheck: - test: ['CMD-SHELL', 'curl -f http://localhost:52010/health || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - - forge: - profiles: ['infra'] - image: ghcr.io/metorial/forge:latest - container_name: function-bay-forge - restart: unless-stopped - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/forge - REDIS_URL: redis://redis:6379/0 - - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - DEFAULT_PROVIDER: aws.code-build - - OBJECT_STORAGE_URL: http://object-storage:52010 - LOG_BUCKET_NAME: logs - ARTIFACT_BUCKET_NAME: artifacts - - CODE_BUILD_AWS_REGION: ${CODE_BUILD_AWS_REGION:-us-east-1} - CODE_BUILD_AWS_ACCESS_KEY_ID: ${CODE_BUILD_AWS_ACCESS_KEY_ID:-test} - CODE_BUILD_AWS_SECRET_ACCESS_KEY: ${CODE_BUILD_AWS_SECRET_ACCESS_KEY:-test} - CODE_BUILD_PROJECT_NAME: ${CODE_BUILD_PROJECT_NAME:-} - CODE_BUILD_ROLE_ARN: ${CODE_BUILD_ROLE_ARN:-} - ports: - - '45021:52020' - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52020/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - function-bay-network - - function-bay: - profiles: ['service'] - build: - context: ../../../.. - dockerfile: ./src/systems/function-bay/service/dev.Dockerfile - container_name: function-bay-service - restart: unless-stopped - ports: - - '45030:52030' - environment: - DATABASE_URL: ${DATABASE_URL} - REDIS_URL: ${REDIS_URL} - - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - DEFAULT_PROVIDER: ${DEFAULT_PROVIDER:-aws.lambda} - - OBJECT_STORAGE_URL: ${OBJECT_STORAGE_URL} - BUNDLE_BUCKET_NAME: ${BUNDLE_BUCKET_NAME} - - FORGE_API_URL: ${FORGE_API_URL} - - LAMBDA_AWS_REGION: ${LAMBDA_AWS_REGION:-us-east-1} - LAMBDA_AWS_ACCESS_KEY_ID: ${LAMBDA_AWS_ACCESS_KEY_ID:-test} - LAMBDA_AWS_SECRET_ACCESS_KEY: ${LAMBDA_AWS_SECRET_ACCESS_KEY:-test} - LAMBDA_ROLE_ARN: ${LAMBDA_ROLE_ARN:-} - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - forge: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52030/').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - function-bay-network - -volumes: - postgres_data: - driver: local - object-store-data: - driver: local - -networks: - function-bay-network: - driver: bridge diff --git a/src/systems/function-bay/service/init-test-db.sh b/src/systems/function-bay/service/init-test-db.sh deleted file mode 100755 index 83f669a80..000000000 --- a/src/systems/function-bay/service/init-test-db.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -e -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL - CREATE DATABASE "function-bay-test"; - CREATE DATABASE "forge"; -EOSQL diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index 3a8e8d93d..93746456a 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -5,14 +5,12 @@ "private": true, "scripts": { "start": "bun run server:start", - "server:build": "ncc build ./src/server.ts -o ./dist --source-map --transpile-only && bun run sentry:sourcemaps", + "server:build": "ncc build ./src/server.ts -o ./dist --source-map --transpile-only && bun run sentry:sourcemaps:if-token", "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-function-bay ./dist && sentry-cli sourcemaps upload --org metorial --project mte-function-bay ./dist", + "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", "server:start": "bun ./dist/index.js", "dev": "bun --watch ./src/server.ts", "enterprise:dev": "bun run dev", - "infra:up": "docker compose -p function-bay -f ./docker-compose.dev.yml --profile infra up -d --pull always", - "infra:down": "docker compose -p function-bay -f ./docker-compose.dev.yml --profile infra down", - "infra:logs": "docker compose -p function-bay -f ./docker-compose.dev.yml --profile infra logs -f", "prisma:generate": "bun prisma generate", "prisma:push": "bun run db:push:dev", "db:generate": "bun prisma generate", diff --git a/src/systems/origin/apps/code-bucket/Dockerfile b/src/systems/origin/apps/code-bucket/Dockerfile index 046c97b74..0408c1108 100644 --- a/src/systems/origin/apps/code-bucket/Dockerfile +++ b/src/systems/origin/apps/code-bucket/Dockerfile @@ -47,7 +47,7 @@ COPY --from=workspace-builder /workspace/dist ./pkg/workspace/dist RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o code-bucket ./cmd/server # Stage 3: Final minimal image -FROM alpine:latest +FROM alpine:latest AS runner RUN apk --no-cache add ca-certificates tzdata netcat-openbsd diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index b1ccdf920..24e0c1488 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -20,6 +20,10 @@ RUN mkdir -p ./node_modules/@metorial/code-bucket-service-generated && \ RUN bunx prisma generate RUN bun run server:build +FROM builder AS workspace +WORKDIR /app/src/systems/origin/apps/service +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner diff --git a/src/systems/origin/apps/service/control.toml b/src/systems/origin/apps/service/control.toml index 87f5b6343..b5cb915ad 100644 --- a/src/systems/origin/apps/service/control.toml +++ b/src/systems/origin/apps/service/control.toml @@ -3,12 +3,16 @@ name = "origin" [service] port = 52090 -dockerfile = "src/systems/origin/apps/service/dev.Dockerfile" +dockerfile = "src/systems/origin/apps/service/Dockerfile" build_context = "oss" health = { path = "/ping" } +[[databases]] +adapter = "postgres" +name = "origin" + [env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/origin" +DATABASE_URL = "$db.origin.url" REDIS_URL = "redis://$deps.redis.6379/0" ORIGIN_SERVICE_PUBLIC_URL = "http://origin:52093" OBJECT_STORAGE_URL = "http://$deps.object-store.52010" @@ -43,12 +47,3 @@ mock = "object-store" name = "code-bucket" control = "../code-bucket" scope = "service" - -[deps.env] -CODE_BUCKET_JWT_SECRET = "dev-secret-change-in-production" -CODE_BUCKET_OBJECT_STORAGE_BUCKET = "code-bucket" -CODE_BUCKET_OBJECT_STORAGE_ENDPOINT = "http://$deps.object-store.52010" -CODE_BUCKET_REDIS_URL = "redis://$deps.redis.6379" -CODE_BUCKET_HTTP_ADDRESS = ":52091" -CODE_BUCKET_WORKSPACE_ADDRESS = ":52092" -CODE_BUCKET_RPC_ADDRESS = ":5050" diff --git a/src/systems/origin/apps/service/dev.Dockerfile b/src/systems/origin/apps/service/dev.Dockerfile deleted file mode 100644 index 388cbf403..000000000 --- a/src/systems/origin/apps/service/dev.Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -COPY . . - -RUN sh ./src/systems/origin/scripts/prepare-docker-build.sh - -WORKDIR /app/src/systems/origin/apps/service - -RUN mkdir -p ./node_modules/@metorial/code-bucket-service-generated && \ - cp ../code-bucket/package.json ../code-bucket/index.ts ./node_modules/@metorial/code-bucket-service-generated/ && \ - cp -r ../code-bucket/ts-proto-gen ./node_modules/@metorial/code-bucket-service-generated/ts-proto-gen - -CMD ["sh", "-c", "bunx prisma generate && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/origin/docker-compose.dev.yml b/src/systems/origin/docker-compose.dev.yml deleted file mode 100644 index bc482343f..000000000 --- a/src/systems/origin/docker-compose.dev.yml +++ /dev/null @@ -1,114 +0,0 @@ -version: '3.8' - -services: - postgres: - image: postgres:16-alpine - container_name: origin2-postgres - restart: unless-stopped - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: postgres - volumes: - - postgres_data:/var/lib/postgresql/data - networks: - - origin-network - - redis: - image: redis:7-alpine - container_name: origin2-redis - restart: unless-stopped - networks: - - origin-network - - object-storage: - image: ghcr.io/metorial/object-storage:latest - volumes: - - object-store-data:/app/data - environment: - RUST_LOG: info - AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY} - AWS_REGION: ${OBJECT_STORAGE_AWS_REGION} - - OBJECT_STORE__SERVER__HOST: 0.0.0.0 - OBJECT_STORE__SERVER__PORT: 52010 - OBJECT_STORE__BACKEND__TYPE: s3 - OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION} - OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET} - - container_name: origin2-object-storage - restart: unless-stopped - ports: - - '52010:52010' - networks: - - origin-network - - service: - build: - context: ./apps - dockerfile: ./service/Dockerfile.dev - container_name: origin2-service - restart: unless-stopped - ports: - - '52090:52090' # Origin API - - '52093:52093' # SCM Controller - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/postgres - REDIS_URL: redis://redis:6379/0 - ORIGIN_SERVICE_PUBLIC_URL: http://localhost:52093 - OBJECT_STORAGE_URL: http://object-storage:52010 - CODE_BUCKET_OBJECT_STORAGE_BUCKET: code-bucket - CODE_BUCKET_SERVICE_URL: code-bucket:5050 - CODE_BUCKET_EDITOR_URL: ${CODE_BUCKET_EDITOR_URL:-http://localhost:52092} - SCM_GITHUB_APP_ID: ${SCM_GITHUB_APP_ID} - SCM_GITHUB_APP_PRIVATE_KEY_BASE_64: ${SCM_GITHUB_APP_PRIVATE_KEY_BASE_64} - SCM_GITHUB_APP_CLIENT_ID: ${SCM_GITHUB_APP_CLIENT_ID} - SCM_GITHUB_APP_CLIENT_SECRET: ${SCM_GITHUB_APP_CLIENT_SECRET} - SCM_GITHUB_APP_SLUG: ${SCM_GITHUB_APP_SLUG} - volumes: - - ./apps/service/src:/app/src:ro - - ./apps/service/prisma:/app/prisma:ro - - ./apps/service/prisma.config.ts:/app/prisma.config.ts:ro - - ./apps/code-bucket/index.ts:/app/node_modules/@metorial/code-bucket-service-generated/index.ts:ro - - ./apps/code-bucket/ts-proto-gen:/app/node_modules/@metorial/code-bucket-service-generated/ts-proto-gen:ro - depends_on: - - postgres - - redis - - code-bucket - networks: - - origin-network - - code-bucket: - build: - context: ./apps - dockerfile: ./code-bucket/Dockerfile - container_name: origin2-code-bucket - restart: unless-stopped - ports: - - '52091:52091' # HTTP API - - '52092:52092' # VSCode Workspace - environment: - CODE_BUCKET_JWT_SECRET: dev-secret-change-in-production - CODE_BUCKET_OBJECT_STORAGE_BUCKET: code-bucket - CODE_BUCKET_OBJECT_STORAGE_ENDPOINT: http://object-storage:52010 - CODE_BUCKET_REDIS_URL: redis://redis:6379 - CODE_BUCKET_HTTP_ADDRESS: ':52091' - CODE_BUCKET_WORKSPACE_ADDRESS: ':52092' - CODE_BUCKET_RPC_ADDRESS: ':5050' - CODE_BUCKET_EDITOR_API_URL: ${CODE_BUCKET_EDITOR_API_URL:-http://localhost:52091} - depends_on: - - redis - - object-storage - networks: - - origin-network - -volumes: - postgres_data: - driver: local - object-store-data: - driver: local - -networks: - origin-network: - driver: bridge diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index 61cd54783..f9917ae28 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -18,6 +18,10 @@ WORKDIR /app/src/systems/shuttle/service RUN bun prisma generate RUN bun run server:build +FROM builder AS workspace +WORKDIR /app/src/systems/shuttle/service +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner diff --git a/src/systems/shuttle/service/control.toml b/src/systems/shuttle/service/control.toml index 2d2169a23..9e8c35a19 100644 --- a/src/systems/shuttle/service/control.toml +++ b/src/systems/shuttle/service/control.toml @@ -3,7 +3,7 @@ name = "shuttle" [service] port = 52080 -dockerfile = "src/systems/shuttle/service/dev.Dockerfile" +dockerfile = "src/systems/shuttle/service/Dockerfile" build_context = "oss" [test.e2e] @@ -16,8 +16,12 @@ runner = "service" command = "bun run test:unit" cwd = "/app/src/systems/shuttle/service" +[[databases]] +adapter = "postgres" +name = "shuttle-test" + [env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/shuttle-test" +DATABASE_URL = "$db.shuttle-test.url" REDIS_URL = "redis://$deps.redis.6379/0" PROVIDER_OAUTH_URL = "http://shuttle:52081" ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" @@ -37,7 +41,6 @@ OBJECT_STORAGE_BACKEND_ROOT_PATH = "/app/data" [[deps]] name = "postgres" preset = "postgres" -init = "init-test-db.sh" [deps.env] POSTGRES_USER = "postgres" @@ -57,26 +60,7 @@ name = "forge" control = "../../forge/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/forge" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" -DEFAULT_PROVIDER = "aws.code-build" -ARTIFACT_BUCKET_NAME = "artifacts" -LOG_BUCKET_NAME = "logs" - [[deps]] name = "function-bay" control = "../../function-bay/service" scope = "service" - -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/function-bay" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -BUNDLE_BUCKET_NAME = "bundles" -ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" -FORGE_API_URL = "http://$deps.forge.52020/metorial-forge" -DEFAULT_PROVIDER = "aws.lambda" -LAMBDA_AWS_REGION = "us-east-1" diff --git a/src/systems/shuttle/service/dev.Dockerfile b/src/systems/shuttle/service/dev.Dockerfile deleted file mode 100644 index 2f139971e..000000000 --- a/src/systems/shuttle/service/dev.Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -RUN sh ./src/systems/shuttle/scripts/prepare-docker-build.sh - -# Run in dev mode with hot reloading. Reinstall if the mounted node_modules -# volume is empty so local SDK workspace packages resolve during tests. -CMD ["sh", "-c", "cd /app && if [ ! -f /app/node_modules/@metorial/mcp-server/package.json ]; then bun install --linker=hoisted; fi && bunx turbo run --ui=stream build --filter=\"./src/systems/shuttle/sdk/packages/**\" && cd /app/src/systems/shuttle/service && bun prisma generate && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/shuttle/service/docker-compose.dev.yml b/src/systems/shuttle/service/docker-compose.dev.yml deleted file mode 100644 index 388d6c108..000000000 --- a/src/systems/shuttle/service/docker-compose.dev.yml +++ /dev/null @@ -1,197 +0,0 @@ -services: - postgres: - profiles: ['infra'] - image: postgres:16-alpine - container_name: shuttle-postgres - restart: unless-stopped - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: shuttle - volumes: - - postgres_data:/var/lib/postgresql/data - - ./init-test-db.sh:/docker-entrypoint-initdb.d/init-test-db.sh - ports: - - '35432:5432' - networks: - - shuttle-network - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U postgres'] - interval: 5s - timeout: 5s - retries: 10 - - redis: - profiles: ['infra'] - image: redis:7-alpine - container_name: shuttle-redis - restart: unless-stopped - ports: - - '36379:6379' - networks: - - shuttle-network - healthcheck: - test: ['CMD', 'redis-cli', 'ping'] - interval: 5s - timeout: 5s - retries: 10 - - object-storage: - profiles: ['infra'] - image: ghcr.io/metorial/object-storage:latest - container_name: shuttle-object-storage - restart: unless-stopped - volumes: - - object-store-data:/app/data - environment: - RUST_LOG: info - OBJECT_STORE__SERVER__HOST: 0.0.0.0 - OBJECT_STORE__SERVER__PORT: 52010 - OBJECT_STORE__BACKEND__TYPE: ${OBJECT_STORAGE_BACKEND_TYPE:-local} - OBJECT_STORE__BACKEND__ROOT_PATH: ${OBJECT_STORAGE_BACKEND_ROOT_PATH:-/app/data} - OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET:-shuttle-local} - AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID:-test} - AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY:-test} - AWS_REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - ports: - - '35010:52010' - networks: - - shuttle-network - healthcheck: - test: ['CMD-SHELL', 'curl -f http://localhost:52010/health || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - - forge: - profiles: ['infra'] - image: ghcr.io/metorial/forge:latest - container_name: shuttle-forge - restart: unless-stopped - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/forge - REDIS_URL: redis://redis:6379/0 - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - DEFAULT_PROVIDER: aws.code-build - OBJECT_STORAGE_URL: http://object-storage:52010 - LOG_BUCKET_NAME: logs - ARTIFACT_BUCKET_NAME: artifacts - CODE_BUILD_AWS_REGION: ${CODE_BUILD_AWS_REGION:-us-east-1} - CODE_BUILD_AWS_ACCESS_KEY_ID: ${CODE_BUILD_AWS_ACCESS_KEY_ID:-test} - CODE_BUILD_AWS_SECRET_ACCESS_KEY: ${CODE_BUILD_AWS_SECRET_ACCESS_KEY:-test} - CODE_BUILD_PROJECT_NAME: ${CODE_BUILD_PROJECT_NAME:-} - CODE_BUILD_ROLE_ARN: ${CODE_BUILD_ROLE_ARN:-} - ports: - - '35022:52020' - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52020/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - shuttle-network - - function-bay: - profiles: ['infra'] - image: ghcr.io/metorial/function-bay:latest - container_name: shuttle-function-bay - restart: unless-stopped - ports: - - '35030:52030' - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/function-bay - REDIS_URL: redis://redis:6379/0 - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - DEFAULT_PROVIDER: ${DEFAULT_PROVIDER:-aws.lambda} - OBJECT_STORAGE_URL: http://object-storage:52010 - BUNDLE_BUCKET_NAME: bundles - FORGE_API_URL: http://forge:52020/metorial-forge - LAMBDA_AWS_REGION: ${LAMBDA_AWS_REGION:-us-east-1} - LAMBDA_AWS_ACCESS_KEY_ID: ${LAMBDA_AWS_ACCESS_KEY_ID:-test} - LAMBDA_AWS_SECRET_ACCESS_KEY: ${LAMBDA_AWS_SECRET_ACCESS_KEY:-test} - LAMBDA_ROLE_ARN: ${LAMBDA_ROLE_ARN:-} - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - forge: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52030/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - shuttle-network - - shuttle: - profiles: ['service'] - build: - context: ../../../.. - dockerfile: ./src/systems/shuttle/service/dev.Dockerfile - container_name: shuttle-service - restart: unless-stopped - ports: - - '35080:52080' - - '35081:52081' - environment: - DATABASE_URL: ${DATABASE_URL} - REDIS_URL: ${REDIS_URL} - PROVIDER_OAUTH_URL: ${PROVIDER_OAUTH_URL} - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - HOLOPOD_HTTP_ENDPOINT: ${HOLOPOD_HTTP_ENDPOINT} - OBJECT_STORAGE_URL: ${OBJECT_STORAGE_URL} - LOGS_BUCKET_NAME: ${LOGS_BUCKET_NAME} - FUNCTION_BAY_API_URL: ${FUNCTION_BAY_API_URL} - FUNCTION_BAY_TENANT_IDENTIFIER: ${FUNCTION_BAY_TENANT_IDENTIFIER} - FUNCTION_BAY_DEFAULT_MEMORY_MB: ${FUNCTION_BAY_DEFAULT_MEMORY_MB} - FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS: ${FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS} - volumes: - - ./src:/app/src/systems/shuttle/service/src:ro - - ./package.json:/app/src/systems/shuttle/service/package.json:ro - - ./tsconfig.json:/app/src/systems/shuttle/service/tsconfig.json:ro - - ./prisma:/app/src/systems/shuttle/service/prisma - - ./prisma.config.ts:/app/src/systems/shuttle/service/prisma.config.ts:ro - - ../sdk:/app/src/systems/shuttle/sdk - - /app/node_modules - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - function-bay: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52080/').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - shuttle-network - -volumes: - postgres_data: - driver: local - object-store-data: - driver: local - -networks: - shuttle-network: - driver: bridge diff --git a/src/systems/shuttle/service/init-test-db.sh b/src/systems/shuttle/service/init-test-db.sh deleted file mode 100755 index 3ff5dee99..000000000 --- a/src/systems/shuttle/service/init-test-db.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -set -e - -# Create databases for CI/local-compose services if they don't exist -dbs="shuttle-test function-bay forge" -for db in $dbs; do - exists=$(psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -tAc "SELECT 1 FROM pg_database WHERE datname='${db}'") - if [ "$exists" != "1" ]; then - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -c "CREATE DATABASE \"${db}\";" - fi -done - -echo "Database initialization complete" diff --git a/src/systems/shuttle/service/package.json b/src/systems/shuttle/service/package.json index 94d7c7947..216b1b899 100644 --- a/src/systems/shuttle/service/package.json +++ b/src/systems/shuttle/service/package.json @@ -14,9 +14,6 @@ "enterprise:dev": "bun run dev", "prisma:generate": "bun run db:generate", "prisma:push": "bun run db:push:dev", - "infra:up": "docker compose -p shuttle -f ./docker-compose.dev.yml --profile infra up -d --pull always", - "infra:down": "docker compose -p shuttle -f ./docker-compose.dev.yml --profile infra down", - "infra:logs": "docker compose -p shuttle -f ./docker-compose.dev.yml --profile infra logs -f", "db:generate": "bun prisma generate", "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --accept-data-loss'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index d0a4c1686..6dcdc0010 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -18,6 +18,10 @@ WORKDIR /app/src/systems/signal/service RUN bun prisma generate RUN bun run server:build +FROM builder AS workspace +WORKDIR /app/src/systems/signal/service +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner diff --git a/src/systems/signal/service/control.toml b/src/systems/signal/service/control.toml index 76633c472..ff21d1532 100644 --- a/src/systems/signal/service/control.toml +++ b/src/systems/signal/service/control.toml @@ -3,17 +3,21 @@ name = "signal" [service] port = 52050 -dockerfile = "dev.Dockerfile" -build_context = "." +dockerfile = "src/systems/signal/service/Dockerfile" +build_context = "oss" [test.e2e] command = "bun run test" setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] -cwd = "/app/service" +cwd = "/app/src/systems/signal/service" runner = "service" +[[databases]] +adapter = "postgres" +name = "signal-test" + [env] -DATABASE_URL = "postgresql://signal:signal@$deps.postgres.5432/signal-test" +DATABASE_URL = "$db.signal-test.url" REDIS_URL = "redis://$deps.redis.6379/0" OBJECT_STORAGE_URL = "http://$deps.object-store.52010" LOGS_BUCKET_NAME = "bundles-test" @@ -21,7 +25,6 @@ LOGS_BUCKET_NAME = "bundles-test" [[deps]] name = "postgres" preset = "postgres" -init = "init-test-db.sh" [deps.env] POSTGRES_USER = "signal" diff --git a/src/systems/signal/service/dev.Dockerfile b/src/systems/signal/service/dev.Dockerfile deleted file mode 100644 index f0cbae190..000000000 --- a/src/systems/signal/service/dev.Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app/service - -# Copy package files -COPY package.json bun.lock* ./ - -# Install dependencies -RUN bun install - -# Copy source code -COPY . . - -# Run in dev mode with hot reloading -CMD ["sh", "-c", "bun prisma generate && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/signal/service/docker-compose.dev.yml b/src/systems/signal/service/docker-compose.dev.yml deleted file mode 100644 index 3744e014a..000000000 --- a/src/systems/signal/service/docker-compose.dev.yml +++ /dev/null @@ -1,112 +0,0 @@ -services: - postgres: - profiles: ['infra'] - image: postgres:16-alpine - container_name: signal-postgres - restart: unless-stopped - environment: - POSTGRES_USER: signal - POSTGRES_PASSWORD: signal - POSTGRES_DB: signal - volumes: - - postgres_data:/var/lib/postgresql/data - - ./init-test-db.sh:/docker-entrypoint-initdb.d/init-test-db.sh - ports: - - '25432:5432' - networks: - - signal-network - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U signal'] - interval: 5s - timeout: 5s - retries: 10 - - redis: - profiles: ['infra'] - image: redis:7-alpine - container_name: signal-redis - restart: unless-stopped - ports: - - '26379:6379' - networks: - - signal-network - healthcheck: - test: ['CMD', 'redis-cli', 'ping'] - interval: 5s - timeout: 5s - retries: 10 - - object-storage: - profiles: ['infra'] - image: ghcr.io/metorial/object-storage:latest - container_name: signal-object-storage - restart: unless-stopped - volumes: - - object-store-data:/app/data - environment: - RUST_LOG: info - OBJECT_STORE__SERVER__HOST: 0.0.0.0 - OBJECT_STORE__SERVER__PORT: 52010 - OBJECT_STORE__BACKEND__TYPE: ${OBJECT_STORAGE_BACKEND_TYPE:-local} - OBJECT_STORE__BACKEND__ROOT_PATH: ${OBJECT_STORAGE_BACKEND_ROOT_PATH:-/app/data} - OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET:-signal-local} - AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID:-test} - AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY:-test} - AWS_REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - ports: - - '25010:52010' - networks: - - signal-network - healthcheck: - test: ['CMD-SHELL', 'curl -f http://localhost:52010/health || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - - signal: - profiles: ['service'] - build: - context: . - dockerfile: dev.Dockerfile - container_name: signal-service - restart: unless-stopped - ports: - - '25050:52050' - environment: - DATABASE_URL: ${DATABASE_URL} - REDIS_URL: ${REDIS_URL} - OBJECT_STORAGE_URL: ${OBJECT_STORAGE_URL} - LOGS_BUCKET_NAME: ${LOGS_BUCKET_NAME} - volumes: - - ./src:/app/service/src:ro - - ./package.json:/app/service/package.json:ro - - ./tsconfig.json:/app/service/tsconfig.json:ro - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52050/').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - signal-network - -volumes: - postgres_data: - driver: local - object-store-data: - driver: local - -networks: - signal-network: - driver: bridge diff --git a/src/systems/signal/service/init-test-db.sh b/src/systems/signal/service/init-test-db.sh deleted file mode 100755 index ce71e9b4c..000000000 --- a/src/systems/signal/service/init-test-db.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -set -e - -# Create databases for CI/local-compose services if they don't exist -dbs="signal-test" -for db in $dbs; do - exists=$(psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -tAc "SELECT 1 FROM pg_database WHERE datname='${db}'") - if [ "$exists" != "1" ]; then - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -c "CREATE DATABASE \"${db}\";" - fi -done - -echo "Database initialization complete" diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index 13d5b4223..172163a7f 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -7,12 +7,10 @@ "start": "bun run server:start", "dev": "bun --watch ./src/server.ts", "enterprise:dev": "bun run dev", - "server:build": "ncc build ./src/server.ts -o ./dist --source-map --transpile-only && bun run sentry:sourcemaps", + "server:build": "ncc build ./src/server.ts -o ./dist --source-map --transpile-only && bun run sentry:sourcemaps:if-token", "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-signal ./dist && sentry-cli sourcemaps upload --org metorial --project mte-signal ./dist", + "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", "server:start": "bun ./dist/index.js", - "infra:up": "docker compose -p signal -f ./docker-compose.dev.yml --profile infra up -d --pull always", - "infra:down": "docker compose -p signal -f ./docker-compose.dev.yml --profile infra down", - "infra:logs": "docker compose -p signal -f ./docker-compose.dev.yml --profile infra logs -f", "prisma:generate": "bun run db:generate", "prisma:push": "bun run db:push:dev", "db:generate": "bun prisma generate", diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index 819bc8235..951b717d5 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -19,6 +19,10 @@ RUN bun prisma generate RUN bun run admin:build RUN bun run server:build +FROM builder AS workspace +WORKDIR /app/src/systems/slates/apps/hub +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml index 8958141f4..5f3e6af11 100644 --- a/src/systems/slates/apps/hub/control.toml +++ b/src/systems/slates/apps/hub/control.toml @@ -3,7 +3,7 @@ name = "slates-hub" [service] port = 52045 -dockerfile = "src/systems/slates/apps/hub/dev.Dockerfile" +dockerfile = "src/systems/slates/apps/hub/Dockerfile" build_context = "oss" [test.e2e] @@ -12,8 +12,12 @@ setup = ["bun prisma generate --schema prisma/schema", "bun prisma db push --acc cwd = "/app/src/systems/slates/apps/hub" runner = "service" +[[databases]] +adapter = "postgres" +name = "slates-hub-test" + [env] -DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/slates-hub-test" +DATABASE_URL = "$db.slates-hub-test.url" REDIS_URL = "redis://$deps.redis.6379/0" METORIAL_ENV = "development" ENCRYPTION_KEY = "sTrG+z8ewVo7JJsgmv39UL/YDdgxlHSVhVPJOV7Omdg" @@ -32,7 +36,6 @@ SERVICE_PUBLIC_URL = "http://slates-hub:52045" [[deps]] name = "postgres" preset = "postgres" -init = "init-test-db.sh" [deps.env] POSTGRES_USER = "slates-hub" @@ -52,50 +55,17 @@ name = "forge" control = "../../../forge/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/forge" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -ENCRYPTION_KEY = "sTrG+z8ewVo7JJsgmv39UL/YDdgxlHSVhVPJOV7Omdg" -DEFAULT_PROVIDER = "aws.code-build" -ARTIFACT_BUCKET_NAME = "artifacts" -LOG_BUCKET_NAME = "logs" - [[deps]] name = "function-bay" control = "../../../function-bay/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/function-bay" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -BUNDLE_BUCKET_NAME = "bundles" -ENCRYPTION_KEY = "sTrG+z8ewVo7JJsgmv39UL/YDdgxlHSVhVPJOV7Omdg" -FORGE_API_URL = "http://$deps.forge.52020/metorial-forge" -DEFAULT_PROVIDER = "aws.lambda" -LAMBDA_AWS_REGION = "us-east-1" - [[deps]] name = "signal" control = "../../../signal/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/signal" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -LOGS_BUCKET_NAME = "bundles" - [[deps]] name = "slates-registry" control = "../registry" scope = "service" - -[deps.env] -DATABASE_URL = "postgresql://slates-hub:slates-hub@$deps.postgres.5432/slates-registry" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -PACKAGE_BUCKET_NAME = "slates-hub-packages" -SERVICE_PUBLIC_URL = "http://slates-registry:52040" -PUBLIC_ACCESS_PERMITTED = "true" diff --git a/src/systems/slates/apps/hub/dev.Dockerfile b/src/systems/slates/apps/hub/dev.Dockerfile deleted file mode 100644 index 7acb722d2..000000000 --- a/src/systems/slates/apps/hub/dev.Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -RUN sh ./src/systems/slates/scripts/prepare-docker-build.sh - -# Build admin frontend and run in dev mode with hot reloading -CMD ["sh", "-c", "cd /app/src/systems/slates/apps/hub && bun run admin:build && bun prisma generate && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/slates/apps/hub/docker-compose.dev.yml b/src/systems/slates/apps/hub/docker-compose.dev.yml deleted file mode 100644 index ca195228e..000000000 --- a/src/systems/slates/apps/hub/docker-compose.dev.yml +++ /dev/null @@ -1,280 +0,0 @@ -services: - postgres: - image: postgres:16-alpine - container_name: slates-hub-postgres - restart: unless-stopped - ports: - - '65432:5432' - environment: - POSTGRES_USER: slates-hub - POSTGRES_PASSWORD: slates-hub - POSTGRES_DB: slates-hub - volumes: - - postgres_data:/var/lib/postgresql/data - - ./init-test-db.sh:/docker-entrypoint-initdb.d/init-test-db.sh - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U slates-hub'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - slates-hub-network - - redis: - image: redis:7-alpine - container_name: slates-hub-redis - restart: unless-stopped - ports: - - '65379:6379' - healthcheck: - test: ['CMD', 'redis-cli', 'ping'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - slates-hub-network - - object-storage: - profiles: ['infra'] - image: ghcr.io/metorial/object-storage:latest - container_name: slates-hub-object-storage - restart: unless-stopped - ports: - - '65010:52010' - volumes: - - object-store-data:/app/data - environment: - RUST_LOG: info - AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID:-test} - AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY:-test} - AWS_REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__SERVER__HOST: 0.0.0.0 - OBJECT_STORE__SERVER__PORT: 52010 - OBJECT_STORE__BACKEND__TYPE: ${OBJECT_STORAGE_BACKEND_TYPE:-local} - OBJECT_STORE__BACKEND__ROOT_PATH: ${OBJECT_STORAGE_BACKEND_ROOT_PATH:-/app/data} - OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET:-slates-hub-ci} - healthcheck: - test: ['CMD-SHELL', 'curl -f http://localhost:52010/health || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - slates-hub-network - - forge: - profiles: ['infra'] - image: ghcr.io/metorial/forge:latest - container_name: slates-hub-forge - restart: unless-stopped - ports: - - '65020:52020' - environment: - DATABASE_URL: postgresql://slates-hub:slates-hub@postgres:5432/forge - REDIS_URL: redis://redis:6379/0 - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - DEFAULT_PROVIDER: aws.code-build - OBJECT_STORAGE_URL: http://object-storage:52010 - LOG_BUCKET_NAME: logs - ARTIFACT_BUCKET_NAME: artifacts - CODE_BUILD_AWS_REGION: ${CODE_BUILD_AWS_REGION:-us-east-1} - CODE_BUILD_AWS_ACCESS_KEY_ID: ${CODE_BUILD_AWS_ACCESS_KEY_ID:-test} - CODE_BUILD_AWS_SECRET_ACCESS_KEY: ${CODE_BUILD_AWS_SECRET_ACCESS_KEY:-test} - CODE_BUILD_PROJECT_NAME: ${CODE_BUILD_PROJECT_NAME:-} - CODE_BUILD_ROLE_ARN: ${CODE_BUILD_ROLE_ARN:-} - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52020/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - slates-hub-network - - function-bay: - profiles: ['infra'] - image: ghcr.io/metorial/function-bay:latest - container_name: slates-hub-function-bay - restart: unless-stopped - ports: - - '65030:52030' - environment: - DATABASE_URL: postgresql://slates-hub:slates-hub@postgres:5432/function-bay - REDIS_URL: redis://redis:6379/0 - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - DEFAULT_PROVIDER: ${DEFAULT_PROVIDER:-aws.lambda} - OBJECT_STORAGE_URL: http://object-storage:52010 - BUNDLE_BUCKET_NAME: bundles - FORGE_API_URL: http://forge:52020/metorial-forge - LAMBDA_AWS_REGION: ${LAMBDA_AWS_REGION:-us-east-1} - LAMBDA_AWS_ACCESS_KEY_ID: ${LAMBDA_AWS_ACCESS_KEY_ID:-test} - LAMBDA_AWS_SECRET_ACCESS_KEY: ${LAMBDA_AWS_SECRET_ACCESS_KEY:-test} - LAMBDA_ROLE_ARN: ${LAMBDA_ROLE_ARN:-} - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - forge: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52030/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - slates-hub-network - - signal: - profiles: ['infra'] - image: ghcr.io/metorial/signal:latest - container_name: slates-hub-signal - restart: unless-stopped - ports: - - '65050:52050' - environment: - DATABASE_URL: postgresql://slates-hub:slates-hub@postgres:5432/signal - REDIS_URL: redis://redis:6379/0 - OBJECT_STORAGE_URL: http://object-storage:52010 - LOGS_BUCKET_NAME: bundles - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52050/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - slates-hub-network - - slates-registry: - profiles: ['infra'] - build: - context: ../../../../.. - dockerfile: ./src/systems/slates/apps/registry/dev.Dockerfile - container_name: slates-hub-registry - restart: unless-stopped - ports: - - '65040:52040' - - '65041:52041' - - '65042:52042' - environment: - DATABASE_URL: postgresql://slates-hub:slates-hub@postgres:5432/slates-registry - REDIS_URL: redis://redis:6379/0 - OBJECT_STORAGE_URL: http://object-storage:52010 - PACKAGE_BUCKET_NAME: slates-hub-packages - SERVICE_PUBLIC_URL: http://localhost:65040 - PUBLIC_ACCESS_PERMITTED: 'true' - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52040/ping').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - slates-hub-network - - slates-hub: - profiles: ['hub'] - build: - context: ../../../../.. - dockerfile: ./src/systems/slates/apps/hub/dev.Dockerfile - container_name: slates-hub-service - restart: unless-stopped - ports: - - '65045:52045' - - '65046:52046' - environment: - DATABASE_URL: ${DATABASE_URL} - REDIS_URL: ${REDIS_URL} - METORIAL_ENV: ${METORIAL_ENV:-development} - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - FUNCTION_BAY_API_URL: ${FUNCTION_BAY_API_URL} - FUNCTION_BAY_TENANT_IDENTIFIER: ${FUNCTION_BAY_TENANT_IDENTIFIER} - FUNCTION_BAY_DEFAULT_MEMORY_MB: ${FUNCTION_BAY_DEFAULT_MEMORY_MB} - FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS: ${FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS} - OBJECT_STORAGE_URL: ${OBJECT_STORAGE_URL} - INVOCATIONS_BUCKET_NAME: ${INVOCATIONS_BUCKET_NAME} - INITIAL_REGISTRIES: ${INITIAL_REGISTRIES} - SUPPORTS_PREBUILT_SLATES: ${SUPPORTS_PREBUILT_SLATES:-false} - SIGNAL_API_URL: ${SIGNAL_API_URL} - SIGNAL_SENDER_IDENTIFIER: ${SIGNAL_SENDER_IDENTIFIER} - SLATES_HUB_INSTANCE_IDENTIFIER: ${SLATES_HUB_INSTANCE_IDENTIFIER} - SERVICE_PUBLIC_URL: ${SERVICE_PUBLIC_URL} - volumes: - - ./src:/app/src/systems/slates/apps/hub/src:ro - - ./admin:/app/src/systems/slates/apps/hub/admin:ro - - ./package.json:/app/src/systems/slates/apps/hub/package.json:ro - - ./tsconfig.json:/app/src/systems/slates/apps/hub/tsconfig.json:ro - - ./prisma:/app/src/systems/slates/apps/hub/prisma - - ./prisma.config.ts:/app/src/systems/slates/apps/hub/prisma.config.ts:ro - - ../../packages:/app/src/systems/slates/packages:ro - - /app/node_modules - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - networks: - - slates-hub-network - - slates-hub-admin: - profiles: ['admin'] - image: oven/bun:latest - container_name: slates-hub-admin - restart: unless-stopped - working_dir: /app - command: sh -c "bun install && cd apps/hub && bun vite --config admin/vite.docker.config.ts" - ports: - - '65047:52047' - volumes: - - ../../:/app - networks: - - slates-hub-network - - slates-registry-admin: - profiles: ['admin'] - image: oven/bun:latest - container_name: slates-registry-admin - restart: unless-stopped - working_dir: /app - command: sh -c "bun install && cd apps/registry && bun vite --config admin/vite.docker.config.ts" - ports: - - '65043:52043' - volumes: - - ../../:/app - networks: - - slates-hub-network - -volumes: - postgres_data: - driver: local - object-store-data: - driver: local - -networks: - slates-hub-network: - driver: bridge diff --git a/src/systems/slates/apps/hub/init-test-db.sh b/src/systems/slates/apps/hub/init-test-db.sh deleted file mode 100755 index 52fb183b1..000000000 --- a/src/systems/slates/apps/hub/init-test-db.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -set -e - -# Create databases for CI/local-compose services if they don't exist -dbs="slates-hub-test slates-registry forge function-bay signal" -for db in $dbs; do - exists=$(psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -tAc "SELECT 1 FROM pg_database WHERE datname='${db}'") - if [ "$exists" != "1" ]; then - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -c "CREATE DATABASE \"${db}\";" - fi -done - -echo "Database initialization complete" diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index 9d7170e07..8377e654e 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -14,10 +14,6 @@ "enterprise:dev": "bun run dev", "prisma:generate": "bun run db:generate", "prisma:push": "bun run db:push:dev", - "infra:up": "docker compose -p slates-hub -f ./docker-compose.dev.yml --profile infra up -d", - "infra:down": "docker compose -p slates-hub -f ./docker-compose.dev.yml --profile infra down", - "infra:logs": "docker compose -p slates-hub -f ./docker-compose.dev.yml --profile infra logs -f", - "infra:restart": "docker compose -p slates-hub -f ./docker-compose.dev.yml --profile infra restart", "db:generate": "bun prisma generate --schema prisma/schema", "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --schema prisma/schema --accept-data-loss'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --schema prisma/schema'", diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 5bb44d455..95fef4fd2 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -19,6 +19,10 @@ RUN bun prisma generate RUN bun run admin:build RUN bun run server:build +FROM builder AS workspace +WORKDIR /app/src/systems/slates/apps/registry +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner diff --git a/src/systems/slates/apps/registry/control.toml b/src/systems/slates/apps/registry/control.toml index 569fa0242..1557e232c 100644 --- a/src/systems/slates/apps/registry/control.toml +++ b/src/systems/slates/apps/registry/control.toml @@ -3,7 +3,7 @@ name = "slates-registry" [service] port = 52040 -dockerfile = "src/systems/slates/apps/registry/dev.Dockerfile" +dockerfile = "src/systems/slates/apps/registry/Dockerfile" build_context = "oss" health = { path = "/ping" } @@ -13,8 +13,12 @@ setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] cwd = "/app/src/systems/slates/apps/registry" runner = "service" +[[databases]] +adapter = "postgres" +name = "slates-registry" + [env] -DATABASE_URL = "postgresql://slates-registry:slates-registry@$deps.postgres.5432/slates-registry" +DATABASE_URL = "$db.slates-registry.url" REDIS_URL = "redis://$deps.redis.6379/0" OBJECT_STORAGE_URL = "http://$deps.object-store.52010" PACKAGE_BUCKET_NAME = "slates-registry-packages-test" diff --git a/src/systems/slates/apps/registry/dev.Dockerfile b/src/systems/slates/apps/registry/dev.Dockerfile deleted file mode 100644 index 19e8fc488..000000000 --- a/src/systems/slates/apps/registry/dev.Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -RUN sh ./src/systems/slates/scripts/prepare-docker-build.sh - -# Build admin frontend -RUN cd /app/src/systems/slates/apps/registry && bun run admin:build - -# Generate Prisma client -RUN cd /app/src/systems/slates/apps/registry && bun prisma generate - -# Expose port -EXPOSE 51001 - -# Run server with hot reloading -CMD ["sh", "-c", "cd /app/src/systems/slates/apps/registry && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/slates/apps/registry/docker-compose.dev.yml b/src/systems/slates/apps/registry/docker-compose.dev.yml deleted file mode 100644 index 14ab0d86f..000000000 --- a/src/systems/slates/apps/registry/docker-compose.dev.yml +++ /dev/null @@ -1,90 +0,0 @@ -version: '3.8' - -services: - postgres: - image: postgres:16-alpine - container_name: slates-registry-postgres - restart: unless-stopped - environment: - POSTGRES_USER: slates-registry - POSTGRES_PASSWORD: slates-registry - POSTGRES_DB: slates-registry - volumes: - - postgres_data3:/var/lib/postgresql/data - networks: - - slates-registry-network - - redis: - image: redis:7-alpine - container_name: slates-registry-redis - restart: unless-stopped - networks: - - slates-registry-network - - object-storage: - image: ghcr.io/metorial/object-storage:latest - ports: - - '65010:52010' - volumes: - - object-store-data:/app/data - environment: - RUST_LOG: info - AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY} - AWS_REGION: ${OBJECT_STORAGE_AWS_REGION} - - OBJECT_STORE__SERVER__HOST: 0.0.0.0 - OBJECT_STORE__SERVER__PORT: 52010 - OBJECT_STORE__BACKEND__TYPE: s3 - OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION} - OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET} - - container_name: slates-registry-object-storage - restart: unless-stopped - networks: - - slates-registry-network - - slates-registry: - build: - context: ../../../../.. - dockerfile: ./src/systems/slates/apps/registry/dev.Dockerfile - container_name: slates-registry-service - restart: unless-stopped - ports: - - '52040:52040' - - '52041:52041' - - '52042:52042' - environment: - DATABASE_URL: postgresql://slates-registry:slates-registry@postgres:5432/slates-registry - REDIS_URL: redis://redis:6379/0 - OBJECT_STORAGE_URL: http://object-storage:52010 - PACKAGE_BUCKET_NAME: slates-registry-packages - SERVICE_PUBLIC_URL: http://localhost:52040 - PUBLIC_ACCESS_PERMITTED: 'true' - ARES_AUTH_URL: ${ARES_AUTH_URL} - ARES_CLIENT_ID: ${ARES_CLIENT_ID} - volumes: - - ./src:/app/src/systems/slates/apps/registry/src:ro - - ./admin:/app/src/systems/slates/apps/registry/admin:ro - - ./package.json:/app/src/systems/slates/apps/registry/package.json:ro - - ./tsconfig.json:/app/src/systems/slates/apps/registry/tsconfig.json:ro - - ./prisma:/app/src/systems/slates/apps/registry/prisma - - ./prisma.config.ts:/app/src/systems/slates/apps/registry/prisma.config.ts:ro - - ../../packages:/app/src/systems/slates/packages:ro - - /app/node_modules - depends_on: - - postgres - - redis - - object-storage - networks: - - slates-registry-network - -volumes: - postgres_data3: - driver: local - object-store-data: - driver: local - -networks: - slates-registry-network: - driver: bridge diff --git a/src/systems/slates/apps/registry/package.json b/src/systems/slates/apps/registry/package.json index a2c2dc8d5..abf155db8 100644 --- a/src/systems/slates/apps/registry/package.json +++ b/src/systems/slates/apps/registry/package.json @@ -16,8 +16,6 @@ "prisma:push": "bun run db:push:dev", "db:generate": "bun prisma generate --schema prisma/schema.prisma", "db:push:dev": "bun prisma db push --schema prisma/schema.prisma --accept-data-loss", - "infra:dev": "docker compose -p slates-registry -f ./docker-compose.dev.yml up --pull always --build slates-registry object-storage", - "infra:up": "docker compose -p slates-registry -f ./docker-compose.dev.yml up --pull always --build slates-registry object-storage", "admin:build": "vite build --config admin/vite.config.ts", "admin:dev": "vite --config admin/vite.config.ts", "test": "bun test", diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index da6b1ef3c..27cebe4c8 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -29,8 +29,12 @@ RUN mv tsconfig.json tsconfig.json.bak && \ mv tsconfig.json.bak tsconfig.json; \ exit $BUILD_EXIT_CODE +FROM builder AS workspace +WORKDIR /app/src/systems/subspace/apps/controller +CMD ["sleep", "infinity"] + # Production stage -FROM oven/bun:1-alpine AS production +FROM oven/bun:1-alpine AS runner WORKDIR /app diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index 1b05b7600..9da068e82 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -3,7 +3,7 @@ name = "subspace-controller" [service] port = 52070 -dockerfile = "src/systems/subspace/apps/controller/dev.Dockerfile" +dockerfile = "src/systems/subspace/apps/controller/Dockerfile" build_context = "oss" [test.e2e] @@ -15,8 +15,16 @@ setup = [ cwd = "/app/src/systems/subspace/apps/controller" runner = "sidecar" +[[databases]] +adapter = "postgres" +name = "subspace" + +[[databases]] +adapter = "postgres" +name = "subspace-test" + [env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/subspace-test" +DATABASE_URL = "$db.subspace-test.url" PUBLIC_SERVICE_URL = "http://subspace-public:52071" REDIS_URL = "redis://$deps.redis.6379/0" NATS_URL = "nats://$deps.nats.4222" @@ -36,7 +44,6 @@ CARGO_API_URL = "http://$deps.cargo.52150/metorial-cargo" [[deps]] name = "postgres" preset = "postgres" -init = "../../init-test-db.sh" [deps.env] POSTGRES_USER = "postgres" @@ -64,153 +71,46 @@ name = "forge" control = "../../../forge/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/forge" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -ENCRYPTION_KEY = "test-encryption-key-32-bytes!!" -DEFAULT_PROVIDER = "aws.code-build" -ARTIFACT_BUCKET_NAME = "artifacts" -LOG_BUCKET_NAME = "logs" -CODE_BUILD_AWS_REGION = "us-east-1" - [[deps]] name = "function-bay" control = "../../../function-bay/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/function-bay" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -BUNDLE_BUCKET_NAME = "bundles" -ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" -FORGE_API_URL = "http://$deps.forge.52020/metorial-forge" -DEFAULT_PROVIDER = "aws.lambda" -LAMBDA_AWS_REGION = "us-east-1" - [[deps]] name = "signal" control = "../../../signal/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/signal" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -LOGS_BUCKET_NAME = "bundles" - [[deps]] name = "slates-registry" control = "../../../slates/apps/registry" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/slates-registry" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -PACKAGE_BUCKET_NAME = "subspace-packages" -SERVICE_PUBLIC_URL = "http://slates-registry:52040" -PUBLIC_ACCESS_PERMITTED = "true" - [[deps]] name = "slates-hub" control = "../../../slates/apps/hub" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/slates-hub" -REDIS_URL = "redis://$deps.redis.6379/0" -METORIAL_ENV = "development" -ENCRYPTION_KEY = "sTrG+z8ewVo7JJsgmv39UL/YDdgxlHSVhVPJOV7Omdg" -FUNCTION_BAY_API_URL = "http://$deps.function-bay.52030/metorial-function-bay" -FUNCTION_BAY_TENANT_IDENTIFIER = "dev-tenant" -FUNCTION_BAY_DEFAULT_MEMORY_MB = "512" -FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS = "15" -SIGNAL_API_URL = "http://$deps.signal.52050/metorial-signal" -SIGNAL_SENDER_IDENTIFIER = "dev-subspace" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -INVOCATIONS_BUCKET_NAME = "subspace-invocations" -INITIAL_REGISTRIES = "http://$deps.slates-registry.52040" -SLATES_HUB_INSTANCE_IDENTIFIER = "dev-subspace" -SERVICE_PUBLIC_URL = "http://slates-hub:52045" - [[deps]] name = "shuttle" control = "../../../shuttle/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/shuttle" -REDIS_URL = "redis://$deps.redis.6379/0" -ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" -PROVIDER_OAUTH_URL = "http://shuttle:52081" -HOLOPOD_HTTP_ENDPOINT = "test.local:50051" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -LOGS_BUCKET_NAME = "shuttle-logs" -FUNCTION_BAY_API_URL = "http://$deps.function-bay.52030/metorial-function-bay" -FUNCTION_BAY_TENANT_IDENTIFIER = "dev-tenant" -FUNCTION_BAY_DEFAULT_MEMORY_MB = "512" -FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS = "15" -SHUTTLE_ALLOW_PRIVATE_URLS = "true" -SHUTTLE_UNSAFE_SSRF_BYPASS = "true" - [[deps]] name = "cargo" control = "../../../cargo/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/cargo-test" -REDIS_URL = "redis://$deps.redis.6379/0" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -VOYAGER_URL = "http://$deps.voyager.52060/metorial-voyager" -FILES_BUCKET_NAME = "cargo-files-test" -CARGO_API_PORT = "52150" -CARGO_CONTENT_PORT = "52151" -CARGO_HEALTH_PORT = "12121" -DOWNLOAD_PUBLIC_URL = "http://cargo:52151" -CARGO_REGION = "tst" -SIGNED_DOWNLOAD_URL_TOKEN_SECRET = "cargo-download-test-secret" -METORIAL_ENV = "development" -ORIGIN_URL = "http://origin:52090/metorial-origin" -CODE_BUCKET_SERVICE_URL = "code-bucket:5050" -API_URL = "http://cargo:52150" - [[deps]] name = "code-bucket" control = "../../../origin/apps/code-bucket" scope = "service" -[deps.env] -CODE_BUCKET_JWT_SECRET = "dev-secret-change-in-production" -CODE_BUCKET_OBJECT_STORAGE_BUCKET = "code-bucket" -CODE_BUCKET_OBJECT_STORAGE_ENDPOINT = "http://$deps.object-store.52010" -CODE_BUCKET_REDIS_URL = "redis://$deps.redis.6379" -CODE_BUCKET_HTTP_ADDRESS = ":52091" -CODE_BUCKET_WORKSPACE_ADDRESS = ":52092" -CODE_BUCKET_RPC_ADDRESS = ":5050" - [[deps]] name = "origin" control = "../../../origin/apps/service" scope = "service" -[deps.env] -DATABASE_URL = "postgresql://postgres:postgres@$deps.postgres.5432/origin" -REDIS_URL = "redis://$deps.redis.6379/0" -ORIGIN_SERVICE_PUBLIC_URL = "http://origin:52093" -OBJECT_STORAGE_URL = "http://$deps.object-store.52010" -CODE_BUCKET_OBJECT_STORAGE_BUCKET = "code-bucket" -CODE_BUCKET_SERVICE_URL = "code-bucket:5050" -CODE_BUCKET_EDITOR_URL = "http://code-bucket:52092" -CODE_BUCKET_EDITOR_API_URL = "http://code-bucket:52091" -SCM_GITHUB_APP_ID = "test-github-app-id" -SCM_GITHUB_APP_SLUG = "test-github-app" -SCM_GITHUB_APP_CLIENT_ID = "test-github-client-id" -SCM_GITHUB_APP_CLIENT_SECRET = "test-github-client-secret" -SCM_GITHUB_APP_PRIVATE_KEY_BASE_64 = "dGVzdC1wcml2YXRlLWtleQ==" - [[deps]] name = "mcp-test-server" -inline = { build = { context = "oss", dockerfile = "src/systems/subspace/apps/controller/dev.Dockerfile" }, command = ["sh", "-c", "PORT=52198 bun ./src/systems/subspace/test-servers/index.ts"], port = 52198, health = { cmd = "bun -e \"fetch('http://localhost:52198/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } } +inline = { build = { context = "oss", dockerfile = "src/systems/subspace/apps/controller/Dockerfile", target = "workspace" }, command = ["sh", "-c", "PORT=52198 bun ./src/systems/subspace/test-servers/index.ts"], port = 52198, health = { cmd = "bun -e \"fetch('http://localhost:52198/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } } diff --git a/src/systems/subspace/apps/controller/dev.Dockerfile b/src/systems/subspace/apps/controller/dev.Dockerfile deleted file mode 100644 index d5b611150..000000000 --- a/src/systems/subspace/apps/controller/dev.Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -RUN sh ./src/systems/subspace/scripts/prepare-docker-build.sh - -# Run in dev mode with hot reloading -CMD ["sh", "-c", "cd /app/src/systems/subspace/db && bun prisma db push --accept-data-loss && bun prisma generate && cd ../apps/controller && bun start:dev"] \ No newline at end of file diff --git a/src/systems/subspace/apps/controller/package.json b/src/systems/subspace/apps/controller/package.json index ee30cb107..6cdadb7d7 100644 --- a/src/systems/subspace/apps/controller/package.json +++ b/src/systems/subspace/apps/controller/package.json @@ -9,8 +9,6 @@ "server:build": "ncc build ./src/server.ts -o ./dist --source-map --external bun:sqlite --external bun && bun run sentry:sourcemaps:if-token", "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-subspace-controller ./dist && sentry-cli sourcemaps upload --org metorial --project mte-subspace-controller ./dist", "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", - "infra:up": "docker compose -p subspace -f ../../docker-compose.dev.yml --profile infra up -d postgres redis object-storage nats-1 nats-2 shuttle mcp-test-server", - "infra:down": "docker compose -p subspace -f ../../docker-compose.dev.yml --profile infra stop postgres redis object-storage nats-1 nats-2 shuttle mcp-test-server", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts'", "test": "vitest run --passWithNoTests", "test:ci": "vitest run --mode ci --reporter verbose --configLoader native", diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index 2fb14c3dd..0a0e993a2 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -33,8 +33,12 @@ RUN mv tsconfig.json tsconfig.json.bak && \ mv tsconfig.json.bak tsconfig.json; \ exit $BUILD_EXIT_CODE +FROM builder AS workspace +WORKDIR /app/src/systems/subspace/apps/public +CMD ["sleep", "infinity"] + # Production stage -FROM oven/bun:1-alpine AS production +FROM oven/bun:1-alpine AS runner WORKDIR /app diff --git a/src/systems/subspace/apps/public/dev.Dockerfile b/src/systems/subspace/apps/public/dev.Dockerfile deleted file mode 100644 index 5a5f5e034..000000000 --- a/src/systems/subspace/apps/public/dev.Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -RUN sh ./src/systems/subspace/scripts/prepare-docker-build.sh - -# Build frontend -RUN cd /app/src/systems/subspace/apps/public && bun run build - -# Run in dev mode with hot reloading. -# `subspace-controller` performs schema/client initialization before this service starts. -CMD ["sh", "-c", "cd /app/src/systems/subspace/apps/public && bun run start:dev"] \ No newline at end of file diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index f3fc491d1..293ec3fca 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -29,8 +29,12 @@ RUN mv tsconfig.json tsconfig.json.bak && \ mv tsconfig.json.bak tsconfig.json; \ exit $BUILD_EXIT_CODE +FROM builder AS workspace +WORKDIR /app/src/systems/subspace/apps/worker +CMD ["sleep", "infinity"] + # Production stage -FROM oven/bun:1-alpine AS production +FROM oven/bun:1-alpine AS runner WORKDIR /app diff --git a/src/systems/subspace/apps/worker/dev.Dockerfile b/src/systems/subspace/apps/worker/dev.Dockerfile deleted file mode 100644 index 18d699a4b..000000000 --- a/src/systems/subspace/apps/worker/dev.Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM oven/bun:1 - -WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -RUN sh ./src/systems/subspace/scripts/prepare-docker-build.sh - -# Run in dev mode with hot reloading. -# `subspace-controller` performs schema/client initialization before this service starts. -CMD ["sh", "-c", "cd /app/src/systems/subspace/apps/worker && bun start:dev"] \ No newline at end of file diff --git a/src/systems/subspace/docker-compose.dev.yml b/src/systems/subspace/docker-compose.dev.yml deleted file mode 100644 index 7070002e3..000000000 --- a/src/systems/subspace/docker-compose.dev.yml +++ /dev/null @@ -1,691 +0,0 @@ -services: - postgres: - image: postgres:16-alpine - container_name: subspace-postgres - restart: unless-stopped - ports: - - '55432:5432' - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: postgres - volumes: - - postgres_data3:/var/lib/postgresql/data - - ./init-test-db.sh:/docker-entrypoint-initdb.d/init-test-db.sh - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U postgres'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - redis: - image: redis:7-alpine - container_name: subspace-redis - restart: unless-stopped - ports: - - '56379:6379' - healthcheck: - test: ['CMD', 'redis-cli', 'ping'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - nats-1: - image: nats - command: '--cluster_name NATS --cluster nats://0.0.0.0:6222 --http_port 8222 ' - ports: - - '56222:4222' - networks: - - subspace-network - # nats-2: - # image: nats - # command: '--cluster_name NATS --cluster nats://0.0.0.0:6222 --routes=nats://ruser:T0pS3cr3t@nats-1:6222' - # depends_on: ['nats-1'] - # networks: - # - subspace-network - - object-storage: - image: ghcr.io/metorial/object-storage:latest - ports: - - '55010:52010' - volumes: - - object-store-data:/app/data - environment: - RUST_LOG: info - AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID:-test} - AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY:-test} - AWS_REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__SERVER__HOST: 0.0.0.0 - OBJECT_STORE__SERVER__PORT: 52010 - OBJECT_STORE__BACKEND__TYPE: ${OBJECT_STORAGE_BACKEND_TYPE:-local} - OBJECT_STORE__BACKEND__ROOT_PATH: ${OBJECT_STORAGE_BACKEND_ROOT_PATH:-/app/data} - OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} - OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET:-subspace-local} - - container_name: subspace-object-storage - restart: unless-stopped - healthcheck: - test: ['CMD-SHELL', 'curl -f http://localhost:52010/health || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - forge: - image: ghcr.io/metorial/forge:latest - container_name: subspace-forge - restart: unless-stopped - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/forge - REDIS_URL: redis://redis:6379/0 - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - DEFAULT_PROVIDER: aws.code-build - OBJECT_STORAGE_URL: http://object-storage:52010 - LOG_BUCKET_NAME: logs - ARTIFACT_BUCKET_NAME: artifacts - CODE_BUILD_AWS_REGION: ${CODE_BUILD_AWS_REGION:-us-east-1} - CODE_BUILD_AWS_ACCESS_KEY_ID: ${CODE_BUILD_AWS_ACCESS_KEY_ID:-test} - CODE_BUILD_AWS_SECRET_ACCESS_KEY: ${CODE_BUILD_AWS_SECRET_ACCESS_KEY:-test} - CODE_BUILD_PROJECT_NAME: ${CODE_BUILD_PROJECT_NAME:-} - CODE_BUILD_ROLE_ARN: ${CODE_BUILD_ROLE_ARN:-} - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52020/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - function-bay: - image: ghcr.io/metorial/function-bay:latest - container_name: subspace-function-bay - restart: unless-stopped - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/function-bay - REDIS_URL: redis://redis:6379/0 - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - DEFAULT_PROVIDER: ${DEFAULT_PROVIDER:-aws.lambda} - OBJECT_STORAGE_URL: http://object-storage:52010 - BUNDLE_BUCKET_NAME: bundles - FORGE_API_URL: http://forge:52020/metorial-forge - LAMBDA_AWS_REGION: ${LAMBDA_AWS_REGION:-us-east-1} - LAMBDA_AWS_ACCESS_KEY_ID: ${LAMBDA_AWS_ACCESS_KEY_ID:-test} - LAMBDA_AWS_SECRET_ACCESS_KEY: ${LAMBDA_AWS_SECRET_ACCESS_KEY:-test} - LAMBDA_ROLE_ARN: ${LAMBDA_ROLE_ARN:-} - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - forge: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52030/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - signal: - image: ghcr.io/metorial/signal:latest - container_name: subspace-signal - restart: unless-stopped - ports: - - '52050:52050' - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/signal - REDIS_URL: redis://redis:6379/0 - OBJECT_STORAGE_URL: http://object-storage:52010 - LOGS_BUCKET_NAME: bundles - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52050/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - voyager: - image: ghcr.io/metorial/voyager:latest - container_name: subspace-voyager - restart: unless-stopped - ports: - - '52060:52060' - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/voyager - SEARCH_DATABASE_URL: postgresql://postgres:postgres@postgres:5432/voyager-search - REDIS_URL: redis://redis:6379/0 - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -s http://localhost:52060/ > /dev/null || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - slates-registry: - image: ghcr.io/metorial/slates-registry:latest - container_name: subspace-slates-registry - restart: unless-stopped - ports: - - '52040:52040' - - '52041:52041' - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/slates-registry - REDIS_URL: redis://redis:6379/0 - OTEL_ENABLED: ${OTEL_ENABLED:-false} - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: ${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-} - OTEL_EXPORTER_OTLP_ENDPOINT: ${OTEL_EXPORTER_OTLP_ENDPOINT:-} - OTEL_EXPORTER_OTLP_HEADERS: ${OTEL_EXPORTER_OTLP_HEADERS:-} - OTEL_SERVICE_NAME: ${OTEL_SERVICE_NAME:-} - OTEL_RESOURCE_ATTRIBUTES: ${OTEL_RESOURCE_ATTRIBUTES:-} - OTEL_DEBUG: ${OTEL_DEBUG:-false} - OBJECT_STORAGE_URL: http://object-storage:52010 - PACKAGE_BUCKET_NAME: subspace-packages - SERVICE_PUBLIC_URL: http://localhost:52040 - PUBLIC_ACCESS_PERMITTED: 'true' - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52040/ping').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - slates-hub: - image: ghcr.io/metorial/slates-hub:latest - container_name: subspace-slates-hub - restart: unless-stopped - ports: - - '52045:52045' - - '52046:52046' - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/slates-hub - REDIS_URL: redis://redis:6379/0 - METORIAL_ENV: development - OTEL_ENABLED: ${OTEL_ENABLED:-false} - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: ${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-} - OTEL_EXPORTER_OTLP_ENDPOINT: ${OTEL_EXPORTER_OTLP_ENDPOINT:-} - OTEL_EXPORTER_OTLP_HEADERS: ${OTEL_EXPORTER_OTLP_HEADERS:-} - OTEL_SERVICE_NAME: ${OTEL_SERVICE_NAME:-} - OTEL_RESOURCE_ATTRIBUTES: ${OTEL_RESOURCE_ATTRIBUTES:-} - OTEL_DEBUG: ${OTEL_DEBUG:-false} - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - FUNCTION_BAY_API_URL: http://function-bay:52030/metorial-function-bay - FUNCTION_BAY_TENANT_IDENTIFIER: dev-tenant - FUNCTION_BAY_DEFAULT_MEMORY_MB: 512 - FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS: 15 - OBJECT_STORAGE_URL: http://object-storage:52010 - INVOCATIONS_BUCKET_NAME: subspace-invocations - INITIAL_REGISTRIES: 'http://slates-registry:52040' - SIGNAL_API_URL: http://signal:52050/metorial-signal - SIGNAL_SENDER_IDENTIFIER: dev-subspace - SLATES_HUB_INSTANCE_IDENTIFIER: dev-subspace - SERVICE_PUBLIC_URL: http://localhost:52045 - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - slates-registry: - condition: service_healthy - forge: - condition: service_healthy - function-bay: - condition: service_healthy - signal: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52045/').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - shuttle: - image: ghcr.io/metorial/shuttle:latest - container_name: subspace-shuttle - restart: unless-stopped - ports: - - "52080:52080" - - "52081:52081" - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/shuttle - REDIS_URL: redis://redis:6379/0 - ENCRYPTION_KEY: key - PROVIDER_OAUTH_TICKET_SECRET: dev-secret - PROVIDER_OAUTH_URL: http://localhost:52081 - HOLOPOD_HTTP_ENDPOINT: http://100.70.207.65:3000 - OBJECT_STORAGE_URL: http://object-storage:52010 - LOGS_BUCKET_NAME: shuttle-logs - FUNCTION_BAY_API_URL: http://function-bay:52030/metorial-function-bay - FUNCTION_BAY_TENANT_IDENTIFIER: dev-tenant - FUNCTION_BAY_DEFAULT_MEMORY_MB: 512 - FUNCTION_BAY_DEFAULT_TIMEOUT_SECONDS: 15 - SHUTTLE_ALLOW_PRIVATE_URLS: "true" - SHUTTLE_UNSAFE_SSRF_BYPASS: "true" - - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - forge: - condition: service_healthy - function-bay: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52080/').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - code-bucket: - image: ghcr.io/metorial/origin-code-bucket:latest - container_name: subspace-origin-code-bucket - restart: unless-stopped - ports: - - '52091:52091' # HTTP API - - '52092:52092' # VSCode Workspace - environment: - CODE_BUCKET_JWT_SECRET: dev-secret-change-in-production - CODE_BUCKET_OBJECT_STORAGE_BUCKET: code-bucket - CODE_BUCKET_OBJECT_STORAGE_ENDPOINT: http://object-storage:52010 - CODE_BUCKET_REDIS_URL: redis://redis:6379 - CODE_BUCKET_HTTP_ADDRESS: ':52091' - CODE_BUCKET_WORKSPACE_ADDRESS: ':52092' - CODE_BUCKET_RPC_ADDRESS: ':5050' - depends_on: - - postgres - - redis - - object-storage - networks: - - subspace-network - - origin: - image: ghcr.io/metorial/origin-service:latest - container_name: subspace-origin - restart: unless-stopped - ports: - - '52090:52090' - - '52093:52093' - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/origin - REDIS_URL: redis://redis:6379/0 - ORIGIN_SERVICE_PUBLIC_URL: http://localhost:52093 - OBJECT_STORAGE_URL: http://object-storage:52010 - CODE_BUCKET_OBJECT_STORAGE_BUCKET: code-bucket - CODE_BUCKET_SERVICE_URL: code-bucket:5050 - CODE_BUCKET_EDITOR_URL: ${CODE_BUCKET_EDITOR_URL:-http://localhost:52092} - CODE_BUCKET_EDITOR_API_URL: ${CODE_BUCKET_EDITOR_API_URL:-http://localhost:52091} - SCM_GITHUB_APP_ID: ${SCM_GITHUB_APP_ID} - SCM_GITHUB_APP_PRIVATE_KEY_BASE_64: ${SCM_GITHUB_APP_PRIVATE_KEY_BASE_64} - SCM_GITHUB_APP_CLIENT_ID: ${SCM_GITHUB_APP_CLIENT_ID} - SCM_GITHUB_APP_CLIENT_SECRET: ${SCM_GITHUB_APP_CLIENT_SECRET} - SCM_GITHUB_APP_SLUG: ${SCM_GITHUB_APP_SLUG} - depends_on: - - postgres - - redis - - object-storage - - code-bucket - networks: - - subspace-network - - subspace-controller: - profiles: ['app'] - build: - context: ../../.. - dockerfile: ./src/systems/subspace/apps/controller/dev.Dockerfile - container_name: subspace-controller-service - restart: unless-stopped - ports: - - '52070:52070' - - '52072:52072' - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/subspace - REDIS_URL: redis://redis:6379/0 - NATS_URL: nats://nats-1:4222 - METORIAL_ENV: development - OTEL_ENABLED: ${OTEL_ENABLED:-false} - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: ${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-} - OTEL_EXPORTER_OTLP_ENDPOINT: ${OTEL_EXPORTER_OTLP_ENDPOINT:-} - OTEL_EXPORTER_OTLP_HEADERS: ${OTEL_EXPORTER_OTLP_HEADERS:-} - OTEL_SERVICE_NAME: ${OTEL_SERVICE_NAME:-} - OTEL_RESOURCE_ATTRIBUTES: ${OTEL_RESOURCE_ATTRIBUTES:-} - OTEL_DEBUG: ${OTEL_DEBUG:-false} - PUBLIC_SERVICE_URL: http://localhost:52071 - SLATES_HUB_URL: http://slates-hub:52046/slates-hub - VOYAGER_URL: http://voyager:52060/metorial-voyager - OBJECT_STORAGE_URL: http://object-storage:52010 - MESSAGE_BUCKET_NAME: messages - SHUTTLE_URL: http://shuttle:52080/metorial-shuttle - SHUTTLE_LIVE_URL: http://shuttle:52080 - SHUTTLE_PUBLIC_URL: http://localhost:52081 - SLATES_HUB_PUBLIC_URL: http://localhost:52045 - ORIGIN_URL: http://origin:52090/metorial-origin - REGISTRY_URL: https://metorial-saas-staging.registry.metorial-enterprise.com/metorial-registry-root - - volumes: - - ./apps/controller:/app/src/systems/subspace/apps/controller:${SUBSPACE_SOURCE_MOUNT_MODE:-ro} - # Preserve container-installed workspace deps when source is bind-mounted (CI checkout has no node_modules). - - /app/node_modules - - ./modules:/app/src/systems/subspace/modules:ro - - ./packages:/app/src/systems/subspace/packages:ro - - ./provider-backends:/app/src/systems/subspace/provider-backends:ro - - ./db:/app/src/systems/subspace/db - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - slates-registry: - condition: service_healthy - forge: - condition: service_healthy - function-bay: - condition: service_healthy - signal: - condition: service_healthy - voyager: - condition: service_healthy - slates-hub: - condition: service_healthy - shuttle: - condition: service_healthy - nats-1: - condition: service_started - origin: - condition: service_healthy - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52070/ping').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - mcp-test-server: - profiles: ['infra'] - build: - context: ../../.. - dockerfile: ./src/systems/subspace/apps/controller/dev.Dockerfile - container_name: subspace-mcp-test-server - command: ['sh', '-c', 'PORT=52198 bun ./src/systems/subspace/test-servers/index.ts'] - ports: - - '52198:52198' - healthcheck: - test: - [ - 'CMD-SHELL', - "bun -e \"fetch('http://localhost:52198/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" - ] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - subspace-controller-test: - profiles: ['infra'] - build: - context: ../../.. - dockerfile: ./src/systems/subspace/apps/controller/dev.Dockerfile - container_name: subspace-controller-test-service - command: ['sh', '-c', 'sleep infinity'] - environment: - OTEL_ENABLED: ${OTEL_ENABLED:-false} - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: ${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-} - OTEL_EXPORTER_OTLP_ENDPOINT: ${OTEL_EXPORTER_OTLP_ENDPOINT:-} - OTEL_EXPORTER_OTLP_HEADERS: ${OTEL_EXPORTER_OTLP_HEADERS:-} - OTEL_SERVICE_NAME: ${OTEL_SERVICE_NAME:-} - OTEL_RESOURCE_ATTRIBUTES: ${OTEL_RESOURCE_ATTRIBUTES:-} - OTEL_DEBUG: ${OTEL_DEBUG:-false} - volumes: - - ./apps/controller:/app/src/systems/subspace/apps/controller:${SUBSPACE_SOURCE_MOUNT_MODE:-ro} - # Preserve container-installed workspace deps when source is bind-mounted (CI checkout has no node_modules). - - /app/node_modules - - ./modules:/app/src/systems/subspace/modules:ro - - ./packages:/app/src/systems/subspace/packages:ro - - ./provider-backends:/app/src/systems/subspace/provider-backends:ro - - ./db:/app/src/systems/subspace/db - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - slates-registry: - condition: service_healthy - forge: - condition: service_healthy - function-bay: - condition: service_healthy - signal: - condition: service_healthy - voyager: - condition: service_healthy - slates-hub: - condition: service_healthy - shuttle: - condition: service_healthy - mcp-test-server: - condition: service_healthy - nats-1: - condition: service_started - origin: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'test -f /app/src/systems/subspace/apps/controller/package.json'] - interval: 5s - timeout: 5s - retries: 10 - networks: - - subspace-network - - subspace-public: - profiles: ['app'] - build: - context: ../../.. - dockerfile: ./src/systems/subspace/apps/public/dev.Dockerfile - container_name: subspace-public-service - restart: unless-stopped - ports: - - '52071:52071' - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/subspace - REDIS_URL: redis://redis:6379/0 - NATS_URL: nats://nats-1:4222 - METORIAL_ENV: development - OTEL_ENABLED: ${OTEL_ENABLED:-false} - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: ${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-} - OTEL_EXPORTER_OTLP_ENDPOINT: ${OTEL_EXPORTER_OTLP_ENDPOINT:-} - OTEL_EXPORTER_OTLP_HEADERS: ${OTEL_EXPORTER_OTLP_HEADERS:-} - OTEL_SERVICE_NAME: ${OTEL_SERVICE_NAME:-} - OTEL_RESOURCE_ATTRIBUTES: ${OTEL_RESOURCE_ATTRIBUTES:-} - OTEL_DEBUG: ${OTEL_DEBUG:-false} - PUBLIC_SERVICE_URL: http://localhost:52071 - SLATES_HUB_URL: http://slates-hub:52046/slates-hub - VOYAGER_URL: http://voyager:52060/metorial-voyager - OBJECT_STORAGE_URL: http://object-storage:52010 - MESSAGE_BUCKET_NAME: messages - SHUTTLE_URL: http://shuttle:52080/metorial-shuttle - SHUTTLE_LIVE_URL: http://shuttle:52080 - SHUTTLE_PUBLIC_URL: http://localhost:52081 - SLATES_HUB_PUBLIC_URL: http://localhost:52045 - ORIGIN_URL: http://origin:52090/metorial-origin - REGISTRY_URL: https://metorial-saas-staging.registry.metorial-enterprise.com/metorial-registry-root - - volumes: - - ./apps/public/src:/app/src/systems/subspace/apps/public/src:ro - - ./apps/public/frontend/src:/app/src/systems/subspace/apps/public/frontend/src:ro - - ./apps/public/package.json:/app/src/systems/subspace/apps/public/package.json:ro - - /app/node_modules - - ./modules:/app/src/systems/subspace/modules:ro - - ./packages:/app/src/systems/subspace/packages:ro - - ./provider-backends:/app/src/systems/subspace/provider-backends:ro - - ./db:/app/src/systems/subspace/db - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - slates-registry: - condition: service_healthy - forge: - condition: service_healthy - function-bay: - condition: service_healthy - signal: - condition: service_healthy - voyager: - condition: service_healthy - slates-hub: - condition: service_healthy - shuttle: - condition: service_healthy - subspace-controller: - condition: service_healthy - nats-1: - condition: service_started - origin: - condition: service_healthy - networks: - - subspace-network - - subspace-worker: - profiles: ['app'] - build: - context: ../../.. - dockerfile: ./src/systems/subspace/apps/worker/dev.Dockerfile - container_name: subspace-worker-service - restart: unless-stopped - environment: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/subspace - REDIS_URL: redis://redis:6379/0 - NATS_URL: nats://nats-1:4222 - METORIAL_ENV: development - OTEL_ENABLED: ${OTEL_ENABLED:-false} - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: ${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-} - OTEL_EXPORTER_OTLP_ENDPOINT: ${OTEL_EXPORTER_OTLP_ENDPOINT:-} - OTEL_EXPORTER_OTLP_HEADERS: ${OTEL_EXPORTER_OTLP_HEADERS:-} - OTEL_SERVICE_NAME: ${OTEL_SERVICE_NAME:-} - OTEL_RESOURCE_ATTRIBUTES: ${OTEL_RESOURCE_ATTRIBUTES:-} - OTEL_DEBUG: ${OTEL_DEBUG:-false} - PUBLIC_SERVICE_URL: http://localhost:52071 - SLATES_HUB_URL: http://slates-hub:52046/slates-hub - VOYAGER_URL: http://voyager:52060/metorial-voyager - OBJECT_STORAGE_URL: http://object-storage:52010 - MESSAGE_BUCKET_NAME: messages - SHUTTLE_URL: http://shuttle:52080/metorial-shuttle - SHUTTLE_LIVE_URL: http://shuttle:52080 - SHUTTLE_PUBLIC_URL: http://localhost:52081 - SLATES_HUB_PUBLIC_URL: http://localhost:52045 - ORIGIN_URL: http://origin:52090/metorial-origin - REGISTRY_URL: https://metorial-saas-staging.registry.metorial-enterprise.com/metorial-registry-root - - volumes: - - ./apps/worker:/app/src/systems/subspace/apps/worker:ro - - /app/node_modules - - ./modules:/app/src/systems/subspace/modules:ro - - ./packages:/app/src/systems/subspace/packages:ro - - ./provider-backends:/app/src/systems/subspace/provider-backends:ro - - ./db:/app/src/systems/subspace/db - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - object-storage: - condition: service_healthy - slates-registry: - condition: service_healthy - forge: - condition: service_healthy - function-bay: - condition: service_healthy - signal: - condition: service_healthy - voyager: - condition: service_healthy - slates-hub: - condition: service_healthy - shuttle: - condition: service_healthy - subspace-controller: - condition: service_healthy - nats-1: - condition: service_started - networks: - - subspace-network - -volumes: - postgres_data3: - driver: local - object-store-data: - driver: local - -networks: - subspace-network: - driver: bridge diff --git a/src/systems/subspace/init-test-db.sh b/src/systems/subspace/init-test-db.sh deleted file mode 100755 index 7534d06af..000000000 --- a/src/systems/subspace/init-test-db.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -set -e - -# Create databases for CI/local-compose services if they don't exist -dbs="subspace subspace-test slates-hub slates-registry forge function-bay signal voyager voyager-search shuttle cargo-test cargo origin" -for db in $dbs; do - exists=$(psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -tAc "SELECT 1 FROM pg_database WHERE datname='${db}'") - if [ "$exists" != "1" ]; then - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ - -c "CREATE DATABASE \"${db}\";" - fi -done - -echo "Database initialization complete" diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index 678c699fd..f4847c49b 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -9,9 +9,10 @@ import { } from './graph/format'; import { resolveGraph } from './graph/resolver'; import { generateCompose } from './compose/generator'; -import { getRegistry, resolveService, resolveTargets } from './registry'; +import { getRegistry, resolveService, resolveTargets, resolveBuildTargets } from './registry'; import { planExecutionOrder } from './graph/planner'; import { runControlTargets } from './run/runner'; +import { runBuildTargets } from './run/build'; import { formatControlError, InvalidFlagsError } from './errors'; import { createLogger, isVerbose } from './log'; import { formatRunPlan } from './log/formatRunPlan'; @@ -100,25 +101,37 @@ prog .describe('Show test execution order for selected services') .option('--entrypoint, -e', 'Workspace entrypoint') .option('--all', 'Plan all services with tests for the given mode') - .option('--mode, -m', 'Test mode: e2e or unit', 'e2e') + .option('--mode, -m', 'Plan mode: e2e, unit, or build', 'e2e') .option('--filter, -f', 'Filter by service name') .action(async (target: string | undefined, opts: { entrypoint?: string; all?: boolean; mode?: string; filter?: string }) => { await runCommand(async () => { - if (opts.mode && opts.mode !== 'e2e' && opts.mode !== 'unit') { - throw new InvalidFlagsError('Mode must be e2e or unit'); + if (opts.mode && opts.mode !== 'e2e' && opts.mode !== 'unit' && opts.mode !== 'build') { + throw new InvalidFlagsError('Mode must be e2e, unit, or build'); } - let mode = (opts.mode === 'unit' ? 'unit' : 'e2e') as 'e2e' | 'unit'; + let mode = (opts.mode === 'unit' ? 'unit' : opts.mode === 'build' ? 'build' : 'e2e') as + | 'e2e' + | 'unit' + | 'build'; let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); let filters = collectFilters(process.argv); - let services = resolveTargets({ - registry, - cwd: resolveControlCwd(), - target, - all: opts.all, - filters: filters.length ? filters : undefined, - mode - }); + let services = + mode === 'build' + ? resolveBuildTargets({ + registry, + cwd: resolveControlCwd(), + target, + all: opts.all, + filters: filters.length ? filters : undefined + }) + : resolveTargets({ + registry, + cwd: resolveControlCwd(), + target, + all: opts.all, + filters: filters.length ? filters : undefined, + mode + }); let ordered = planExecutionOrder(services, registry); console.log( @@ -126,7 +139,7 @@ prog mode, controlRoot: registry.controlRoot, services: ordered, - title: 'Control test plan' + title: mode === 'build' ? 'Control build plan' : 'Control test plan' }) ); }); @@ -193,6 +206,44 @@ let addRunCommand = (mode: 'e2e' | 'unit', name: string) => { addRunCommand('e2e', 'e2e'); addRunCommand('unit', 'unit'); +prog + .command('build [target]') + .describe('Build prod runner Docker images for selected services') + .option('--entrypoint, -e', 'Workspace entrypoint') + .option('--all', 'Build all services with [service] config') + .option('--filter, -f', 'Build named services') + .option('--verbose, -v', 'Verbose output') + .option('--tag-prefix', 'Image tag prefix', 'control') + .action(async (target: string | undefined, opts: { + entrypoint?: string; + all?: boolean; + verbose?: boolean; + 'tag-prefix'?: string; + filter?: string; + }) => { + await runCommand(async () => { + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let filters = collectFilters(process.argv); + + let services = resolveBuildTargets({ + registry, + cwd: resolveControlCwd(), + target, + all: opts.all, + filters: filters.length ? filters : undefined + }); + + let ordered = planExecutionOrder(services, registry); + + await runBuildTargets({ + entrypoint: opts.entrypoint, + verbose: opts.verbose, + tagPrefix: opts['tag-prefix'], + services: ordered + }); + }, { verbose: opts.verbose }); + }); + prog .command('ci [target]') .describe('CI entrypoint (e2e or unit)') diff --git a/src/tooling/control/src/compose/builds.ts b/src/tooling/control/src/compose/builds.ts new file mode 100644 index 000000000..3df5cfe84 --- /dev/null +++ b/src/tooling/control/src/compose/builds.ts @@ -0,0 +1,82 @@ +import { resolve } from 'path'; +import type { ResolvedDep, ResolvedGraph } from '../types'; + +export type DockerBuildConfig = { + context: string; + dockerfile: string; + target: string; +}; + +export type DockerBuildSpec = DockerBuildConfig & { + name: string; +}; + +export let resolveBuild = ( + graph: ResolvedGraph, + opts?: { role: 'test-runner' | 'service' } +): DockerBuildConfig => { + let svc = graph.config.service!; + let dockerfile = svc.dockerfile ?? 'Dockerfile'; + let target = svc.docker_target ?? (opts?.role === 'test-runner' ? 'workspace' : 'runner'); + + if (svc.build_context === 'oss') { + return { + context: graph.ossRoot, + dockerfile: dockerfile.startsWith('./') ? dockerfile : `./${dockerfile.replace(/^\.\//, '')}`, + target + }; + } + + let context = resolve(graph.dir, svc.build_context ?? '.'); + return { context, dockerfile, target }; +}; + +let buildKey = (build: DockerBuildConfig) => + `${build.context}::${build.dockerfile}::${build.target}`; + +let addRunnerBuild = ( + specs: Map, + name: string, + graph: ResolvedGraph +) => { + if (!graph.config.service) return; + + let build = resolveBuild(graph, { role: 'service' }); + let key = buildKey(build); + if (!specs.has(key)) { + specs.set(key, { name, ...build }); + } +}; + +let collectControlRunnerBuilds = ( + specs: Map, + dep: ResolvedDep +) => { + if (dep.kind !== 'control' || !dep.children) return; + + let scope = dep.config.scope ?? 'service'; + if (scope === 'service') { + addRunnerBuild(specs, dep.children.name, dep.children); + return; + } + + for (let childDep of dep.children.deps) { + if (childDep.kind === 'control' && childDep.config.scope === 'service' && childDep.children) { + addRunnerBuild(specs, childDep.children.name, childDep.children); + } + } + + addRunnerBuild(specs, dep.children.name, dep.children); +}; + +export let collectRunnerBuilds = (graph: ResolvedGraph): DockerBuildSpec[] => { + let specs = new Map(); + + addRunnerBuild(specs, graph.name, graph); + + for (let dep of graph.deps) { + collectControlRunnerBuilds(specs, dep); + } + + return [...specs.values()].sort((a, b) => a.name.localeCompare(b.name)); +}; diff --git a/src/tooling/control/src/compose/databaseInit.ts b/src/tooling/control/src/compose/databaseInit.ts new file mode 100644 index 000000000..076e23df1 --- /dev/null +++ b/src/tooling/control/src/compose/databaseInit.ts @@ -0,0 +1,26 @@ +import type { ResolvedDatabase } from '../types'; + +export let generatePostgresInitScript = (databases: ResolvedDatabase[]): string => { + if (databases.length === 0) return ''; + + let names = databases.map(db => db.name); + let lines = [ + '#!/bin/sh', + 'set -e', + '', + `# Generated by control — creates ${names.length} database(s)`, + `dbs="${names.join(' ')}"`, + 'for db in $dbs; do', + ' exists=$(psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \\', + ' -tAc "SELECT 1 FROM pg_database WHERE datname=\'${db}\'")', + ' if [ "$exists" != "1" ]; then', + ' psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \\', + ' -c "CREATE DATABASE \\"${db}\\";"', + ' fi', + 'done', + '', + 'echo "Database initialization complete"' + ]; + + return lines.join('\n') + '\n'; +}; diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index 6006a50d0..b99f14ed4 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -4,6 +4,11 @@ import type { ResolvedDep, ResolvedGraph } from '../types'; import { MOCK_DEFINITIONS } from '../types'; import { controlToolingDir } from '../entrypoint'; import { interpolateEnv, mergeEnv } from '../graph/env'; +import { resolveBuild } from './builds'; + +export type ComposeOptions = { + postgresInitScripts?: Record; +}; let networkConfig = (alias: string) => ({ 'control-network': { @@ -11,21 +16,6 @@ let networkConfig = (alias: string) => ({ } }); -let resolveBuild = (graph: ResolvedGraph) => { - let svc = graph.config.service!; - let dockerfile = svc.dockerfile ?? 'dev.Dockerfile'; - - if (svc.build_context === 'oss') { - return { - context: graph.ossRoot, - dockerfile: dockerfile.startsWith('./') ? dockerfile : `./${dockerfile.replace(/^\.\//, '')}` - }; - } - - let context = resolve(graph.dir, svc.build_context ?? '.'); - return { context, dockerfile: svc.dockerfile ?? 'dev.Dockerfile' }; -}; - let defaultServiceHealth = (port: number, path = '/') => ({ test: [ 'CMD-SHELL', @@ -45,11 +35,17 @@ let resolveServiceHealth = (graph: ResolvedGraph) => { return defaultServiceHealth(svc.port, svc.health?.path ?? '/'); }; +let envContext = (graph: ResolvedGraph) => ({ + depHosts: graph.depHosts, + databases: graph.databases +}); + let resolveControlServiceEnv = (dep: ResolvedDep, graph: ResolvedGraph): Record => { if (!dep.children) return {}; - let childEnv = interpolateEnv(dep.children.config.env ?? {}, graph.depHosts); - let depEnv = dep.config.env ? interpolateEnv(dep.config.env, graph.depHosts) : {}; + let ctx = envContext(graph); + let childEnv = interpolateEnv(dep.children.config.env ?? {}, ctx); + let depEnv = dep.config.env ? interpolateEnv(dep.config.env, ctx) : {}; return mergeEnv(childEnv, depEnv); }; @@ -87,7 +83,7 @@ let buildControlService = (dep: ResolvedDep, graph: ResolvedGraph, containerName if (!dep.children) throw new Error(`Control dependency "${dep.name}" is missing resolved child graph`); let child = dep.children; - let build = resolveBuild(child); + let build = resolveBuild(child, { role: 'service' }); let health = resolveServiceHealth(child); let dependsOn = resolveControlDependsOn(dep, graph); @@ -102,7 +98,11 @@ let buildControlService = (dep: ResolvedDep, graph: ResolvedGraph, containerName }; }; -let presetPostgres = (dep: ResolvedDep, containerName: string) => { +let presetPostgres = ( + dep: ResolvedDep, + containerName: string, + initScriptPath?: string +) => { let env = dep.config.env ?? { POSTGRES_USER: 'postgres', POSTGRES_PASSWORD: 'postgres', @@ -115,10 +115,8 @@ let presetPostgres = (dep: ResolvedDep, containerName: string) => { }; let serviceVolumes = [`${dep.composeName}-data:/var/lib/postgresql/data`]; - if (dep.config.init) { - serviceVolumes.push( - `${resolve(dep.sourceDir, dep.config.init)}:/docker-entrypoint-initdb.d/init-test-db.sh:ro` - ); + if (initScriptPath) { + serviceVolumes.push(`${initScriptPath}:/docker-entrypoint-initdb.d/init-databases.sh:ro`); } return { @@ -203,8 +201,12 @@ let inlineService = (dep: ResolvedDep, graph: ResolvedGraph, containerName: stri let build = inline.build ? { - context: inline.build.context === 'oss' ? graph.ossRoot : resolve(dep.sourceDir, inline.build.context), - dockerfile: inline.build.dockerfile + context: + inline.build.context === 'oss' ? graph.ossRoot : resolve(dep.sourceDir, inline.build.context), + dockerfile: inline.build.dockerfile.startsWith('./') + ? inline.build.dockerfile + : `./${inline.build.dockerfile.replace(/^\.\//, '')}`, + target: inline.build.target ?? 'workspace' } : undefined; @@ -222,7 +224,7 @@ let inlineService = (dep: ResolvedDep, graph: ResolvedGraph, containerName: stri container_name: containerName, restart: 'unless-stopped', ...(dep.config.env - ? { environment: interpolateEnv(dep.config.env, graph.depHosts) } + ? { environment: interpolateEnv(dep.config.env, envContext(graph)) } : {}), command: inline.command, healthcheck: health, @@ -232,9 +234,20 @@ let inlineService = (dep: ResolvedDep, graph: ResolvedGraph, containerName: stri }; }; -let buildLeafDep = (dep: ResolvedDep, graph: ResolvedGraph, containerName: string) => { +let buildLeafDep = ( + dep: ResolvedDep, + graph: ResolvedGraph, + containerName: string, + composeOptions?: ComposeOptions +) => { if (dep.kind === 'preset') { - if (dep.config.preset === 'postgres') return presetPostgres(dep, containerName); + if (dep.config.preset === 'postgres') { + return presetPostgres( + dep, + containerName, + composeOptions?.postgresInitScripts?.[dep.name] + ); + } if (dep.config.preset === 'redis') return presetRedis(dep, containerName); if (dep.config.preset === 'nats') return presetNats(dep, containerName); } @@ -256,7 +269,11 @@ export let collectContainerNames = (graph: ResolvedGraph, projectName: string): return names; }; -export let generateComposeServices = (graph: ResolvedGraph, projectName: string) => { +export let generateComposeServices = ( + graph: ResolvedGraph, + projectName: string, + composeOptions?: ComposeOptions +) => { let services: Record = {}; let volumes: Record = {}; let dependsOn: Record = {}; @@ -311,7 +328,8 @@ export let generateComposeServices = (graph: ResolvedGraph, projectName: string) sourceDir: dep.children!.dir }, dep.children!, - childContainerName + childContainerName, + composeOptions ); services[childComposeName] = leaf.service; Object.assign(volumes, leaf.volumes); @@ -326,13 +344,13 @@ export let generateComposeServices = (graph: ResolvedGraph, projectName: string) } seen.add(dep.name); - let built = buildLeafDep(dep, graph, containerName); + let built = buildLeafDep(dep, graph, containerName, composeOptions); services[dep.composeName] = built.service; Object.assign(volumes, built.volumes); dependsOn[dep.composeName] = depWaitCondition(dep, built.hasHealth ?? true); } - let build = resolveBuild(graph); + let build = resolveBuild(graph, { role: 'test-runner' }); let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; let runnerKey = graph.testRunnerComposeName; let runnerContainer = isSidecar @@ -361,8 +379,12 @@ export let generateComposeServices = (graph: ResolvedGraph, projectName: string) return { services, volumes }; }; -export let generateCompose = (graph: ResolvedGraph, projectName: string) => { - let { services, volumes } = generateComposeServices(graph, projectName); +export let generateCompose = ( + graph: ResolvedGraph, + projectName: string, + composeOptions?: ComposeOptions +) => { + let { services, volumes } = generateComposeServices(graph, projectName, composeOptions); return stringify({ name: projectName, services, diff --git a/src/tooling/control/src/errors.ts b/src/tooling/control/src/errors.ts index 6587c3166..93af687b8 100644 --- a/src/tooling/control/src/errors.ts +++ b/src/tooling/control/src/errors.ts @@ -37,6 +37,16 @@ export class UnknownServiceError extends ControlError { } } +export class NoBuildError extends ControlError { + constructor(opts: { name: string }) { + super({ + code: 'no_build', + message: `Service "${opts.name}" has no [service] build config`, + hint: 'Run `control ls` to see services with Docker build configuration' + }); + } +} + export class NoTestError extends ControlError { constructor(opts: { name: string; mode: 'e2e' | 'unit' }) { super({ diff --git a/src/tooling/control/src/graph/databases.ts b/src/tooling/control/src/graph/databases.ts new file mode 100644 index 000000000..09677014a --- /dev/null +++ b/src/tooling/control/src/graph/databases.ts @@ -0,0 +1,100 @@ +import type { + ControlDatabase, + ResolvedDatabase, + ResolvedDep, + ResolvedGraph +} from '../types'; +import { PRESET_PORTS } from '../types'; + +let collectFromGraph = (graph: ResolvedGraph): ControlDatabase[] => { + let databases: ControlDatabase[] = [...(graph.config.databases ?? [])]; + + for (let dep of graph.deps) { + if (dep.kind === 'control' && dep.children && (dep.config.scope ?? 'service') === 'service') { + databases.push(...(dep.children.config.databases ?? [])); + } + } + + return databases; +}; + +export let collectDatabases = (graph: ResolvedGraph): ControlDatabase[] => { + let seen = new Map(); + + for (let db of collectFromGraph(graph)) { + let key = `${db.adapter}:${db.name}`; + let existing = seen.get(key); + if (existing) { + let dep = db.dep ?? 'postgres'; + let existingDep = existing.dep ?? 'postgres'; + if (existingDep !== dep || (existing.owner ?? '') !== (db.owner ?? '')) { + throw new Error( + `Conflicting database declaration for "${db.name}": ${JSON.stringify(existing)} vs ${JSON.stringify(db)}` + ); + } + continue; + } + seen.set(key, db); + } + + return [...seen.values()].sort((a, b) => a.name.localeCompare(b.name)); +}; + +let findPostgresDep = (graph: ResolvedGraph, depName: string): ResolvedDep | undefined => + graph.deps.find(d => d.name === depName && d.kind === 'preset' && d.config.preset === 'postgres'); + +let resolvePostgresDatabase = ( + db: ControlDatabase, + graph: ResolvedGraph +): ResolvedDatabase => { + if (db.adapter !== 'postgres') { + throw new Error(`Unsupported database adapter "${db.adapter}" for database "${db.name}"`); + } + + let depName = db.dep ?? 'postgres'; + let postgresDep = findPostgresDep(graph, depName); + if (!postgresDep) { + throw new Error(`Database "${db.name}" references postgres dep "${depName}" which is not in the graph`); + } + + let depEnv = postgresDep.config.env ?? { + POSTGRES_USER: 'postgres', + POSTGRES_PASSWORD: 'postgres', + POSTGRES_DB: 'postgres' + }; + + let user = db.owner ?? depEnv.POSTGRES_USER ?? 'postgres'; + let password = depEnv.POSTGRES_PASSWORD ?? 'postgres'; + let host = postgresDep.alias; + let port = postgresDep.port ?? PRESET_PORTS.postgres ?? 5432; + + return { + name: db.name, + adapter: 'postgres', + dep: depName, + owner: user, + user, + password, + host, + port, + encoding: db.encoding ?? 'UTF8' + }; +}; + +export let resolveDatabases = (graph: ResolvedGraph): Record => { + let databases: Record = {}; + + for (let db of collectDatabases(graph)) { + databases[db.name] = resolvePostgresDatabase(db, graph); + } + + return databases; +}; + +export let postgresDatabasesForDep = ( + graph: ResolvedGraph, + depName: string +): ResolvedDatabase[] => + Object.values(graph.databases ?? {}).filter( + db => db.adapter === 'postgres' && db.dep === depName + ); diff --git a/src/tooling/control/src/graph/env.ts b/src/tooling/control/src/graph/env.ts index b7150b584..b8325a02f 100644 --- a/src/tooling/control/src/graph/env.ts +++ b/src/tooling/control/src/graph/env.ts @@ -1,12 +1,49 @@ +import type { ResolvedDatabase } from '../types'; + +export type InterpolateEnvContext = { + depHosts: Record; + databases?: Record; +}; + +let buildDatabaseUrl = (db: ResolvedDatabase): string => + `postgresql://${db.user}:${db.password}@${db.host}:${db.port}/${db.name}`; + export let interpolateEnv = ( env: Record, - hosts: Record + context: InterpolateEnvContext | Record ): Record => { + let depHosts = + 'depHosts' in context ? context.depHosts : (context as Record); + let databases = 'depHosts' in context ? context.databases : undefined; let result: Record = {}; for (let [key, value] of Object.entries(env)) { - result[key] = value.replace(/\$deps\.([a-zA-Z0-9_-]+)(?:\.(\d+)|\.url)?/g, (match, name, port) => { - let dep = hosts[name]; + let next = value; + + if (databases) { + next = next.replace(/\$db\.([a-zA-Z0-9_-]+)\.url/g, (_match, name: string) => { + let db = databases[name]; + if (!db) throw new Error(`Unknown database "${name}" in env var ${key}=${value}`); + return buildDatabaseUrl(db); + }); + + next = next.replace( + /\$db\.([a-zA-Z0-9_-]+)\.(user|password|name|host|port)/g, + (_match, name: string, field: string) => { + let db = databases[name]; + if (!db) throw new Error(`Unknown database "${name}" in env var ${key}=${value}`); + if (field === 'user') return db.user; + if (field === 'password') return db.password; + if (field === 'name') return db.name; + if (field === 'host') return db.host; + if (field === 'port') return String(db.port); + return _match; + } + ); + } + + next = next.replace(/\$deps\.([a-zA-Z0-9_-]+)(?:\.(\d+)|\.url)?/g, (match, name: string, port?: string) => { + let dep = depHosts[name]; if (!dep) throw new Error(`Unknown dependency "${name}" in env var ${key}=${value}`); if (match.endsWith('.url')) { return `http://${dep.host}:${port ?? dep.port ?? 80}`; @@ -14,6 +51,8 @@ export let interpolateEnv = ( if (port) return `${dep.host}:${port}`; return dep.host; }); + + result[key] = next; } return result; diff --git a/src/tooling/control/src/graph/resolver.ts b/src/tooling/control/src/graph/resolver.ts index 90554cfd0..cffa62dd1 100644 --- a/src/tooling/control/src/graph/resolver.ts +++ b/src/tooling/control/src/graph/resolver.ts @@ -3,6 +3,7 @@ import { join, resolve } from 'path'; import { parse } from 'smol-toml'; import type { ControlConfig, ControlDep, ResolvedDep, ResolvedGraph } from '../types'; import { MOCK_DEFINITIONS, PRESET_PORTS } from '../types'; +import { resolveDatabases } from './databases'; import { interpolateEnv } from './env'; import { resolveControlDir, resolveOssRoot } from '../entrypoint'; import type { ServiceRegistry } from '../types'; @@ -139,7 +140,22 @@ export let resolveGraph = (opts: { resolvedDeps.push(resolved); } - let env = interpolateEnv(config.env ?? {}, depHosts); + let databases = resolveDatabases({ + name, + dir: opts.targetDir, + config, + entrypoint, + ossRoot, + rootPrefix, + deps: resolvedDeps, + depHosts, + databases: {}, + env: {}, + serviceComposeName, + testRunnerComposeName + }); + + let env = interpolateEnv(config.env ?? {}, { depHosts, databases }); return { name, @@ -150,6 +166,7 @@ export let resolveGraph = (opts: { rootPrefix, deps: resolvedDeps, depHosts, + databases, env, serviceComposeName, testRunnerComposeName diff --git a/src/tooling/control/src/log/formatRunPlan.ts b/src/tooling/control/src/log/formatRunPlan.ts index 6f4cc14de..0f5b8c776 100644 --- a/src/tooling/control/src/log/formatRunPlan.ts +++ b/src/tooling/control/src/log/formatRunPlan.ts @@ -1,7 +1,7 @@ import type { ControlService } from '../types'; export let formatRunPlan = (opts: { - mode: 'e2e' | 'unit'; + mode: 'e2e' | 'unit' | 'build'; controlRoot: string; services: ControlService[]; title?: string; @@ -25,7 +25,7 @@ export let formatServiceHeader = (opts: { index: number; total: number; service: ControlService; - mode: 'e2e' | 'unit'; + mode: 'e2e' | 'unit' | 'build'; projectName?: string; }): string => { let lines: string[] = []; @@ -45,7 +45,7 @@ export let formatBatchSummary = (opts: { errorMessage?: string; }[]; totalDurationMs: number; - mode: 'e2e' | 'unit'; + mode: 'e2e' | 'unit' | 'build'; }): string => { let passed = opts.results.filter(r => r.status === 'passed'); let failed = opts.results.filter(r => r.status === 'failed'); diff --git a/src/tooling/control/src/registry.ts b/src/tooling/control/src/registry.ts index de78848d3..b9fb26c22 100644 --- a/src/tooling/control/src/registry.ts +++ b/src/tooling/control/src/registry.ts @@ -5,6 +5,7 @@ import { DuplicateServiceError, InvalidFlagsError, listServiceNames, + NoBuildError, NoTestError, NotInServiceDirError, suggestServiceName, @@ -127,13 +128,16 @@ export let resolveControlDepTarget = ( } }; -export let resolveTargets = (opts: { +export let hasBuild = (service: ControlService): boolean => !!service.config.service; + +export let resolveSelectionTargets = (opts: { registry: ServiceRegistry; cwd: string; target?: string; all?: boolean; filters?: string[]; - mode?: 'e2e' | 'unit'; + allServices: () => ControlService[]; + validate: (service: ControlService) => void; }): ControlService[] => { if (opts.all && opts.filters?.length) { throw new InvalidFlagsError( @@ -143,12 +147,10 @@ export let resolveTargets = (opts: { } if (opts.all) { - if (!opts.mode) throw new InvalidFlagsError('Mode is required when using --all'); - return opts.registry.services.filter(s => hasTest(s, opts.mode!)); + return opts.allServices(); } if (opts.filters?.length) { - if (!opts.mode) throw new InvalidFlagsError('Mode is required when using --filter'); return opts.filters.map(name => { let service = opts.registry.byName.get(name); if (!service) { @@ -159,15 +161,15 @@ export let resolveTargets = (opts: { suggestion: suggestServiceName(name, known) }); } - if (!hasTest(service, opts.mode!)) { - throw new NoTestError({ name, mode: opts.mode! }); - } + opts.validate(service); return service; }); } if (opts.target) { - return [resolveService(opts.registry, opts.target)]; + let service = resolveService(opts.registry, opts.target); + opts.validate(service); + return [service]; } let service = findServiceForCwd(opts.registry, opts.cwd); @@ -178,11 +180,53 @@ export let resolveTargets = (opts: { }); } - if (opts.mode && !hasTest(service, opts.mode)) { - throw new NoTestError({ name: service.name, mode: opts.mode }); + opts.validate(service); + return [service]; +}; + +export let resolveBuildTargets = (opts: { + registry: ServiceRegistry; + cwd: string; + target?: string; + all?: boolean; + filters?: string[]; +}): ControlService[] => + resolveSelectionTargets({ + ...opts, + allServices: () => opts.registry.services.filter(hasBuild), + validate: service => { + if (!hasBuild(service)) throw new NoBuildError({ name: service.name }); + } + }); + +export let resolveTargets = (opts: { + registry: ServiceRegistry; + cwd: string; + target?: string; + all?: boolean; + filters?: string[]; + mode?: 'e2e' | 'unit'; +}): ControlService[] => { + if ((opts.all || opts.filters?.length) && !opts.mode) { + throw new InvalidFlagsError('Mode is required when using --all or --filter'); } - return [service]; + return resolveSelectionTargets({ + registry: opts.registry, + cwd: opts.cwd, + target: opts.target, + all: opts.all, + filters: opts.filters, + allServices: () => { + if (!opts.mode) throw new InvalidFlagsError('Mode is required when using --all'); + return opts.registry.services.filter(s => hasTest(s, opts.mode!)); + }, + validate: service => { + if (opts.mode && !hasTest(service, opts.mode)) { + throw new NoTestError({ name: service.name, mode: opts.mode }); + } + } + }); }; export let getRegistry = (opts: { cwd: string; entrypoint?: string }): ServiceRegistry => { diff --git a/src/tooling/control/src/run/build.ts b/src/tooling/control/src/run/build.ts new file mode 100644 index 000000000..4ceeaa8a1 --- /dev/null +++ b/src/tooling/control/src/run/build.ts @@ -0,0 +1,185 @@ +import { resolve } from 'path'; +import { collectRunnerBuilds } from '../compose/builds'; +import { resolveGraph } from '../graph/resolver'; +import { resolveControlDir, resolveEntrypoint, resolveControlCwd } from '../entrypoint'; +import { getRegistry } from '../registry'; +import { planExecutionOrder } from '../graph/planner'; +import { createLogger } from '../log'; +import { formatBatchSummary, formatRunPlan, formatServiceHeader } from '../log/formatRunPlan'; +import { DockerError } from '../errors'; +import type { BatchResult, BatchServiceResult, BuildOptions, ControlService } from '../types'; +import { runShell } from './shell'; + +type BuildContext = { + index: number; + total: number; + service: ControlService; +}; + +let imageTag = (opts: { tagPrefix: string; rootName: string; specName: string }) => + `${opts.tagPrefix}/${opts.rootName}-${opts.specName}:local`; + +let runBuildForService = async ( + opts: BuildOptions & { service: ControlService; context?: BuildContext } +) => { + let logger = createLogger(opts); + let cwd = resolveControlCwd(); + let entrypoint = resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); + let registry = getRegistry({ cwd, entrypoint: opts.entrypoint }); + let targetDir = resolveControlDir(entrypoint, opts.service.relPath); + let graph = resolveGraph({ entrypoint, targetDir, registry }); + let tagPrefix = opts.tagPrefix ?? 'control'; + + if (opts.context) { + logger.section( + formatServiceHeader({ + index: opts.context.index, + total: opts.context.total, + service: opts.context.service, + mode: 'build' + }) + ); + } + + let specs = collectRunnerBuilds(graph); + logger.info(`Building ${specs.length} runner image(s) for ${graph.name}...`); + + for (let spec of specs) { + let dockerfilePath = resolve(spec.context, spec.dockerfile); + let tag = imageTag({ tagPrefix, rootName: graph.name, specName: spec.name }); + + logger.info(`Building ${spec.name} (${spec.target}) ...`); + + let cmd = [ + 'docker', + 'build', + '-f', + dockerfilePath, + '--target', + spec.target, + '-t', + tag + ]; + + if (process.env.SENTRY_AUTH_TOKEN) { + cmd.push('--build-arg', `SENTRY_AUTH_TOKEN=${process.env.SENTRY_AUTH_TOKEN}`); + } + + cmd.push(spec.context); + + await runShell(cmd, { + phase: 'build', + service: graph.name, + verbose: opts.verbose + }); + + logger.success(`✓ ${tag}`); + } +}; + +let getFailedPhase = (err: Error): string | undefined => { + if ('failedPhase' in err && typeof (err as { failedPhase?: string }).failedPhase === 'string') { + return (err as { failedPhase?: string }).failedPhase; + } + if (err instanceof DockerError) return err.phase; + return undefined; +}; + +export let runBuildBatch = async ( + opts: BuildOptions & { services: ControlService[] } +): Promise => { + let logger = createLogger(opts); + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let ordered = planExecutionOrder(opts.services, registry); + let passed: string[] = []; + let failed: { name: string; error: Error; phase?: string }[] = []; + let results: BatchServiceResult[] = []; + let batchStarted = Date.now(); + + for (let i = 0; i < ordered.length; i++) { + let service = ordered[i]!; + let started = Date.now(); + + try { + await runBuildForService({ + ...opts, + service, + context: { index: i + 1, total: ordered.length, service } + }); + let durationMs = Date.now() - started; + passed.push(service.name); + results.push({ + name: service.name, + relPath: service.relPath, + status: 'passed', + durationMs + }); + logger.success(`✓ ${service.name} built (${Math.round(durationMs / 1000)}s)`); + logger.blank(); + } catch (err) { + let error = err instanceof Error ? err : new Error(String(err)); + let phase = getFailedPhase(error); + let durationMs = Date.now() - started; + failed.push({ name: service.name, error, phase }); + results.push({ + name: service.name, + relPath: service.relPath, + status: 'failed', + durationMs, + error, + phase + }); + logger.error(`✗ ${service.name} failed${phase ? ` during ${phase}` : ''}: ${error.message}`); + logger.blank(); + } + } + + let totalDurationMs = Date.now() - batchStarted; + + logger.section( + formatBatchSummary({ + mode: 'build', + totalDurationMs, + results: results.map(r => ({ + name: r.name, + relPath: r.relPath, + status: r.status, + durationMs: r.durationMs, + phase: r.phase, + errorMessage: r.error?.message + })) + }) + ); + + return { passed, failed, results, totalDurationMs }; +}; + +export let runBuildTargets = async (opts: BuildOptions & { services: ControlService[] }) => { + let logger = createLogger(opts); + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let ordered = planExecutionOrder(opts.services, registry); + + logger.section( + formatRunPlan({ + mode: 'build', + controlRoot: registry.controlRoot, + services: ordered, + title: 'Control build' + }) + ); + logger.blank(); + + if (ordered.length === 1) { + await runBuildForService({ + ...opts, + service: ordered[0]!, + context: { index: 1, total: 1, service: ordered[0]! } + }); + return; + } + + let result = await runBuildBatch(opts); + if (result.failed.length > 0) { + process.exit(1); + } +}; diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index d82e71632..07ab84d72 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -1,6 +1,8 @@ -import { mkdirSync, writeFileSync } from 'fs'; +import { mkdirSync, writeFileSync, chmodSync } from 'fs'; import { join } from 'path'; import { generateCompose, collectContainerNames } from '../compose/generator'; +import { generatePostgresInitScript } from '../compose/databaseInit'; +import { postgresDatabasesForDep } from '../graph/databases'; import { resolveGraph } from '../graph/resolver'; import { resolveControlDir, resolveEntrypoint, resolveControlCwd } from '../entrypoint'; import { getRegistry } from '../registry'; @@ -15,6 +17,7 @@ import type { RunOptions, RunPhase } from '../types'; +import { runShell } from './shell'; type RunControlContext = { index: number; @@ -22,36 +25,6 @@ type RunControlContext = { service: ControlService; }; -type ShellOpts = { - cwd?: string; - env?: Record; - phase: RunPhase; - service?: string; - composeFile?: string; - keep?: boolean; - verbose?: boolean; -}; - -let runShell = async (cmd: string[], opts: ShellOpts) => { - let proc = Bun.spawn(cmd, { - cwd: opts.cwd, - env: { ...process.env, ...opts.env }, - stdout: 'inherit', - stderr: 'inherit' - }); - let code = await proc.exited; - if (code !== 0) { - throw new DockerError({ - phase: opts.phase, - command: cmd.join(' '), - exitCode: code, - service: opts.service, - composeFile: opts.composeFile, - keep: opts.keep - }); - } -}; - let waitForServices = async (opts: { services: string[]; verbose?: boolean; @@ -134,9 +107,22 @@ export let runControl = async ( let runDir = join(entrypoint, '.control', 'runs', runId); mkdirSync(runDir, { recursive: true }); + let postgresInitScripts: Record = {}; + for (let dep of graph.deps) { + if (dep.kind !== 'preset' || dep.config.preset !== 'postgres') continue; + + let databases = postgresDatabasesForDep(graph, dep.name); + if (databases.length === 0) continue; + + let initPath = join(runDir, `postgres-init-${dep.name}.sh`); + writeFileSync(initPath, generatePostgresInitScript(databases), { mode: 0o755 }); + chmodSync(initPath, 0o755); + postgresInitScripts[dep.name] = initPath; + } + let composeFile = join(runDir, 'compose.yml'); let envFile = join(runDir, '.env.control'); - writeFileSync(composeFile, generateCompose(graph, projectName)); + writeFileSync(composeFile, generateCompose(graph, projectName, { postgresInitScripts })); let envLines = Object.entries(graph.env).map(([k, v]) => `${k}=${JSON.stringify(v).slice(1, -1)}`); writeFileSync(envFile, envLines.join('\n') + '\n'); diff --git a/src/tooling/control/src/run/shell.ts b/src/tooling/control/src/run/shell.ts new file mode 100644 index 000000000..52b17ce0a --- /dev/null +++ b/src/tooling/control/src/run/shell.ts @@ -0,0 +1,32 @@ +import { DockerError } from '../errors'; +import type { RunPhase } from '../types'; + +export type ShellOpts = { + cwd?: string; + env?: Record; + phase: RunPhase; + service?: string; + composeFile?: string; + keep?: boolean; + verbose?: boolean; +}; + +export let runShell = async (cmd: string[], opts: ShellOpts) => { + let proc = Bun.spawn(cmd, { + cwd: opts.cwd, + env: { ...process.env, ...opts.env }, + stdout: 'inherit', + stderr: 'inherit' + }); + let code = await proc.exited; + if (code !== 0) { + throw new DockerError({ + phase: opts.phase, + command: cmd.join(' '), + exitCode: code, + service: opts.service, + composeFile: opts.composeFile, + keep: opts.keep + }); + } +}; diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts index ebcd74d01..2c5e2c100 100644 --- a/src/tooling/control/src/types.ts +++ b/src/tooling/control/src/types.ts @@ -1,3 +1,23 @@ +export type ControlDatabase = { + adapter: 'postgres'; + name: string; + dep?: string; + owner?: string; + encoding?: string; +}; + +export type ResolvedDatabase = { + name: string; + adapter: 'postgres'; + dep: string; + owner: string; + user: string; + password: string; + host: string; + port: number; + encoding?: string; +}; + export type ControlDep = { name: string; preset?: string; @@ -6,10 +26,9 @@ export type ControlDep = { scope?: 'full' | 'service'; image?: string; env?: Record; - init?: string; port?: number; inline?: { - build?: { context: string; dockerfile: string }; + build?: { context: string; dockerfile: string; target?: string }; image?: string; command?: string[]; port?: number; @@ -25,6 +44,7 @@ export type ControlConfig = { service?: { port?: number; dockerfile?: string; + docker_target?: string; build_context?: string; health?: { path?: string; cmd?: string }; command?: string[]; @@ -43,6 +63,7 @@ export type ControlConfig = { }; }; env?: Record; + databases?: ControlDatabase[]; deps?: ControlDep[]; }; @@ -67,6 +88,7 @@ export type ResolvedGraph = { rootPrefix: string; deps: ResolvedDep[]; depHosts: Record; + databases: Record; env: Record; serviceComposeName: string; testRunnerComposeName: string; @@ -129,6 +151,13 @@ export type GlobalGraph = { edges: GlobalGraphEdge[]; }; +export type BuildOptions = { + entrypoint?: string; + verbose?: boolean; + tagPrefix?: string; + services?: ControlService[]; +}; + export type RunOptions = { target?: string; mode: 'e2e' | 'unit'; From 038025d8493390271ed7f88d89855a8bb3607a67 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 13:25:22 +0200 Subject: [PATCH 03/69] Move tests to control --- .github/workflows/cargo.yml | 79 -------------- .github/workflows/control.yml | 54 ++++++++++ .github/workflows/forge.yml | 79 -------------- .github/workflows/function-bay.yml | 80 -------------- .github/workflows/origin.yml | 70 ------------ .github/workflows/reusable-control.yml | 101 ++++++++++++++++++ .github/workflows/shuttle.yml | 82 -------------- .github/workflows/signal.yml | 60 ----------- .github/workflows/slates.yml | 94 ---------------- .github/workflows/subspace.yml | 100 ----------------- clients/metorial-node | 2 +- src/systems/subspace/apps/public/control.toml | 8 ++ src/systems/subspace/apps/worker/control.toml | 7 ++ 13 files changed, 171 insertions(+), 645 deletions(-) delete mode 100644 .github/workflows/cargo.yml create mode 100644 .github/workflows/control.yml delete mode 100644 .github/workflows/forge.yml delete mode 100644 .github/workflows/function-bay.yml delete mode 100644 .github/workflows/origin.yml create mode 100644 .github/workflows/reusable-control.yml delete mode 100644 .github/workflows/shuttle.yml delete mode 100644 .github/workflows/signal.yml delete mode 100644 .github/workflows/slates.yml delete mode 100644 .github/workflows/subspace.yml create mode 100644 src/systems/subspace/apps/public/control.toml create mode 100644 src/systems/subspace/apps/worker/control.toml diff --git a/.github/workflows/cargo.yml b/.github/workflows/cargo.yml deleted file mode 100644 index 8c5582588..000000000 --- a/.github/workflows/cargo.yml +++ /dev/null @@ -1,79 +0,0 @@ -name: 'Cargo' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Cargo Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/metorial/cargo - tags: | - type=ref,event=branch - type=ref,event=pr - type=sha - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ./src/systems/cargo/service/Dockerfile - platforms: linux/amd64 - push: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} - - test: - name: 'Cargo Test' - permissions: - contents: read - packages: read - uses: metorial/.github/.github/workflows/reusable-e2e-tests.yml@main - secrets: inherit - with: - service_directory: src/systems/cargo/service - compose_project_prefix: cargo-ci - compose_profiles: 'infra service' - wait_services: | - cargo-postgres - cargo-redis - cargo-object-storage - cargo-service - test_container: cargo-service - test_command: cd /app/src/systems/cargo/service && bun run test diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml new file mode 100644 index 000000000..0566047c2 --- /dev/null +++ b/.github/workflows/control.yml @@ -0,0 +1,54 @@ +name: Control + +on: + workflow_dispatch: + push: + pull_request: + +permissions: + contents: read + packages: read + +jobs: + build: + name: Build all services + uses: ./.github/workflows/reusable-control.yml + secrets: inherit + with: + command: build + all: true + runs-on: depot-ubuntu-24.04-4 + + e2e: + name: E2E (${{ matrix.service }}) + uses: ./.github/workflows/reusable-control.yml + secrets: inherit + strategy: + fail-fast: false + matrix: + service: + - cargo + - forge + - function-bay + - shuttle + - signal + - slates-hub + - slates-registry + - subspace-controller + with: + command: ci + mode: e2e + filter: ${{ matrix.service }} + project_prefix: ${{ matrix.service }}-ci + runs-on: depot-ubuntu-24.04-4 + checkout_submodules: ${{ matrix.service == 'subspace-controller' }} + + unit: + name: Unit tests + uses: ./.github/workflows/reusable-control.yml + secrets: inherit + with: + command: ci + mode: unit + all: true + runs-on: depot-ubuntu-24.04-4 diff --git a/.github/workflows/forge.yml b/.github/workflows/forge.yml deleted file mode 100644 index c7455f7c6..000000000 --- a/.github/workflows/forge.yml +++ /dev/null @@ -1,79 +0,0 @@ -name: 'Forge' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Forge Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/metorial/forge - tags: | - type=ref,event=branch - type=ref,event=pr - type=sha - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ./src/systems/forge/service/Dockerfile - platforms: linux/amd64 - push: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} - - test: - name: 'Forge Test' - permissions: - contents: read - packages: read - uses: metorial/.github/.github/workflows/reusable-e2e-tests.yml@main - secrets: inherit - with: - service_directory: src/systems/forge/service - compose_project_prefix: forge-ci - compose_profiles: 'infra service' - wait_services: | - forge-postgres - forge-redis - forge-object-storage - forge-service - test_container: forge-service - test_command: cd /app && bun run test diff --git a/.github/workflows/function-bay.yml b/.github/workflows/function-bay.yml deleted file mode 100644 index bc5fb91e9..000000000 --- a/.github/workflows/function-bay.yml +++ /dev/null @@ -1,80 +0,0 @@ -name: 'Function Bay' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Function Bay Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/metorial/function-bay - tags: | - type=ref,event=branch - type=ref,event=pr - type=sha - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ./src/systems/function-bay/service/Dockerfile - platforms: linux/amd64 - push: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} - - test: - name: 'Function Bay Test' - permissions: - contents: read - packages: read - uses: metorial/.github/.github/workflows/reusable-e2e-tests.yml@main - secrets: inherit - with: - service_directory: src/systems/function-bay/service - compose_project_prefix: function-bay-ci - compose_profiles: 'infra service' - wait_services: | - function-bay-postgres - function-bay-redis - function-bay-object-storage - function-bay-forge - function-bay-service - test_container: function-bay-service - test_command: cd /app/src/systems/function-bay/service && bun run test diff --git a/.github/workflows/origin.yml b/.github/workflows/origin.yml deleted file mode 100644 index 860c43cff..000000000 --- a/.github/workflows/origin.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: 'Origin' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Origin Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - strategy: - matrix: - service: - - name: origin - image: ghcr.io/metorial/mte-origin - dockerfile: ./src/systems/origin/apps/service/Dockerfile - - name: code-bucket - image: ghcr.io/metorial/mte-code-bucket - dockerfile: ./src/systems/origin/apps/code-bucket/Dockerfile - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ matrix.service.image }} - tags: | - type=ref,event=branch - type=ref,event=pr - type=sha - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ${{ matrix.service.dockerfile }} - platforms: linux/amd64 - push: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml new file mode 100644 index 000000000..42a4c6fb8 --- /dev/null +++ b/.github/workflows/reusable-control.yml @@ -0,0 +1,101 @@ +name: Reusable Control + +on: + workflow_call: + inputs: + command: + description: 'Control command: build or ci' + required: true + type: string + mode: + description: 'Test mode (e2e or unit) when command is ci' + required: false + type: string + filter: + description: 'Service name to pass to --filter' + required: false + type: string + all: + description: 'Pass --all to control' + required: false + default: false + type: boolean + project_prefix: + description: 'Optional docker compose project prefix for ci' + required: false + type: string + runs-on: + description: 'Runner label' + required: false + default: depot-ubuntu-24.04-4 + type: string + checkout_submodules: + description: 'Whether to checkout submodules recursively' + required: false + default: false + type: boolean + +jobs: + control: + name: Control ${{ inputs.command }} ${{ inputs.filter }} + runs-on: ${{ inputs.runs-on }} + permissions: + contents: read + packages: read + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: ${{ inputs.checkout_submodules && 'recursive' || 'false' }} + token: ${{ secrets.GH_TOKEN }} + + - uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: '1.2.20' + + - name: Install packages + run: bun i --linker=hoisted + + - name: Generate Prisma Clients + run: bunx turbo run --ui=stream --concurrency=1 prisma:generate + + - name: Run control + env: + CONTROL_VERBOSE: '1' + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + run: | + set -euo pipefail + + if [ "${{ inputs.command }}" = "build" ]; then + ARGS=(build) + if [ "${{ inputs.all }}" = "true" ]; then + ARGS+=(--all) + elif [ -n "${{ inputs.filter }}" ]; then + ARGS+=(--filter "${{ inputs.filter }}") + fi + elif [ "${{ inputs.command }}" = "ci" ]; then + if [ -z "${{ inputs.mode }}" ]; then + echo "mode is required when command is ci" >&2 + exit 1 + fi + ARGS=(ci "${{ inputs.mode }}") + if [ "${{ inputs.all }}" = "true" ]; then + ARGS+=(--all) + elif [ -n "${{ inputs.filter }}" ]; then + ARGS+=(--filter "${{ inputs.filter }}") + fi + if [ -n "${{ inputs.project_prefix }}" ]; then + ARGS+=(--project-prefix "${{ inputs.project_prefix }}") + fi + else + echo "Unsupported command: ${{ inputs.command }}" >&2 + exit 1 + fi + + bun run control "${ARGS[@]}" diff --git a/.github/workflows/shuttle.yml b/.github/workflows/shuttle.yml deleted file mode 100644 index 5613a94fd..000000000 --- a/.github/workflows/shuttle.yml +++ /dev/null @@ -1,82 +0,0 @@ -name: 'Shuttle' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Shuttle Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/metorial/shuttle - tags: | - type=ref,event=branch - type=ref,event=pr - type=sha - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ./src/systems/shuttle/service/Dockerfile - # platforms: linux/amd64,linux/arm64 - platforms: linux/amd64 - push: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} - - # test: - # name: 'Shuttle Test' - # permissions: - # contents: read - # packages: read - # uses: metorial/.github/.github/workflows/reusable-e2e-tests.yml@main - # secrets: inherit - # with: - # service_directory: src/systems/shuttle/service - # compose_project_prefix: shuttle-ci - # compose_profiles: 'infra service' - # wait_services: | - # shuttle-postgres - # shuttle-redis - # shuttle-object-storage - # shuttle-forge - # shuttle-function-bay - # @metorial/shuttle - # test_container: @metorial/shuttle - # test_command: cd /app/src/systems/shuttle/service && bun run test diff --git a/.github/workflows/signal.yml b/.github/workflows/signal.yml deleted file mode 100644 index 4f7be7035..000000000 --- a/.github/workflows/signal.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: 'Signal' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Signal Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/metorial/signal - tags: | - type=ref,event=branch - type=ref,event=pr - type=sha - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ./src/systems/signal/service/Dockerfile - platforms: linux/amd64 - push: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} diff --git a/.github/workflows/slates.yml b/.github/workflows/slates.yml deleted file mode 100644 index 81fc6c422..000000000 --- a/.github/workflows/slates.yml +++ /dev/null @@ -1,94 +0,0 @@ -name: 'Slates' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Slates Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - strategy: - matrix: - service: - - name: hub - image: ghcr.io/metorial/slates-hub - dockerfile: ./src/systems/slates/apps/hub/Dockerfile - - name: registry - image: ghcr.io/metorial/slates-registry - dockerfile: ./src/systems/slates/apps/registry/Dockerfile - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ matrix.service.image }} - tags: | - type=ref,event=branch - type=ref,event=pr - type=sha - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ${{ matrix.service.dockerfile }} - # platforms: linux/amd64,linux/arm64 - platforms: linux/amd64 - push: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} - - test: - name: 'Slates Hub Test' - permissions: - contents: read - packages: read - uses: metorial/.github/.github/workflows/reusable-e2e-tests.yml@main - secrets: inherit - with: - service_directory: src/systems/slates/apps/hub - compose_project_prefix: slates-hub-ci - compose_profiles: 'hub infra' - wait_mode: healthy - wait_services: | - slates-hub-postgres - slates-hub-redis - slates-hub-object-storage - slates-hub-forge - slates-hub-signal - slates-hub-function-bay - slates-hub-registry - test_container: slates-hub-service - test_command: cd /app/src/systems/slates/apps/hub && bun run test diff --git a/.github/workflows/subspace.yml b/.github/workflows/subspace.yml deleted file mode 100644 index 79d3deb70..000000000 --- a/.github/workflows/subspace.yml +++ /dev/null @@ -1,100 +0,0 @@ -name: 'Subspace' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Subspace Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: read - - strategy: - matrix: - service: - - name: controller - dockerfile: ./src/systems/subspace/apps/controller/Dockerfile - - name: worker - dockerfile: ./src/systems/subspace/apps/worker/Dockerfile - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - submodules: 'recursive' - token: ${{ secrets.GH_TOKEN }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build ${{ matrix.service.name }} Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ${{ matrix.service.dockerfile }} - push: false - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} - - public: - name: 'Subspace Public' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: read - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - submodules: 'recursive' - token: ${{ secrets.GH_TOKEN }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build public Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ./src/systems/subspace/apps/public/Dockerfile - push: false - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} - - test: - name: 'Subspace Test' - permissions: - contents: read - packages: read - uses: metorial/.github/.github/workflows/reusable-e2e-tests.yml@main - secrets: inherit - with: - service_directory: src/systems/subspace - compose_project_prefix: subspace-ci - compose_profiles: 'infra' - wait_services: | - subspace-postgres - subspace-redis - subspace-object-storage - subspace-forge - subspace-function-bay - subspace-signal - subspace-voyager - subspace-slates-registry - subspace-slates-hub - subspace-shuttle - subspace-mcp-test-server - subspace-controller-test-service - test_container: subspace-controller-test-service - test_command: cd /app/src/systems/subspace/apps/controller && set -a && . ./.env.ci && set +a && bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts && bunx prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts && bun run test:ci diff --git a/clients/metorial-node b/clients/metorial-node index 66d20b092..d77f5c8dc 160000 --- a/clients/metorial-node +++ b/clients/metorial-node @@ -1 +1 @@ -Subproject commit 66d20b092f911c8f326fd97f6462188c5eb339b2 +Subproject commit d77f5c8dc2f4b9f217370e912a36919b256d9955 diff --git a/src/systems/subspace/apps/public/control.toml b/src/systems/subspace/apps/public/control.toml new file mode 100644 index 000000000..5351796c4 --- /dev/null +++ b/src/systems/subspace/apps/public/control.toml @@ -0,0 +1,8 @@ +[control] +name = "subspace-public" + +[service] +port = 52071 +dockerfile = "src/systems/subspace/apps/public/Dockerfile" +build_context = "oss" +health = { path = "/ping" } diff --git a/src/systems/subspace/apps/worker/control.toml b/src/systems/subspace/apps/worker/control.toml new file mode 100644 index 000000000..e82abb443 --- /dev/null +++ b/src/systems/subspace/apps/worker/control.toml @@ -0,0 +1,7 @@ +[control] +name = "subspace-worker" + +[service] +dockerfile = "src/systems/subspace/apps/worker/Dockerfile" +build_context = "oss" +health = { cmd = "curl -f http://localhost:12121/ || exit 1" } From 932b5c1c81509121471a3345fc5d3a2ddbbb7541 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 13:47:26 +0200 Subject: [PATCH 04/69] Fix ci --- .github/workflows/control.yml | 29 ++- src/systems/cargo/service/control.toml | 8 +- src/systems/cargo/service/package.json | 4 +- .../cargo/service/vitest.unit.config.ts | 9 + src/systems/forge/service/control.toml | 9 +- src/systems/forge/service/package.json | 4 +- .../forge/service/vitest.unit.config.ts | 9 + src/systems/function-bay/service/control.toml | 5 +- src/systems/function-bay/service/package.json | 4 +- .../service/vitest.unit.config.ts | 15 ++ src/systems/shuttle/service/control.toml | 7 +- src/systems/shuttle/service/package.json | 4 +- src/systems/signal/service/control.toml | 5 +- src/systems/signal/service/package.json | 4 +- .../signal/service/vitest.unit.config.ts | 18 ++ src/systems/slates/apps/hub/control.toml | 5 +- src/systems/slates/apps/hub/package.json | 4 +- ...upCron.test.ts => cleanupCron.e2e.test.ts} | 0 src/systems/slates/apps/registry/control.toml | 5 +- .../subspace/apps/controller/control.toml | 8 + .../subspace/apps/controller/package.json | 3 +- .../apps/controller/vitest.unit.config.ts | 13 ++ src/tooling/control/src/run/runner.ts | 23 +-- src/tooling/control/src/run/unit.ts | 179 ++++++++++++++++++ src/tooling/control/src/types.ts | 1 + 25 files changed, 323 insertions(+), 52 deletions(-) create mode 100644 src/systems/cargo/service/vitest.unit.config.ts create mode 100644 src/systems/forge/service/vitest.unit.config.ts create mode 100644 src/systems/function-bay/service/vitest.unit.config.ts create mode 100644 src/systems/signal/service/vitest.unit.config.ts rename src/systems/slates/apps/hub/src/test/{cleanupCron.test.ts => cleanupCron.e2e.test.ts} (100%) create mode 100644 src/systems/subspace/apps/controller/vitest.unit.config.ts create mode 100644 src/tooling/control/src/run/unit.ts diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index 0566047c2..4625ba87c 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -19,8 +19,8 @@ jobs: all: true runs-on: depot-ubuntu-24.04-4 - e2e: - name: E2E (${{ matrix.service }}) + unit: + name: Unit (${{ matrix.service }}) uses: ./.github/workflows/reusable-control.yml secrets: inherit strategy: @@ -37,18 +37,29 @@ jobs: - subspace-controller with: command: ci - mode: e2e + mode: unit filter: ${{ matrix.service }} - project_prefix: ${{ matrix.service }}-ci runs-on: depot-ubuntu-24.04-4 - checkout_submodules: ${{ matrix.service == 'subspace-controller' }} - unit: - name: Unit tests + e2e: + name: E2E (${{ matrix.service }}) uses: ./.github/workflows/reusable-control.yml secrets: inherit + strategy: + fail-fast: false + matrix: + service: + - cargo + - forge + - function-bay + - shuttle + - signal + - slates-hub + - subspace-controller with: command: ci - mode: unit - all: true + mode: e2e + filter: ${{ matrix.service }} + project_prefix: ${{ matrix.service }}-ci runs-on: depot-ubuntu-24.04-4 + checkout_submodules: ${{ matrix.service == 'subspace-controller' }} diff --git a/src/systems/cargo/service/control.toml b/src/systems/cargo/service/control.toml index 2e3ce985a..17e226edd 100644 --- a/src/systems/cargo/service/control.toml +++ b/src/systems/cargo/service/control.toml @@ -7,8 +7,11 @@ dockerfile = "src/systems/cargo/service/Dockerfile" build_context = "oss" health = { path = "/ping", cmd = "bun -e \"fetch('http://localhost:52151/ping').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" } +[test.unit] +command = "bun run test:unit" + [test.e2e] -command = "bun run test" +command = "bun run test:e2e" setup = ["bun prisma generate --schema ../db/prisma/schema --config ../db/prisma.config.ts", "bun prisma db push --accept-data-loss --schema ../db/prisma/schema --config ../db/prisma.config.ts"] cwd = "/app/src/systems/cargo/service" runner = "service" @@ -38,6 +41,9 @@ DOWNLOAD_PUBLIC_URL = "http://cargo-content.test" CARGO_REGION = "tst" SIGNED_DOWNLOAD_URL_TOKEN_SECRET = "cargo-download-test-secret" METORIAL_ENV = "development" +API_URL = "http://cargo-api.test" +ORIGIN_URL = "http://origin.test/metorial-origin" +CODE_BUCKET_SERVICE_URL = "code-bucket.test:5050" [[deps]] name = "postgres" diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index dc80c12e8..43624e670 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -20,7 +20,9 @@ "db:push:dev": "cd ../db && bun run prisma:push", "db:push:test": "cd ../db && bun run db:push:test", "db:push": "bun run db:push:dev && bun run db:push:test", - "test": "bunx vitest run --passWithNoTests", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", + "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/cargo/service/vitest.unit.config.ts b/src/systems/cargo/service/vitest.unit.config.ts new file mode 100644 index 000000000..f6e4bae1e --- /dev/null +++ b/src/systems/cargo/service/vitest.unit.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); diff --git a/src/systems/forge/service/control.toml b/src/systems/forge/service/control.toml index bab23b3c0..96da0000e 100644 --- a/src/systems/forge/service/control.toml +++ b/src/systems/forge/service/control.toml @@ -6,16 +6,15 @@ port = 52020 dockerfile = "src/systems/forge/service/Dockerfile" build_context = "oss" +[test.unit] +command = "bun run test:unit" + [test.e2e] -command = "bun run test" +command = "bun run test:e2e" setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] cwd = "/app/src/systems/forge/service" runner = "service" -[test.unit] -command = "bun run test" -cwd = "/app/src/systems/forge/service" - [[databases]] adapter = "postgres" name = "forge-test" diff --git a/src/systems/forge/service/package.json b/src/systems/forge/service/package.json index c83e7ab88..5125ab47a 100644 --- a/src/systems/forge/service/package.json +++ b/src/systems/forge/service/package.json @@ -17,7 +17,9 @@ "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --accept-data-loss'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", "db:push": "bun run db:push:dev && bun run db:push:test", - "test": "bunx vitest run --passWithNoTests", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", + "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/forge/service/vitest.unit.config.ts b/src/systems/forge/service/vitest.unit.config.ts new file mode 100644 index 000000000..f6e4bae1e --- /dev/null +++ b/src/systems/forge/service/vitest.unit.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); diff --git a/src/systems/function-bay/service/control.toml b/src/systems/function-bay/service/control.toml index 15ef0d185..be000b221 100644 --- a/src/systems/function-bay/service/control.toml +++ b/src/systems/function-bay/service/control.toml @@ -6,8 +6,11 @@ port = 52030 dockerfile = "src/systems/function-bay/service/Dockerfile" build_context = "oss" +[test.unit] +command = "bun run test:unit" + [test.e2e] -command = "bun run test" +command = "bun run test:e2e" setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] cwd = "/app/src/systems/function-bay/service" runner = "service" diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index 93746456a..384eb260e 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -17,7 +17,9 @@ "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --accept-data-loss'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", "db:push": "bun run db:push:dev && bun run db:push:test", - "test": "bunx vitest run --passWithNoTests", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", + "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/function-bay/service/vitest.unit.config.ts b/src/systems/function-bay/service/vitest.unit.config.ts new file mode 100644 index 000000000..749e9d7e8 --- /dev/null +++ b/src/systems/function-bay/service/vitest.unit.config.ts @@ -0,0 +1,15 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + }, + resolve: { + alias: { + '@function-bay/types': resolve(__dirname, '../packages/types/src/index.ts') + } + } +}); diff --git a/src/systems/shuttle/service/control.toml b/src/systems/shuttle/service/control.toml index 9e8c35a19..fdb6cec16 100644 --- a/src/systems/shuttle/service/control.toml +++ b/src/systems/shuttle/service/control.toml @@ -6,16 +6,15 @@ port = 52080 dockerfile = "src/systems/shuttle/service/Dockerfile" build_context = "oss" +[test.unit] +command = "bun run test:unit" + [test.e2e] command = "bun run test:e2e" setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] cwd = "/app/src/systems/shuttle/service" runner = "service" -[test.unit] -command = "bun run test:unit" -cwd = "/app/src/systems/shuttle/service" - [[databases]] adapter = "postgres" name = "shuttle-test" diff --git a/src/systems/shuttle/service/package.json b/src/systems/shuttle/service/package.json index 216b1b899..db5268811 100644 --- a/src/systems/shuttle/service/package.json +++ b/src/systems/shuttle/service/package.json @@ -19,8 +19,8 @@ "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", - "test:unit": "bunx vitest run --config vitest.unit.config.ts", - "test:e2e": "bunx vitest run --passWithNoTests", + "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", + "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", "test:watch": "bunx vitest watch", "typecheck": "bun run check-types" }, diff --git a/src/systems/signal/service/control.toml b/src/systems/signal/service/control.toml index ff21d1532..7a54e2222 100644 --- a/src/systems/signal/service/control.toml +++ b/src/systems/signal/service/control.toml @@ -6,8 +6,11 @@ port = 52050 dockerfile = "src/systems/signal/service/Dockerfile" build_context = "oss" +[test.unit] +command = "bun run test:unit" + [test.e2e] -command = "bun run test" +command = "bun run test:e2e" setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] cwd = "/app/src/systems/signal/service" runner = "service" diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index 172163a7f..b6719e688 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -17,7 +17,9 @@ "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --accept-data-loss'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", "db:push": "bun run db:push:dev && bun run db:push:test", - "test": "bunx vitest run --passWithNoTests", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", + "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/signal/service/vitest.unit.config.ts b/src/systems/signal/service/vitest.unit.config.ts new file mode 100644 index 000000000..d081fb5af --- /dev/null +++ b/src/systems/signal/service/vitest.unit.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + }, + resolve: { + alias: { + '@metorial-platform-systems/signal-client': resolve( + __dirname, + '../../_clients/signal/src/index.ts' + ) + } + } +}); diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml index 5f3e6af11..ee23c1f0f 100644 --- a/src/systems/slates/apps/hub/control.toml +++ b/src/systems/slates/apps/hub/control.toml @@ -6,8 +6,11 @@ port = 52045 dockerfile = "src/systems/slates/apps/hub/Dockerfile" build_context = "oss" +[test.unit] +command = "bun run test:unit" + [test.e2e] -command = "bun run test" +command = "bun run test:e2e" setup = ["bun prisma generate --schema prisma/schema", "bun prisma db push --accept-data-loss --schema prisma/schema"] cwd = "/app/src/systems/slates/apps/hub" runner = "service" diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index 8377e654e..d281bb817 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -18,7 +18,9 @@ "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --schema prisma/schema --accept-data-loss'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --schema prisma/schema'", "db:push": "bun run db:push:dev && bun run db:push:test", - "test": "bunx vitest run --passWithNoTests", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", + "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", "test:watch": "bunx vitest watch", "typecheck": "bun run check-types && bun run admin:typecheck", "admin:typecheck": "tsc --noEmit --project admin/tsconfig.json", diff --git a/src/systems/slates/apps/hub/src/test/cleanupCron.test.ts b/src/systems/slates/apps/hub/src/test/cleanupCron.e2e.test.ts similarity index 100% rename from src/systems/slates/apps/hub/src/test/cleanupCron.test.ts rename to src/systems/slates/apps/hub/src/test/cleanupCron.e2e.test.ts diff --git a/src/systems/slates/apps/registry/control.toml b/src/systems/slates/apps/registry/control.toml index 1557e232c..8ede10d41 100644 --- a/src/systems/slates/apps/registry/control.toml +++ b/src/systems/slates/apps/registry/control.toml @@ -7,11 +7,8 @@ dockerfile = "src/systems/slates/apps/registry/Dockerfile" build_context = "oss" health = { path = "/ping" } -[test.e2e] +[test.unit] command = "bun run test" -setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] -cwd = "/app/src/systems/slates/apps/registry" -runner = "service" [[databases]] adapter = "postgres" diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index 9da068e82..34b770a0a 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -6,6 +6,9 @@ port = 52070 dockerfile = "src/systems/subspace/apps/controller/Dockerfile" build_context = "oss" +[test.unit] +command = "bun run test:unit" + [test.e2e] command = "set -a && . ./.env.ci && set +a && bun run test:ci" setup = [ @@ -101,6 +104,11 @@ name = "cargo" control = "../../../cargo/service" scope = "service" +[deps.env] +API_URL = "http://$deps.cargo.52150/metorial-cargo" +ORIGIN_URL = "http://$deps.origin.52090/metorial-origin" +CODE_BUCKET_SERVICE_URL = "code-bucket:5050" + [[deps]] name = "code-bucket" control = "../../../origin/apps/code-bucket" diff --git a/src/systems/subspace/apps/controller/package.json b/src/systems/subspace/apps/controller/package.json index 6cdadb7d7..9bc9bfe16 100644 --- a/src/systems/subspace/apps/controller/package.json +++ b/src/systems/subspace/apps/controller/package.json @@ -10,7 +10,8 @@ "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-subspace-controller ./dist && sentry-cli sourcemaps upload --org metorial --project mte-subspace-controller ./dist", "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts'", - "test": "vitest run --passWithNoTests", + "test": "bun run test:unit && bun run test:ci", + "test:unit": "vitest run --config vitest.unit.config.ts --passWithNoTests", "test:ci": "vitest run --mode ci --reporter verbose --configLoader native", "test:watch": "bunx vitest watch" }, diff --git a/src/systems/subspace/apps/controller/vitest.unit.config.ts b/src/systems/subspace/apps/controller/vitest.unit.config.ts new file mode 100644 index 000000000..1a95da992 --- /dev/null +++ b/src/systems/subspace/apps/controller/vitest.unit.config.ts @@ -0,0 +1,13 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: [ + 'src/**/*.test.ts', + resolve(__dirname, '../../modules/provider-internal/src/**/*.test.ts') + ], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index 07ab84d72..d4fd40215 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -18,6 +18,7 @@ import type { RunPhase } from '../types'; import { runShell } from './shell'; +import { runUnitTargets } from './unit'; type RunControlContext = { index: number; @@ -152,24 +153,6 @@ export let runControl = async ( let waitServices = collectContainerNames(graph, projectName); await waitForServices({ services: waitServices, verbose: opts.verbose, logger }); - if (opts.mode === 'unit') { - let unit = graph.config.test?.unit; - if (!unit) throw new NoTestError({ name: graph.name, mode: 'unit' }); - - failedPhase = 'test'; - logger.info('Running unit tests...'); - let unitCmd = unit.cwd ? `cd ${unit.cwd} && ${unit.command}` : unit.command; - logger.debug(`Command: docker exec ${runnerContainer} sh -c ${JSON.stringify(unitCmd)}`); - await runShell(['docker', 'exec', runnerContainer, 'sh', '-c', unitCmd], { - phase: 'test', - service: serviceName, - composeFile, - keep: opts.keep, - verbose: opts.verbose - }); - return; - } - let e2e = graph.config.test?.e2e; if (!e2e) throw new NoTestError({ name: graph.name, mode: 'e2e' }); @@ -313,6 +296,10 @@ export let runControlBatch = async ( }; export let runControlTargets = async (opts: RunOptions & { services: ControlService[] }) => { + if (opts.mode === 'unit') { + return runUnitTargets(opts); + } + let logger = createLogger(opts); let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); let ordered = planExecutionOrder(opts.services, registry); diff --git a/src/tooling/control/src/run/unit.ts b/src/tooling/control/src/run/unit.ts new file mode 100644 index 000000000..122cd7432 --- /dev/null +++ b/src/tooling/control/src/run/unit.ts @@ -0,0 +1,179 @@ +import { join, resolve } from 'path'; +import { resolveOssRoot } from '../entrypoint'; +import { NoTestError } from '../errors'; +import { createLogger } from '../log'; +import { formatBatchSummary, formatRunPlan, formatServiceHeader } from '../log/formatRunPlan'; +import { getRegistry } from '../registry'; +import { planExecutionOrder } from '../graph/planner'; +import { resolveControlCwd, resolveEntrypoint } from '../entrypoint'; +import type { BatchResult, BatchServiceResult, ControlService, RunOptions } from '../types'; + +type UnitContext = { + index: number; + total: number; + service: ControlService; +}; + +export let resolveHostTestCwd = (opts: { + service: ControlService; + cwd?: string; + entrypoint: string; +}): string => { + if (!opts.cwd || opts.cwd === '.') return opts.service.dir; + + if (opts.cwd.startsWith('/app/')) { + return join(resolveOssRoot(opts.entrypoint), opts.cwd.slice('/app/'.length)); + } + + if (opts.cwd.startsWith('/app')) { + return join(resolveOssRoot(opts.entrypoint), opts.cwd.replace(/^\/app\/?/, '')); + } + + return resolve(opts.service.dir, opts.cwd); +}; + +let runHostShell = async (cmd: string[], opts: { cwd: string; verbose?: boolean }) => { + let proc = Bun.spawn(cmd, { + cwd: opts.cwd, + env: process.env, + stdout: 'inherit', + stderr: 'inherit' + }); + let code = await proc.exited; + if (code !== 0) { + throw new Error(`Command failed with exit code ${code}: ${cmd.join(' ')}`); + } +}; + +let runUnitForService = async ( + opts: RunOptions & { service: ControlService; context?: UnitContext } +) => { + let logger = createLogger(opts); + let unit = opts.service.config.test?.unit; + if (!unit) throw new NoTestError({ name: opts.service.name, mode: 'unit' }); + + let cwd = resolveControlCwd(); + let entrypoint = resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); + let hostCwd = resolveHostTestCwd({ service: opts.service, cwd: unit.cwd, entrypoint }); + + if (opts.context) { + logger.section( + formatServiceHeader({ + index: opts.context.index, + total: opts.context.total, + service: opts.context.service, + mode: 'unit' + }) + ); + } + + logger.info(`Running unit tests in ${hostCwd} ...`); + + for (let step of unit.setup ?? []) { + logger.info(`Setup: ${step}`); + logger.debug(`Command: ${step}`); + await runHostShell(['sh', '-c', step], { cwd: hostCwd, verbose: opts.verbose }); + } + + logger.info('Running unit tests...'); + logger.debug(`Command: ${unit.command}`); + await runHostShell(['sh', '-c', unit.command], { cwd: hostCwd, verbose: opts.verbose }); +}; + +export let runUnitBatch = async ( + opts: RunOptions & { services: ControlService[] } +): Promise => { + let logger = createLogger(opts); + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let ordered = planExecutionOrder(opts.services, registry); + let passed: string[] = []; + let failed: { name: string; error: Error; phase?: string }[] = []; + let results: BatchServiceResult[] = []; + let batchStarted = Date.now(); + + for (let i = 0; i < ordered.length; i++) { + let service = ordered[i]!; + let started = Date.now(); + + try { + await runUnitForService({ + ...opts, + service, + context: { index: i + 1, total: ordered.length, service } + }); + let durationMs = Date.now() - started; + passed.push(service.name); + results.push({ + name: service.name, + relPath: service.relPath, + status: 'passed', + durationMs + }); + logger.success(`✓ ${service.name} passed (${Math.round(durationMs / 1000)}s)`); + logger.blank(); + } catch (err) { + let error = err instanceof Error ? err : new Error(String(err)); + let durationMs = Date.now() - started; + failed.push({ name: service.name, error, phase: 'test' }); + results.push({ + name: service.name, + relPath: service.relPath, + status: 'failed', + durationMs, + error, + phase: 'test' + }); + logger.error(`✗ ${service.name} failed: ${error.message}`); + logger.blank(); + } + } + + let totalDurationMs = Date.now() - batchStarted; + + logger.section( + formatBatchSummary({ + mode: 'unit', + totalDurationMs, + results: results.map(r => ({ + name: r.name, + relPath: r.relPath, + status: r.status, + durationMs: r.durationMs, + phase: r.phase, + errorMessage: r.error?.message + })) + }) + ); + + return { passed, failed, results, totalDurationMs }; +}; + +export let runUnitTargets = async (opts: RunOptions & { services: ControlService[] }) => { + let logger = createLogger(opts); + let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let ordered = planExecutionOrder(opts.services, registry); + + logger.section( + formatRunPlan({ + mode: 'unit', + controlRoot: registry.controlRoot, + services: ordered, + title: 'Control unit tests' + }) + ); + logger.blank(); + + if (ordered.length === 1) { + await runUnitForService({ + ...opts, + service: ordered[0]!, + context: { index: 1, total: 1, service: ordered[0]! } + }); + return; + } + + let result = await runUnitBatch(opts); + if (result.failed.length > 0) { + process.exit(1); + } +}; diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts index 2c5e2c100..e568ace9a 100644 --- a/src/tooling/control/src/types.ts +++ b/src/tooling/control/src/types.ts @@ -59,6 +59,7 @@ export type ControlConfig = { }; unit?: { command: string; + setup?: string[]; cwd?: string; }; }; From b529de5aebb6dac8f269c7f955994646622e9acc Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 13:54:19 +0200 Subject: [PATCH 05/69] fix e2e tests --- src/systems/cargo/service/package.json | 2 +- .../cargo/service/vitest.e2e.config.ts | 19 +++++++++++ src/systems/forge/service/package.json | 2 +- .../forge/service/vitest.e2e.config.ts | 18 +++++++++++ src/systems/function-bay/service/package.json | 2 +- .../function-bay/service/vitest.e2e.config.ts | 23 +++++++++++++ src/systems/shuttle/service/package.json | 2 +- .../shuttle/service/vitest.e2e.config.ts | 29 +++++++++++++++++ src/systems/signal/service/package.json | 2 +- .../signal/service/vitest.e2e.config.ts | 26 +++++++++++++++ src/systems/slates/apps/hub/package.json | 2 +- .../slates/apps/hub/vitest.e2e.config.ts | 32 +++++++++++++++++++ .../subspace/apps/controller/vitest.config.ts | 4 ++- 13 files changed, 156 insertions(+), 7 deletions(-) create mode 100644 src/systems/cargo/service/vitest.e2e.config.ts create mode 100644 src/systems/forge/service/vitest.e2e.config.ts create mode 100644 src/systems/function-bay/service/vitest.e2e.config.ts create mode 100644 src/systems/shuttle/service/vitest.e2e.config.ts create mode 100644 src/systems/signal/service/vitest.e2e.config.ts create mode 100644 src/systems/slates/apps/hub/vitest.e2e.config.ts diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index 43624e670..df3fea9dd 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -22,7 +22,7 @@ "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/cargo/service/vitest.e2e.config.ts b/src/systems/cargo/service/vitest.e2e.config.ts new file mode 100644 index 000000000..4e74c38dd --- /dev/null +++ b/src/systems/cargo/service/vitest.e2e.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + return createVitestConfig({ + test: { + pool: 'forks', + fileParallelism: false, + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); +}); diff --git a/src/systems/forge/service/package.json b/src/systems/forge/service/package.json index 5125ab47a..02d8ba6e3 100644 --- a/src/systems/forge/service/package.json +++ b/src/systems/forge/service/package.json @@ -19,7 +19,7 @@ "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/forge/service/vitest.e2e.config.ts b/src/systems/forge/service/vitest.e2e.config.ts new file mode 100644 index 000000000..c5f68cdbc --- /dev/null +++ b/src/systems/forge/service/vitest.e2e.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + return createVitestConfig({ + test: { + pool: 'forks', + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); +}); diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index 384eb260e..e87d4a24b 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -19,7 +19,7 @@ "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/function-bay/service/vitest.e2e.config.ts b/src/systems/function-bay/service/vitest.e2e.config.ts new file mode 100644 index 000000000..d0036b98c --- /dev/null +++ b/src/systems/function-bay/service/vitest.e2e.config.ts @@ -0,0 +1,23 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + let config = createVitestConfig({ + test: { + pool: 'forks', + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); + + return withAliases(config, { + '@function-bay/types': resolve(__dirname, '../packages/types/src/index.ts') + }); +}); diff --git a/src/systems/shuttle/service/package.json b/src/systems/shuttle/service/package.json index db5268811..77162e953 100644 --- a/src/systems/shuttle/service/package.json +++ b/src/systems/shuttle/service/package.json @@ -20,7 +20,7 @@ "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", "test:watch": "bunx vitest watch", "typecheck": "bun run check-types" }, diff --git a/src/systems/shuttle/service/vitest.e2e.config.ts b/src/systems/shuttle/service/vitest.e2e.config.ts new file mode 100644 index 000000000..25e8bf570 --- /dev/null +++ b/src/systems/shuttle/service/vitest.e2e.config.ts @@ -0,0 +1,29 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + let config = createVitestConfig({ + test: { + pool: 'forks', + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); + + return withAliases(config, { + '@metorial-platform-systems/shuttle-client': resolve(__dirname, '../clients/typescript/src/index.ts'), + '@metorial/mcp-server': resolve(__dirname, '../sdk/packages/mcp-server/src/index.ts'), + '@metorial/mcp': resolve(__dirname, '../sdk/packages/mcp/src/index.ts'), + '@metorial/mcp-transport-memory': resolve( + __dirname, + '../sdk/packages/mcp-transport-memory/src/index.ts' + ) + }); +}); diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index b6719e688..646ab91b9 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -19,7 +19,7 @@ "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/signal/service/vitest.e2e.config.ts b/src/systems/signal/service/vitest.e2e.config.ts new file mode 100644 index 000000000..1b60a73d5 --- /dev/null +++ b/src/systems/signal/service/vitest.e2e.config.ts @@ -0,0 +1,26 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + let config = createVitestConfig({ + test: { + pool: 'forks', + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); + + return withAliases(config, { + '@metorial-platform-systems/signal-client': resolve( + __dirname, + '../../_clients/signal/src/index.ts' + ) + }); +}); diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index d281bb817..48cdb0a27 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -20,7 +20,7 @@ "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.config.ts --passWithNoTests --include '**/*.e2e.test.ts'", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", "test:watch": "bunx vitest watch", "typecheck": "bun run check-types && bun run admin:typecheck", "admin:typecheck": "tsc --noEmit --project admin/tsconfig.json", diff --git a/src/systems/slates/apps/hub/vitest.e2e.config.ts b/src/systems/slates/apps/hub/vitest.e2e.config.ts new file mode 100644 index 000000000..67507cbaa --- /dev/null +++ b/src/systems/slates/apps/hub/vitest.e2e.config.ts @@ -0,0 +1,32 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + let config = createVitestConfig({ + test: { + pool: 'forks', + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); + + return withAliases(config, { + '@slates/proto': resolve(__dirname, '../../packages/proto/src/index.ts'), + '@slates/provider': resolve(__dirname, '../../packages/provider/src/index.ts'), + '@metorial-services/slates-registry-client': resolve( + __dirname, + '../../clients/registry/src/index.ts' + ), + '@metorial-services/slates-registry-internal-client': resolve( + __dirname, + '../../clients/registry-internal/src/index.ts' + ) + }); +}); diff --git a/src/systems/subspace/apps/controller/vitest.config.ts b/src/systems/subspace/apps/controller/vitest.config.ts index 5e3729c21..8187d87b2 100644 --- a/src/systems/subspace/apps/controller/vitest.config.ts +++ b/src/systems/subspace/apps/controller/vitest.config.ts @@ -7,7 +7,9 @@ export default defineConfig(({ mode }: any): any => { return createVitestConfig({ test: { pool: 'forks', - ...(mode === 'ci' ? { fileParallelism: false } : {}), + ...(mode === 'ci' + ? { fileParallelism: false, include: ['src/**/*.e2e.test.ts'] } + : {}), setupFiles: ['./src/test/setup.ts'], env: { ...env, From 9a7a2d02aa9d6ccd4dc64bef7ca30425c9bb3664 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 15:38:49 +0200 Subject: [PATCH 06/69] Extend tests --- .github/workflows/control.yml | 15 +++++ src/systems/ares/service/control.toml | 55 +++++++++++++++++++ src/systems/ares/service/package.json | 4 +- .../controllers/tests/app.e2e.test.ts | 35 ++++++++++++ src/systems/ares/service/src/db.ts | 20 ++++++- .../service/src/lib/normalizeEmail.test.ts | 17 ++++++ .../ares/service/src/services/admin.ts | 3 + src/systems/ares/service/src/test/client.ts | 33 +++++++++++ src/systems/ares/service/src/test/mocks.ts | 31 +++++++++++ src/systems/ares/service/src/test/setup.ts | 20 +++++++ .../ares/service/src/test/stubs/jackson.ts | 9 +++ src/systems/ares/service/vitest.e2e.config.ts | 24 ++++++++ .../ares/service/vitest.unit.config.ts | 15 +++++ .../skill/src/lib/combineConfigs.test.ts | 49 +++++++++++++++++ src/systems/cargo/service/package.json | 4 +- .../cargo/service/vitest.unit.config.ts | 6 +- src/systems/forge/service/package.json | 4 +- src/systems/forge/service/src/lib/zip.test.ts | 16 ++++++ src/systems/function-bay/deflector/Dockerfile | 21 +++++-- .../function-bay/deflector/control.toml | 20 +++++++ .../deflector/internal/policy/policy_test.go | 6 ++ .../deflector/internal/proxy/server_test.go | 31 +++++++++++ src/systems/function-bay/service/package.json | 4 +- .../origin/apps/code-bucket/Dockerfile | 20 ++++--- .../origin/apps/code-bucket/control.toml | 9 +++ .../pkg/util/normalizePath_test.go | 17 ++++++ src/systems/origin/apps/service/control.toml | 15 ++++- src/systems/origin/apps/service/package.json | 6 +- .../src/controllers/tests/tenant.e2e.test.ts | 33 +++++++++++ .../service/src/lib/normalizePath.test.ts | 14 +++++ .../origin/apps/service/src/test/client.ts | 29 ++++++++++ .../apps/service/src/test/preload-env.ts | 3 + .../origin/apps/service/src/test/setup.ts | 18 ++++++ .../origin/apps/service/vitest.e2e.config.ts | 19 +++++++ .../origin/apps/service/vitest.unit.config.ts | 9 +++ src/systems/shuttle/service/package.json | 4 +- src/systems/signal/service/package.json | 4 +- src/systems/slates/apps/hub/package.json | 4 +- src/systems/slates/apps/registry/control.toml | 12 +++- src/systems/slates/apps/registry/package.json | 8 ++- .../apis/internal/tests/tenant.e2e.test.ts | 33 +++++++++++ .../src/lib/slateVersion/slateVersion.test.ts | 2 +- .../slates/apps/registry/src/test/client.ts | 27 +++++++++ .../slates/apps/registry/src/test/setup.ts | 18 ++++++ .../slates/apps/registry/vitest.e2e.config.ts | 33 +++++++++++ .../apps/registry/vitest.unit.config.ts | 9 +++ .../subspace/apps/controller/package.json | 2 +- src/systems/subspace/apps/public/control.toml | 34 ++++++++++++ src/systems/subspace/apps/public/package.json | 9 ++- .../apps/public/src/lib/htmlEncode.test.ts | 14 +++++ .../apps/public/src/test/ping.e2e.test.ts | 11 ++++ .../subspace/apps/public/src/test/setup.ts | 18 ++++++ .../subspace/apps/public/vitest.e2e.config.ts | 18 ++++++ .../apps/public/vitest.unit.config.ts | 9 +++ src/systems/subspace/apps/worker/control.toml | 34 ++++++++++++ src/systems/subspace/apps/worker/package.json | 9 ++- .../subspace/apps/worker/src/endpoints.ts | 25 ++------- .../subspace/apps/worker/src/health.ts | 19 +++++++ .../apps/worker/src/test/health.e2e.test.ts | 11 ++++ .../subspace/apps/worker/src/test/setup.ts | 18 ++++++ .../subspace/apps/worker/vitest.e2e.config.ts | 18 ++++++ .../apps/worker/vitest.unit.config.ts | 13 +++++ .../modules/skills/src/lib/detag.test.ts | 13 +++++ src/systems/synthesis/service/control.toml | 41 ++++++++++++++ src/systems/synthesis/service/package.json | 5 +- .../service/src/lib/delta/apply.test.ts | 37 +++++++++++++ .../service/src/test/ping.e2e.test.ts | 11 ++++ .../synthesis/service/src/test/preload-env.ts | 3 + .../synthesis/service/src/test/setup.ts | 18 ++++++ .../synthesis/service/vitest.e2e.config.ts | 18 ++++++ .../synthesis/service/vitest.unit.config.ts | 9 +++ src/tooling/control/mocks/Dockerfile | 2 +- 72 files changed, 1142 insertions(+), 65 deletions(-) create mode 100644 src/systems/ares/service/control.toml create mode 100644 src/systems/ares/service/src/apis/internal/controllers/tests/app.e2e.test.ts create mode 100644 src/systems/ares/service/src/lib/normalizeEmail.test.ts create mode 100644 src/systems/ares/service/src/test/client.ts create mode 100644 src/systems/ares/service/src/test/mocks.ts create mode 100644 src/systems/ares/service/src/test/stubs/jackson.ts create mode 100644 src/systems/ares/service/vitest.e2e.config.ts create mode 100644 src/systems/ares/service/vitest.unit.config.ts create mode 100644 src/systems/cargo/modules/skill/src/lib/combineConfigs.test.ts create mode 100644 src/systems/forge/service/src/lib/zip.test.ts create mode 100644 src/systems/function-bay/deflector/control.toml create mode 100644 src/systems/function-bay/deflector/internal/proxy/server_test.go create mode 100644 src/systems/origin/apps/code-bucket/pkg/util/normalizePath_test.go create mode 100644 src/systems/origin/apps/service/src/controllers/tests/tenant.e2e.test.ts create mode 100644 src/systems/origin/apps/service/src/lib/normalizePath.test.ts create mode 100644 src/systems/origin/apps/service/src/test/client.ts create mode 100644 src/systems/origin/apps/service/src/test/preload-env.ts create mode 100644 src/systems/origin/apps/service/src/test/setup.ts create mode 100644 src/systems/origin/apps/service/vitest.e2e.config.ts create mode 100644 src/systems/origin/apps/service/vitest.unit.config.ts create mode 100644 src/systems/slates/apps/registry/src/apis/internal/tests/tenant.e2e.test.ts create mode 100644 src/systems/slates/apps/registry/src/test/client.ts create mode 100644 src/systems/slates/apps/registry/src/test/setup.ts create mode 100644 src/systems/slates/apps/registry/vitest.e2e.config.ts create mode 100644 src/systems/slates/apps/registry/vitest.unit.config.ts create mode 100644 src/systems/subspace/apps/public/src/lib/htmlEncode.test.ts create mode 100644 src/systems/subspace/apps/public/src/test/ping.e2e.test.ts create mode 100644 src/systems/subspace/apps/public/src/test/setup.ts create mode 100644 src/systems/subspace/apps/public/vitest.e2e.config.ts create mode 100644 src/systems/subspace/apps/public/vitest.unit.config.ts create mode 100644 src/systems/subspace/apps/worker/src/health.ts create mode 100644 src/systems/subspace/apps/worker/src/test/health.e2e.test.ts create mode 100644 src/systems/subspace/apps/worker/src/test/setup.ts create mode 100644 src/systems/subspace/apps/worker/vitest.e2e.config.ts create mode 100644 src/systems/subspace/apps/worker/vitest.unit.config.ts create mode 100644 src/systems/subspace/modules/skills/src/lib/detag.test.ts create mode 100644 src/systems/synthesis/service/control.toml create mode 100644 src/systems/synthesis/service/src/lib/delta/apply.test.ts create mode 100644 src/systems/synthesis/service/src/test/ping.e2e.test.ts create mode 100644 src/systems/synthesis/service/src/test/preload-env.ts create mode 100644 src/systems/synthesis/service/src/test/setup.ts create mode 100644 src/systems/synthesis/service/vitest.e2e.config.ts create mode 100644 src/systems/synthesis/service/vitest.unit.config.ts diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index 4625ba87c..9b9b41e1b 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -27,14 +27,21 @@ jobs: fail-fast: false matrix: service: + - ares - cargo + - code-bucket + - deflector - forge - function-bay + - origin - shuttle - signal - slates-hub - slates-registry - subspace-controller + - subspace-public + - subspace-worker + - synthesis with: command: ci mode: unit @@ -49,13 +56,21 @@ jobs: fail-fast: false matrix: service: + - ares - cargo + - code-bucket + - deflector - forge - function-bay + - origin - shuttle - signal - slates-hub + - slates-registry - subspace-controller + - subspace-public + - subspace-worker + - synthesis with: command: ci mode: e2e diff --git a/src/systems/ares/service/control.toml b/src/systems/ares/service/control.toml new file mode 100644 index 000000000..c5eaaa9c9 --- /dev/null +++ b/src/systems/ares/service/control.toml @@ -0,0 +1,55 @@ +[control] +name = "ares" + +[service] +port = 52120 +dockerfile = "src/systems/ares/service/Dockerfile" +build_context = "oss" +health = { cmd = "bun -e \"fetch('http://localhost:12121/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } + +[test.unit] +command = "bun run test:unit" + +[test.e2e] +command = "bun run test:e2e" +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] +cwd = "/app/src/systems/ares/service" +runner = "service" + +[[databases]] +adapter = "postgres" +name = "ares-test" + +[env] +DATABASE_URL = "$db.ares-test.url" +REDIS_URL = "redis://$deps.redis.6379/0" +ARES_AUTH_URL = "http://ares:52120" +ARES_ADMIN_URL = "http://ares:52121" +ARES_INTERNAL_URL = "http://ares:52123" +ARES_SSO_URL = "http://ares:52122" +SSO_DATABASE_URL = "$db.ares-test.url" +RELAY_URL = "http://$deps.relay.52110" +COOKIE_DOMAIN = "metorial.test" +SAML_AUDIENCE = "https://saml.test.metorial.com" +AUTH_TICKET_SECRET = "ares-test-secret" +EMAIL_NAME = "Ares Test" +EMAIL_ADDRESS = "test@metorial.test" +TURNSTILE_SITE_KEY = "1x00000000000000000000AA" +TURNSTILE_SECRET_KEY = "1x0000000000000000000000000000000AA" + +[[deps]] +name = "postgres" +preset = "postgres" + +[deps.env] +POSTGRES_USER = "ares" +POSTGRES_PASSWORD = "ares" +POSTGRES_DB = "ares" + +[[deps]] +name = "redis" +preset = "redis" + +[[deps]] +name = "relay" +mock = "relay" diff --git a/src/systems/ares/service/package.json b/src/systems/ares/service/package.json index 984b4daeb..12eddf1f4 100644 --- a/src/systems/ares/service/package.json +++ b/src/systems/ares/service/package.json @@ -21,7 +21,9 @@ "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --accept-data-loss'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", "db:push": "bun run db:push:dev && bun run db:push:test", - "test": "bunx vitest run --passWithNoTests", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/ares/service/src/apis/internal/controllers/tests/app.e2e.test.ts b/src/systems/ares/service/src/apis/internal/controllers/tests/app.e2e.test.ts new file mode 100644 index 000000000..f85400775 --- /dev/null +++ b/src/systems/ares/service/src/apis/internal/controllers/tests/app.e2e.test.ts @@ -0,0 +1,35 @@ +import { beforeEach, describe, expect, it } from 'vitest'; +import { adminService } from '../../../../services/admin'; +import { cleanDatabase } from '../../../../test/setup'; + +describe('ares app.e2e', () => { + beforeEach(async () => { + await cleanDatabase(); + }); + + it('upserts an app by slug', async () => { + let created = await adminService.upsertApp({ + slug: 'test-app', + defaultRedirectUrl: 'https://example.com/callback', + redirectDomains: ['example.com'] + }); + + expect(created).toMatchObject({ + id: expect.any(String), + slug: 'test-app', + defaultRedirectUrl: 'https://example.com/callback' + }); + + let updated = await adminService.upsertApp({ + slug: 'test-app', + defaultRedirectUrl: 'https://example.com/updated', + redirectDomains: ['example.com', '*.example.com'] + }); + + expect(updated.id).toBe(created.id); + expect(updated.defaultRedirectUrl).toBe('https://example.com/updated'); + + let fetched = await adminService.getApp({ appId: created.id }); + expect(fetched.slug).toBe('test-app'); + }); +}); diff --git a/src/systems/ares/service/src/db.ts b/src/systems/ares/service/src/db.ts index 580d9558e..2504003c4 100644 --- a/src/systems/ares/service/src/db.ts +++ b/src/systems/ares/service/src/db.ts @@ -7,9 +7,25 @@ import { AsyncLocalStorage } from 'async_hooks'; import PQueue from 'p-queue'; import { PrismaClient } from '../prisma/generated/client'; -let adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }); +declare global { + // eslint-disable-next-line no-var + var __ARES_TEST_DB__: PrismaClient | undefined; +} + +let createPrismaClient = () => + new PrismaClient({ + adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }) + }); + +let resolveDb = () => globalThis.__ARES_TEST_DB__ ?? createPrismaClient(); -export let db = new PrismaClient({ adapter }); +export let db = new Proxy({} as PrismaClient, { + get(_target, prop) { + let client = resolveDb(); + let value = Reflect.get(client, prop, client); + return typeof value === 'function' ? value.bind(client) : value; + } +}); declare global { namespace PrismaJson { diff --git a/src/systems/ares/service/src/lib/normalizeEmail.test.ts b/src/systems/ares/service/src/lib/normalizeEmail.test.ts new file mode 100644 index 000000000..d2293b625 --- /dev/null +++ b/src/systems/ares/service/src/lib/normalizeEmail.test.ts @@ -0,0 +1,17 @@ +import { describe, expect, it } from 'vitest'; +import { normalizeEmail } from './normalizeEmail'; + +describe('normalizeEmail', () => { + it('lowercases, trims, and normalizes gmail addresses', () => { + expect(normalizeEmail(' User.Name+tag@Gmail.com ')).toBe('username@gmail.com'); + expect(normalizeEmail('user@googlemail.com')).toBe('user@gmail.com'); + }); + + it('strips plus aliases for non-gmail domains', () => { + expect(normalizeEmail('user+alias@example.com')).toBe('user@example.com'); + }); + + it('rejects invalid addresses', () => { + expect(() => normalizeEmail('not-an-email')).toThrow('Invalid email'); + }); +}); diff --git a/src/systems/ares/service/src/services/admin.ts b/src/systems/ares/service/src/services/admin.ts index 616fb2186..2597c3909 100644 --- a/src/systems/ares/service/src/services/admin.ts +++ b/src/systems/ares/service/src/services/admin.ts @@ -178,6 +178,7 @@ class AdminServiceImpl { return await this.updateApp({ app: existingApp, input: { + defaultRedirectUrl: d.defaultRedirectUrl, redirectDomains: d.redirectDomains, slug: d.slug, isSessionless: d.isSessionless, @@ -189,6 +190,7 @@ class AdminServiceImpl { async updateApp(d: { app: App; input: { + defaultRedirectUrl?: string; slug?: string; redirectDomains?: string[]; isSessionless?: boolean; @@ -203,6 +205,7 @@ class AdminServiceImpl { return await db.app.update({ where: { oid: d.app.oid }, data: { + defaultRedirectUrl: d.input.defaultRedirectUrl, slug: d.input.slug !== undefined ? d.input.slug || null : undefined, isSessionless: d.input.isSessionless !== undefined ? d.input.isSessionless : undefined, diff --git a/src/systems/ares/service/src/test/client.ts b/src/systems/ares/service/src/test/client.ts new file mode 100644 index 000000000..c9e07a569 --- /dev/null +++ b/src/systems/ares/service/src/test/client.ts @@ -0,0 +1,33 @@ +import { createClient } from '@lowerdeck/rpc-client'; +import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { internalApp } from '../apis/internal/_app'; +import { appController } from '../apis/internal/controllers/app'; + +type ClientOptsLike = Parameters[0]; + +let testRootController = internalApp.controller({ app: appController }); +export type TestInternalClient = InferClient; + +let fetchRouter = createFetchRouter(); +let testInternalRPC = createServer({})(testRootController); +let aresInternalRpc = rpcMux({ path: '/metorial-ares-internal/api' }, [testInternalRPC]); + +let defaultEndpoint = 'http://ares-internal.test/metorial-ares-internal/api'; + +export let ensureAresTestFetch = () => { + fetchRouter.registerRoute(defaultEndpoint, request => aresInternalRpc.fetch(request)); + fetchRouter.install(); +}; + +export let createAresInternalClient = (opts: Partial = {}) => { + ensureAresTestFetch(); + + return createClient({ + ...opts, + endpoint: opts.endpoint ?? defaultEndpoint + } as ClientOptsLike); +}; + +export let getAresInternalClient = async (opts: Partial = {}) => + createAresInternalClient(opts); diff --git a/src/systems/ares/service/src/test/mocks.ts b/src/systems/ares/service/src/test/mocks.ts new file mode 100644 index 000000000..2247369aa --- /dev/null +++ b/src/systems/ares/service/src/test/mocks.ts @@ -0,0 +1,31 @@ +import { vi } from 'vitest'; + +vi.mock('../lib/jackson', () => ({ + jackson: { + apiController: {}, + oauthController: {}, + redirectUrl: 'http://ares-sso.test/*', + defaultRedirectUrl: { + saml: 'http://ares-sso.test/sso/jxn/saml/callback', + oidc: 'http://ares-sso.test/sso/jxn/oidc/callback' + } + } +})); + +vi.mock('../email/client', () => { + let sender = { id: 'relay_sender_test' }; + let emailIdentity = { id: 'relay_email_identity_test' }; + + return { + relay: { + sender: { upsert: vi.fn(async () => sender) }, + emailIdentity: { upsert: vi.fn(async () => emailIdentity) }, + email: { send: vi.fn(async () => undefined) } + }, + sender: Promise.resolve(sender), + emailIdentity: Promise.resolve(emailIdentity), + createTemplateSender: () => ({ + send: vi.fn(async () => undefined) + }) + }; +}); diff --git a/src/systems/ares/service/src/test/setup.ts b/src/systems/ares/service/src/test/setup.ts index 8b1378917..cecf90632 100644 --- a/src/systems/ares/service/src/test/setup.ts +++ b/src/systems/ares/service/src/test/setup.ts @@ -1 +1,21 @@ +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '../../prisma/generated/client'; +import { afterAll } from 'vitest'; +import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +setupTestGlobals({ nodeEnv: 'test' }); + +let db = await setupPrismaTestDb({ + guard: 'ares-test', + prismaClientFactory: url => new PrismaClient({ adapter: new PrismaPg({ connectionString: url }) }) +}); + +globalThis.__ARES_TEST_DB__ = db.client; + +afterAll(async () => { + await db.disconnect(); + globalThis.__ARES_TEST_DB__ = undefined; +}); + +export let testDb: PrismaClient = db.client; +export let cleanDatabase = db.clean; diff --git a/src/systems/ares/service/src/test/stubs/jackson.ts b/src/systems/ares/service/src/test/stubs/jackson.ts new file mode 100644 index 000000000..564fe95ca --- /dev/null +++ b/src/systems/ares/service/src/test/stubs/jackson.ts @@ -0,0 +1,9 @@ +export let jackson = { + apiController: {}, + oauthController: {}, + redirectUrl: 'http://ares-sso.test/*', + defaultRedirectUrl: { + saml: 'http://ares-sso.test/sso/jxn/saml/callback', + oidc: 'http://ares-sso.test/sso/jxn/oidc/callback' + } +}; diff --git a/src/systems/ares/service/vitest.e2e.config.ts b/src/systems/ares/service/vitest.e2e.config.ts new file mode 100644 index 000000000..190eac2b2 --- /dev/null +++ b/src/systems/ares/service/vitest.e2e.config.ts @@ -0,0 +1,24 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + let config = createVitestConfig({ + test: { + pool: 'forks', + fileParallelism: false, + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); + + return withAliases(config, { + '@metorial-services/ares-client': resolve(__dirname, '../clients/typescript/src/index.ts') + }); +}); diff --git a/src/systems/ares/service/vitest.unit.config.ts b/src/systems/ares/service/vitest.unit.config.ts new file mode 100644 index 000000000..2c215153a --- /dev/null +++ b/src/systems/ares/service/vitest.unit.config.ts @@ -0,0 +1,15 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + }, + resolve: { + alias: { + '@metorial-services/ares-client': resolve(__dirname, '../clients/typescript/src/index.ts') + } + } +}); diff --git a/src/systems/cargo/modules/skill/src/lib/combineConfigs.test.ts b/src/systems/cargo/modules/skill/src/lib/combineConfigs.test.ts new file mode 100644 index 000000000..fe921869e --- /dev/null +++ b/src/systems/cargo/modules/skill/src/lib/combineConfigs.test.ts @@ -0,0 +1,49 @@ +import { describe, expect, it } from 'vitest'; +import { combineConfigs, intersectBooleans, intersectStringArrays } from './combineConfigs'; + +describe('combineConfigs', () => { + it('intersects allowed file extensions and boolean flags', () => { + let combined = combineConfigs( + [ + { + allowScripts: true, + allowedFileExtensions: ['ts', 'js'], + allowNonStandardDirectories: true + }, + { + allowScripts: false, + allowedFileExtensions: ['ts', 'json'], + allowNonStandardDirectories: true + } + ], + null + ); + + expect(combined).toEqual({ + allowScripts: false, + allowedFileExtensions: ['ts'], + allowNonStandardDirectories: true + }); + }); + + it('returns defaults when no configs are provided', () => { + expect(combineConfigs([], null)).toEqual({ + allowScripts: true, + allowedFileExtensions: [], + allowNonStandardDirectories: true + }); + }); +}); + +describe('intersectStringArrays', () => { + it('returns the intersection across arrays', () => { + expect(intersectStringArrays([['a', 'b'], ['b', 'c']])).toEqual(['b']); + }); +}); + +describe('intersectBooleans', () => { + it('requires all values to be true', () => { + expect(intersectBooleans([true, true, false])).toBe(false); + expect(intersectBooleans([true, true])).toBe(true); + }); +}); diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index df3fea9dd..b36c43bb3 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -21,8 +21,8 @@ "db:push:test": "cd ../db && bun run db:push:test", "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", - "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/cargo/service/vitest.unit.config.ts b/src/systems/cargo/service/vitest.unit.config.ts index f6e4bae1e..3922d403a 100644 --- a/src/systems/cargo/service/vitest.unit.config.ts +++ b/src/systems/cargo/service/vitest.unit.config.ts @@ -1,8 +1,12 @@ +import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { - include: ['src/**/*.test.ts'], + include: [ + 'src/**/*.test.ts', + resolve(__dirname, '../modules/skill/src/**/*.test.ts') + ], exclude: ['src/**/*.e2e.test.ts'], pool: 'forks' } diff --git a/src/systems/forge/service/package.json b/src/systems/forge/service/package.json index 02d8ba6e3..eb592b477 100644 --- a/src/systems/forge/service/package.json +++ b/src/systems/forge/service/package.json @@ -18,8 +18,8 @@ "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", - "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/forge/service/src/lib/zip.test.ts b/src/systems/forge/service/src/lib/zip.test.ts new file mode 100644 index 000000000..d8ee088f2 --- /dev/null +++ b/src/systems/forge/service/src/lib/zip.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from 'vitest'; +import JSZip from 'jszip'; +import { createZipFromFiles } from './zip'; + +describe('createZipFromFiles', () => { + it('creates a zip with utf-8 and base64 entries', async () => { + let blob = await createZipFromFiles([ + { filename: 'hello.txt', content: 'hello world' }, + { filename: 'data.bin', content: 'aGVsbG8=', encoding: 'base64' } + ]); + + let zip = await JSZip.loadAsync(await blob.arrayBuffer()); + expect(await zip.file('hello.txt')?.async('string')).toBe('hello world'); + expect(await zip.file('data.bin')?.async('string')).toBe('hello'); + }); +}); diff --git a/src/systems/function-bay/deflector/Dockerfile b/src/systems/function-bay/deflector/Dockerfile index 715ce89ad..189855ae9 100644 --- a/src/systems/function-bay/deflector/Dockerfile +++ b/src/systems/function-bay/deflector/Dockerfile @@ -1,13 +1,22 @@ FROM golang:1.23-alpine AS builder -WORKDIR /src -COPY src/systems/function-bay/deflector/go.mod src/systems/function-bay/deflector/go.sum* ./ -RUN go mod download +WORKDIR /app -COPY src/systems/function-bay/deflector/ ./ -RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/deflector ./cmd/deflector +RUN apk add --no-cache git ca-certificates -FROM alpine:3.22 +COPY src/systems/function-bay/deflector/go.mod src/systems/function-bay/deflector/go.sum* ./src/systems/function-bay/deflector/ +RUN cd src/systems/function-bay/deflector && go mod download + +COPY src/systems/function-bay/deflector/ ./src/systems/function-bay/deflector/ +RUN cd src/systems/function-bay/deflector && \ + CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/deflector ./cmd/deflector + +FROM builder AS workspace + +WORKDIR /app/src/systems/function-bay/deflector +CMD ["sleep", "infinity"] + +FROM alpine:3.22 AS runner RUN apk add --no-cache ca-certificates COPY --from=builder /out/deflector /usr/local/bin/deflector diff --git a/src/systems/function-bay/deflector/control.toml b/src/systems/function-bay/deflector/control.toml new file mode 100644 index 000000000..6b81da25c --- /dev/null +++ b/src/systems/function-bay/deflector/control.toml @@ -0,0 +1,20 @@ +[control] +name = "deflector" + +[service] +port = 8080 +dockerfile = "src/systems/function-bay/deflector/Dockerfile" +build_context = "oss" +health = { path = "/healthz" } + +[test.unit] +command = "go test ./..." +cwd = "/app/src/systems/function-bay/deflector" + +[test.e2e] +command = "go test ./internal/proxy -run TestHealthz" +cwd = "/app/src/systems/function-bay/deflector" +runner = "service" + +[env] +DEFLECTOR_ADDR = ":8080" diff --git a/src/systems/function-bay/deflector/internal/policy/policy_test.go b/src/systems/function-bay/deflector/internal/policy/policy_test.go index 3691b6add..05eaca5bc 100644 --- a/src/systems/function-bay/deflector/internal/policy/policy_test.go +++ b/src/systems/function-bay/deflector/internal/policy/policy_test.go @@ -18,6 +18,12 @@ func TestHostRules(t *testing.T) { if !compiled.AllowsHost("a.b.allowed.test") { t.Fatal("expected wildcard subdomain to be allowed") } + if !compiled.AllowsHost("api.allowed.test") { + t.Fatal("expected single-level wildcard subdomain to be allowed") + } + if compiled.AllowsHost("evil-example.com") { + t.Fatal("wildcard must not allow unrelated domains") + } if compiled.AllowsHost("allowed.test") { t.Fatal("wildcard must not allow the root domain") } diff --git a/src/systems/function-bay/deflector/internal/proxy/server_test.go b/src/systems/function-bay/deflector/internal/proxy/server_test.go new file mode 100644 index 000000000..69403a8d1 --- /dev/null +++ b/src/systems/function-bay/deflector/internal/proxy/server_test.go @@ -0,0 +1,31 @@ +package proxy + +import ( + "io" + "net/http" + "net/http/httptest" + "testing" +) + +func TestHealthz(t *testing.T) { + srv := httptest.NewServer(&Server{}) + defer srv.Close() + + res, err := http.Get(srv.URL + "/healthz") + if err != nil { + t.Fatal(err) + } + defer res.Body.Close() + + if res.StatusCode != http.StatusOK { + t.Fatalf("status = %d, want %d", res.StatusCode, http.StatusOK) + } + + body, err := io.ReadAll(res.Body) + if err != nil { + t.Fatal(err) + } + if string(body) != "ok" { + t.Fatalf("body = %q, want ok", string(body)) + } +} diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index e87d4a24b..3b4d528d9 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -18,8 +18,8 @@ "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", - "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/origin/apps/code-bucket/Dockerfile b/src/systems/origin/apps/code-bucket/Dockerfile index 0408c1108..cdfbd10a1 100644 --- a/src/systems/origin/apps/code-bucket/Dockerfile +++ b/src/systems/origin/apps/code-bucket/Dockerfile @@ -30,21 +30,27 @@ RUN cd extensions/memfs && \ RUN bun x tsc && bun x vite build -# Stage 2: Build Go service +# Stage 2: Build Go service (monorepo paths for control test cwd) FROM golang:1.24-alpine AS go-builder WORKDIR /app RUN apk add --no-cache git ca-certificates -COPY src/systems/origin/apps/code-bucket/go.mod src/systems/origin/apps/code-bucket/go.sum ./ -RUN go mod download +COPY src/systems/origin/apps/code-bucket/go.mod src/systems/origin/apps/code-bucket/go.sum ./src/systems/origin/apps/code-bucket/ +RUN cd src/systems/origin/apps/code-bucket && go mod download -COPY src/systems/origin/apps/code-bucket/ ./ +COPY src/systems/origin/apps/code-bucket/ ./src/systems/origin/apps/code-bucket/ -COPY --from=workspace-builder /workspace/dist ./pkg/workspace/dist +COPY --from=workspace-builder /workspace/dist ./src/systems/origin/apps/code-bucket/pkg/workspace/dist -RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o code-bucket ./cmd/server +RUN cd src/systems/origin/apps/code-bucket && \ + CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /out/code-bucket ./cmd/server + +FROM go-builder AS workspace + +WORKDIR /app/src/systems/origin/apps/code-bucket +CMD ["sleep", "infinity"] # Stage 3: Final minimal image FROM alpine:latest AS runner @@ -53,7 +59,7 @@ RUN apk --no-cache add ca-certificates tzdata netcat-openbsd WORKDIR /root/ -COPY --from=go-builder /app/code-bucket . +COPY --from=go-builder /out/code-bucket . EXPOSE 52091 EXPOSE 52092 diff --git a/src/systems/origin/apps/code-bucket/control.toml b/src/systems/origin/apps/code-bucket/control.toml index 4e192c67a..b6186114c 100644 --- a/src/systems/origin/apps/code-bucket/control.toml +++ b/src/systems/origin/apps/code-bucket/control.toml @@ -7,6 +7,15 @@ dockerfile = "src/systems/origin/apps/code-bucket/Dockerfile" build_context = "oss" health = { cmd = "nc -z localhost 52091" } +[test.unit] +command = "go test ./..." +cwd = "/app/src/systems/origin/apps/code-bucket" + +[test.e2e] +command = "go test ./pkg/util -run TestNormalizePath" +cwd = "/app/src/systems/origin/apps/code-bucket" +runner = "service" + [env] CODE_BUCKET_JWT_SECRET = "dev-secret-change-in-production" CODE_BUCKET_OBJECT_STORAGE_BUCKET = "code-bucket" diff --git a/src/systems/origin/apps/code-bucket/pkg/util/normalizePath_test.go b/src/systems/origin/apps/code-bucket/pkg/util/normalizePath_test.go new file mode 100644 index 000000000..484e86ea5 --- /dev/null +++ b/src/systems/origin/apps/code-bucket/pkg/util/normalizePath_test.go @@ -0,0 +1,17 @@ +package util + +import "testing" + +func TestNormalizePath(t *testing.T) { + if got := NormalizePath("foo/../bar/./baz"); got != "/bar/baz" { + t.Fatalf("NormalizePath() = %q, want /bar/baz", got) + } + + if got := NormalizePath(""); got != "/" { + t.Fatalf("NormalizePath(\"\") = %q, want /", got) + } + + if got := NormalizePath("/a/b/../c"); got != "/a/c" { + t.Fatalf("NormalizePath() = %q, want /a/c", got) + } +} diff --git a/src/systems/origin/apps/service/control.toml b/src/systems/origin/apps/service/control.toml index b5cb915ad..fdd1d4956 100644 --- a/src/systems/origin/apps/service/control.toml +++ b/src/systems/origin/apps/service/control.toml @@ -7,12 +7,25 @@ dockerfile = "src/systems/origin/apps/service/Dockerfile" build_context = "oss" health = { path = "/ping" } +[test.unit] +command = "bun run test:unit" + +[test.e2e] +command = "bun run test:e2e" +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] +cwd = "/app/src/systems/origin/apps/service" +runner = "service" + +[[databases]] +adapter = "postgres" +name = "origin-test" + [[databases]] adapter = "postgres" name = "origin" [env] -DATABASE_URL = "$db.origin.url" +DATABASE_URL = "$db.origin-test.url" REDIS_URL = "redis://$deps.redis.6379/0" ORIGIN_SERVICE_PUBLIC_URL = "http://origin:52093" OBJECT_STORAGE_URL = "http://$deps.object-store.52010" diff --git a/src/systems/origin/apps/service/package.json b/src/systems/origin/apps/service/package.json index 161668ca0..c6ca32abb 100644 --- a/src/systems/origin/apps/service/package.json +++ b/src/systems/origin/apps/service/package.json @@ -12,9 +12,13 @@ "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", "server:start": "bun ./dist/index.js", "prisma:push": "bun prisma db push --accept-data-loss", - "prisma:generate": "bun prisma generate" + "prisma:generate": "bun prisma generate", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts" }, "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", diff --git a/src/systems/origin/apps/service/src/controllers/tests/tenant.e2e.test.ts b/src/systems/origin/apps/service/src/controllers/tests/tenant.e2e.test.ts new file mode 100644 index 000000000..90bdbc687 --- /dev/null +++ b/src/systems/origin/apps/service/src/controllers/tests/tenant.e2e.test.ts @@ -0,0 +1,33 @@ +import { beforeEach, describe, expect, it } from 'vitest'; +import { originClient } from '../../test/client'; +import { cleanDatabase } from '../../test/setup'; + +describe('origin tenant.e2e', () => { + beforeEach(async () => { + await cleanDatabase(); + }); + + it('upserts a tenant by identifier', async () => { + let created = await originClient.tenant.upsert({ + identifier: 'origin-tenant-alpha', + name: 'Origin Tenant Alpha' + }); + + expect(created).toMatchObject({ + id: expect.any(String), + identifier: 'origin-tenant-alpha', + name: 'Origin Tenant Alpha' + }); + + let updated = await originClient.tenant.upsert({ + identifier: 'origin-tenant-alpha', + name: 'Origin Tenant Beta' + }); + + expect(updated.id).toBe(created.id); + expect(updated.name).toBe('Origin Tenant Beta'); + + let fetched = await originClient.tenant.get({ tenantId: created.id }); + expect(fetched.name).toBe('Origin Tenant Beta'); + }); +}); diff --git a/src/systems/origin/apps/service/src/lib/normalizePath.test.ts b/src/systems/origin/apps/service/src/lib/normalizePath.test.ts new file mode 100644 index 000000000..f7050bc39 --- /dev/null +++ b/src/systems/origin/apps/service/src/lib/normalizePath.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from 'vitest'; +import { normalizePath } from './normalizePath'; + +describe('normalizePath', () => { + it('resolves parent and current directory segments', () => { + expect(normalizePath('foo/../bar/./baz')).toBe('/bar/baz'); + expect(normalizePath('/a/b/../c')).toBe('/a/c'); + }); + + it('returns root for empty paths', () => { + expect(normalizePath('')).toBe('/'); + expect(normalizePath('/')).toBe('/'); + }); +}); diff --git a/src/systems/origin/apps/service/src/test/client.ts b/src/systems/origin/apps/service/src/test/client.ts new file mode 100644 index 000000000..12f9d27cf --- /dev/null +++ b/src/systems/origin/apps/service/src/test/client.ts @@ -0,0 +1,29 @@ +import { createClient } from '@lowerdeck/rpc-client'; +import { rpcMux } from '@lowerdeck/rpc-server'; +import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { OriginRPC, type OriginClient } from '../controllers'; + +type ClientOptsLike = Parameters[0]; + +let fetchRouter = createFetchRouter(); +let originRpc = rpcMux({ path: '/metorial-origin' }, [OriginRPC]); + +let registerInMemoryRoute = (endpoint: string) => { + fetchRouter.registerRoute(endpoint, request => originRpc.fetch(request)); +}; + +let defaultEndpoint = 'http://origin.test/metorial-origin'; + +export let createTestOriginClient = (opts: Partial = {}) => { + let endpoint = opts.endpoint ?? defaultEndpoint; + registerInMemoryRoute(endpoint); + fetchRouter.install(); + + return createClient({ + ...opts, + endpoint + } as ClientOptsLike); +}; + +export let originClient = createTestOriginClient(); +export type OriginTestClient = ReturnType; diff --git a/src/systems/origin/apps/service/src/test/preload-env.ts b/src/systems/origin/apps/service/src/test/preload-env.ts new file mode 100644 index 000000000..321d9d874 --- /dev/null +++ b/src/systems/origin/apps/service/src/test/preload-env.ts @@ -0,0 +1,3 @@ +if (process.env.ORIGIN_DATABASE_URL) { + process.env.DATABASE_URL = process.env.ORIGIN_DATABASE_URL; +} diff --git a/src/systems/origin/apps/service/src/test/setup.ts b/src/systems/origin/apps/service/src/test/setup.ts new file mode 100644 index 000000000..f8165f91a --- /dev/null +++ b/src/systems/origin/apps/service/src/test/setup.ts @@ -0,0 +1,18 @@ +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '../../prisma/generated/client'; +import { afterAll } from 'vitest'; +import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; + +setupTestGlobals({ nodeEnv: 'test' }); + +let db = await setupPrismaTestDb({ + guard: 'origin-test', + prismaClientFactory: url => new PrismaClient({ adapter: new PrismaPg({ connectionString: url }) }) +}); + +afterAll(async () => { + await db.disconnect(); +}); + +export let testDb: PrismaClient = db.client; +export let cleanDatabase = db.clean; diff --git a/src/systems/origin/apps/service/vitest.e2e.config.ts b/src/systems/origin/apps/service/vitest.e2e.config.ts new file mode 100644 index 000000000..c531c1588 --- /dev/null +++ b/src/systems/origin/apps/service/vitest.e2e.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + return createVitestConfig({ + test: { + pool: 'forks', + fileParallelism: false, + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/preload-env.ts', './src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); +}); diff --git a/src/systems/origin/apps/service/vitest.unit.config.ts b/src/systems/origin/apps/service/vitest.unit.config.ts new file mode 100644 index 000000000..f6e4bae1e --- /dev/null +++ b/src/systems/origin/apps/service/vitest.unit.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); diff --git a/src/systems/shuttle/service/package.json b/src/systems/shuttle/service/package.json index 77162e953..febc70181 100644 --- a/src/systems/shuttle/service/package.json +++ b/src/systems/shuttle/service/package.json @@ -19,8 +19,8 @@ "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", - "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", "test:watch": "bunx vitest watch", "typecheck": "bun run check-types" }, diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index 646ab91b9..68cd86027 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -18,8 +18,8 @@ "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", - "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index 48cdb0a27..31d9824ae 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -19,8 +19,8 @@ "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --schema prisma/schema'", "db:push": "bun run db:push:dev && bun run db:push:test", "test": "bun run test:unit && bun run test:e2e", - "test:unit": "bunx vitest run --config vitest.unit.config.ts --passWithNoTests", - "test:e2e": "bunx vitest run --config vitest.e2e.config.ts --passWithNoTests", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", "test:watch": "bunx vitest watch", "typecheck": "bun run check-types && bun run admin:typecheck", "admin:typecheck": "tsc --noEmit --project admin/tsconfig.json", diff --git a/src/systems/slates/apps/registry/control.toml b/src/systems/slates/apps/registry/control.toml index 8ede10d41..b623e9c51 100644 --- a/src/systems/slates/apps/registry/control.toml +++ b/src/systems/slates/apps/registry/control.toml @@ -8,14 +8,20 @@ build_context = "oss" health = { path = "/ping" } [test.unit] -command = "bun run test" +command = "bun run test:unit" + +[test.e2e] +command = "bun run test:e2e" +setup = ["bun prisma generate --schema prisma/schema.prisma", "bun prisma db push --schema prisma/schema.prisma --accept-data-loss"] +cwd = "/app/src/systems/slates/apps/registry" +runner = "service" [[databases]] adapter = "postgres" -name = "slates-registry" +name = "slates-registry-test" [env] -DATABASE_URL = "$db.slates-registry.url" +DATABASE_URL = "$db.slates-registry-test.url" REDIS_URL = "redis://$deps.redis.6379/0" OBJECT_STORAGE_URL = "http://$deps.object-store.52010" PACKAGE_BUCKET_NAME = "slates-registry-packages-test" diff --git a/src/systems/slates/apps/registry/package.json b/src/systems/slates/apps/registry/package.json index abf155db8..af2f87db2 100644 --- a/src/systems/slates/apps/registry/package.json +++ b/src/systems/slates/apps/registry/package.json @@ -18,11 +18,14 @@ "db:push:dev": "bun prisma db push --schema prisma/schema.prisma --accept-data-loss", "admin:build": "vite build --config admin/vite.config.ts", "admin:dev": "vite --config admin/vite.config.ts", - "test": "bun test", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", "typecheck": "tsc --noEmit && bun run admin:typecheck", "admin:typecheck": "tsc --noEmit --project admin/tsconfig.json" }, "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/minimatch": "^6.0.0", "@types/react": "^19.0.0", @@ -31,7 +34,8 @@ "@vercel/ncc": "^0.38.1", "@vitejs/plugin-react": "^4.3.0", "autoprefixer": "^10.4.0", - "vite": "^5.4.0" + "vite": "^5.4.0", + "vitest": "^4.0.17" }, "peerDependencies": { "typescript": "^5" diff --git a/src/systems/slates/apps/registry/src/apis/internal/tests/tenant.e2e.test.ts b/src/systems/slates/apps/registry/src/apis/internal/tests/tenant.e2e.test.ts new file mode 100644 index 000000000..16a3a803e --- /dev/null +++ b/src/systems/slates/apps/registry/src/apis/internal/tests/tenant.e2e.test.ts @@ -0,0 +1,33 @@ +import { beforeEach, describe, expect, it } from 'vitest'; +import { registryClient } from '../../../test/client'; +import { cleanDatabase } from '../../../test/setup'; + +describe('slates-registry tenant.e2e', () => { + beforeEach(async () => { + await cleanDatabase(); + }); + + it('upserts a tenant by identifier', async () => { + let created = await registryClient.tenant.upsert({ + identifier: 'registry-tenant-alpha', + name: 'Registry Tenant Alpha' + }); + + expect(created).toMatchObject({ + id: expect.any(String), + identifier: 'registry-tenant-alpha', + name: 'Registry Tenant Alpha' + }); + + let updated = await registryClient.tenant.upsert({ + identifier: 'registry-tenant-alpha', + name: 'Registry Tenant Beta' + }); + + expect(updated.id).toBe(created.id); + expect(updated.name).toBe('Registry Tenant Beta'); + + let fetched = await registryClient.tenant.get({ tenantId: created.id }); + expect(fetched.name).toBe('Registry Tenant Beta'); + }); +}); diff --git a/src/systems/slates/apps/registry/src/lib/slateVersion/slateVersion.test.ts b/src/systems/slates/apps/registry/src/lib/slateVersion/slateVersion.test.ts index 5b8182f46..d64dd6d63 100644 --- a/src/systems/slates/apps/registry/src/lib/slateVersion/slateVersion.test.ts +++ b/src/systems/slates/apps/registry/src/lib/slateVersion/slateVersion.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'bun:test'; +import { describe, expect, it } from 'vitest'; import JSZip from 'jszip'; import tar from 'tar-stream'; import { gzipSync } from 'zlib'; diff --git a/src/systems/slates/apps/registry/src/test/client.ts b/src/systems/slates/apps/registry/src/test/client.ts new file mode 100644 index 000000000..3eb2d451a --- /dev/null +++ b/src/systems/slates/apps/registry/src/test/client.ts @@ -0,0 +1,27 @@ +import { createClient } from '@lowerdeck/rpc-client'; +import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { slatesRegistryApi, type SlatesRegistryClient } from '../apis/internal'; + +type ClientOptsLike = Parameters[0]; + +let fetchRouter = createFetchRouter(); + +let registerInMemoryRoute = (endpoint: string) => { + fetchRouter.registerRoute(endpoint, request => slatesRegistryApi(request, undefined)); +}; + +let defaultEndpoint = 'http://slates-registry.test/slates-registry'; + +export let createTestRegistryClient = (opts: Partial = {}) => { + let endpoint = opts.endpoint ?? defaultEndpoint; + registerInMemoryRoute(endpoint); + fetchRouter.install(); + + return createClient({ + ...opts, + endpoint + } as ClientOptsLike); +}; + +export let registryClient = createTestRegistryClient(); +export type RegistryTestClient = ReturnType; diff --git a/src/systems/slates/apps/registry/src/test/setup.ts b/src/systems/slates/apps/registry/src/test/setup.ts new file mode 100644 index 000000000..a77bd863a --- /dev/null +++ b/src/systems/slates/apps/registry/src/test/setup.ts @@ -0,0 +1,18 @@ +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '../../prisma/generated/client'; +import { afterAll } from 'vitest'; +import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; + +setupTestGlobals({ nodeEnv: 'test' }); + +let db = await setupPrismaTestDb({ + guard: 'slates-registry-test', + prismaClientFactory: url => new PrismaClient({ adapter: new PrismaPg({ connectionString: url }) }) +}); + +afterAll(async () => { + await db.disconnect(); +}); + +export let testDb: PrismaClient = db.client; +export let cleanDatabase = db.clean; diff --git a/src/systems/slates/apps/registry/vitest.e2e.config.ts b/src/systems/slates/apps/registry/vitest.e2e.config.ts new file mode 100644 index 000000000..e94b22be2 --- /dev/null +++ b/src/systems/slates/apps/registry/vitest.e2e.config.ts @@ -0,0 +1,33 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + let config = createVitestConfig({ + test: { + pool: 'forks', + fileParallelism: false, + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); + + return withAliases(config, { + '@slates/proto': resolve(__dirname, '../../packages/proto/src/index.ts'), + '@slates/provider': resolve(__dirname, '../../packages/provider/src/index.ts'), + '@metorial-services/slates-registry-client': resolve( + __dirname, + '../../clients/registry/src/index.ts' + ), + '@metorial-services/slates-registry-internal-client': resolve( + __dirname, + '../../clients/registry-internal/src/index.ts' + ) + }); +}); diff --git a/src/systems/slates/apps/registry/vitest.unit.config.ts b/src/systems/slates/apps/registry/vitest.unit.config.ts new file mode 100644 index 000000000..f6e4bae1e --- /dev/null +++ b/src/systems/slates/apps/registry/vitest.unit.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); diff --git a/src/systems/subspace/apps/controller/package.json b/src/systems/subspace/apps/controller/package.json index 9bc9bfe16..7420c7fb1 100644 --- a/src/systems/subspace/apps/controller/package.json +++ b/src/systems/subspace/apps/controller/package.json @@ -11,7 +11,7 @@ "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", "db:push:test": "sh -c 'set -a; . .env.test; set +a; bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts'", "test": "bun run test:unit && bun run test:ci", - "test:unit": "vitest run --config vitest.unit.config.ts --passWithNoTests", + "test:unit": "vitest run --config vitest.unit.config.ts", "test:ci": "vitest run --mode ci --reporter verbose --configLoader native", "test:watch": "bunx vitest watch" }, diff --git a/src/systems/subspace/apps/public/control.toml b/src/systems/subspace/apps/public/control.toml index 5351796c4..b58d19d7c 100644 --- a/src/systems/subspace/apps/public/control.toml +++ b/src/systems/subspace/apps/public/control.toml @@ -6,3 +6,37 @@ port = 52071 dockerfile = "src/systems/subspace/apps/public/Dockerfile" build_context = "oss" health = { path = "/ping" } + +[test.unit] +command = "bun run test:unit" + +[test.e2e] +command = "bun run test:e2e" +setup = [ + "bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", + "bunx prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts" +] +cwd = "/app/src/systems/subspace/apps/public" +runner = "service" + +[[databases]] +adapter = "postgres" +name = "subspace-test" + +[env] +DATABASE_URL = "$db.subspace-test.url" +PUBLIC_SERVICE_URL = "http://subspace-public:52071" +REDIS_URL = "redis://$deps.redis.6379/0" + +[[deps]] +name = "postgres" +preset = "postgres" + +[deps.env] +POSTGRES_USER = "postgres" +POSTGRES_PASSWORD = "postgres" +POSTGRES_DB = "postgres" + +[[deps]] +name = "redis" +preset = "redis" diff --git a/src/systems/subspace/apps/public/package.json b/src/systems/subspace/apps/public/package.json index 304d7105f..55d267221 100644 --- a/src/systems/subspace/apps/public/package.json +++ b/src/systems/subspace/apps/public/package.json @@ -14,10 +14,15 @@ "frontend:build": "vite build ./frontend", "server:build": "ncc build ./src/server.ts -o ./dist --source-map --external bun:sqlite --external bun && bun run sentry:sourcemaps:if-token", "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-subspace-frontend ./dist && sentry-cli sourcemaps upload --org metorial --project mte-subspace-frontend ./dist", - "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'" + "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts" }, "devDependencies": { - "@types/bun": "latest" + "@lowerdeck/testing-tools": "^1.0.1", + "@types/bun": "latest", + "vitest": "^4.0.17" }, "peerDependencies": { "typescript": "^5" diff --git a/src/systems/subspace/apps/public/src/lib/htmlEncode.test.ts b/src/systems/subspace/apps/public/src/lib/htmlEncode.test.ts new file mode 100644 index 000000000..aa4a3be4a --- /dev/null +++ b/src/systems/subspace/apps/public/src/lib/htmlEncode.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from 'vitest'; +import { htmlDecode, htmlEncode } from './htmlEncode'; + +describe('htmlEncode', () => { + it('encodes and decodes html entities', () => { + let raw = ``; + let encoded = htmlEncode(raw); + + expect(encoded).toBe( + '<script>alert("xss")</script>' + ); + expect(htmlDecode(encoded)).toBe(raw); + }); +}); diff --git a/src/systems/subspace/apps/public/src/test/ping.e2e.test.ts b/src/systems/subspace/apps/public/src/test/ping.e2e.test.ts new file mode 100644 index 000000000..ba56b792c --- /dev/null +++ b/src/systems/subspace/apps/public/src/test/ping.e2e.test.ts @@ -0,0 +1,11 @@ +import { describe, expect, it } from 'vitest'; +import { app } from '../api/public'; + +describe('subspace-public ping', () => { + it('returns OK from /ping', async () => { + let response = await app.fetch(new Request('http://subspace-public.test/ping')); + + expect(response.status).toBe(200); + expect(await response.text()).toBe('OK'); + }); +}); diff --git a/src/systems/subspace/apps/public/src/test/setup.ts b/src/systems/subspace/apps/public/src/test/setup.ts new file mode 100644 index 000000000..c538e811c --- /dev/null +++ b/src/systems/subspace/apps/public/src/test/setup.ts @@ -0,0 +1,18 @@ +import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '@metorial-subspace/db'; +import { afterAll } from 'vitest'; + +setupTestGlobals({ nodeEnv: 'test' }); + +let db = await setupPrismaTestDb({ + guard: 'subspace-test', + prismaClientFactory: url => new PrismaClient({ adapter: new PrismaPg({ connectionString: url }) }) +}); + +afterAll(async () => { + await db.disconnect(); +}); + +export let testDb = db.client; +export let cleanDatabase = db.clean; diff --git a/src/systems/subspace/apps/public/vitest.e2e.config.ts b/src/systems/subspace/apps/public/vitest.e2e.config.ts new file mode 100644 index 000000000..c5f68cdbc --- /dev/null +++ b/src/systems/subspace/apps/public/vitest.e2e.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + return createVitestConfig({ + test: { + pool: 'forks', + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); +}); diff --git a/src/systems/subspace/apps/public/vitest.unit.config.ts b/src/systems/subspace/apps/public/vitest.unit.config.ts new file mode 100644 index 000000000..f6e4bae1e --- /dev/null +++ b/src/systems/subspace/apps/public/vitest.unit.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); diff --git a/src/systems/subspace/apps/worker/control.toml b/src/systems/subspace/apps/worker/control.toml index e82abb443..2304247a9 100644 --- a/src/systems/subspace/apps/worker/control.toml +++ b/src/systems/subspace/apps/worker/control.toml @@ -5,3 +5,37 @@ name = "subspace-worker" dockerfile = "src/systems/subspace/apps/worker/Dockerfile" build_context = "oss" health = { cmd = "curl -f http://localhost:12121/ || exit 1" } + +[test.unit] +command = "bun run test:unit" + +[test.e2e] +command = "bun run test:e2e" +setup = [ + "bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", + "bunx prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts" +] +cwd = "/app/src/systems/subspace/apps/worker" +runner = "service" + +[[databases]] +adapter = "postgres" +name = "subspace-test" + +[env] +DATABASE_URL = "$db.subspace-test.url" +REDIS_URL = "redis://$deps.redis.6379/0" +WORKER_HEALTH_PORT = "12121" + +[[deps]] +name = "postgres" +preset = "postgres" + +[deps.env] +POSTGRES_USER = "postgres" +POSTGRES_PASSWORD = "postgres" +POSTGRES_DB = "postgres" + +[[deps]] +name = "redis" +preset = "redis" diff --git a/src/systems/subspace/apps/worker/package.json b/src/systems/subspace/apps/worker/package.json index c37e44dca..da1864044 100644 --- a/src/systems/subspace/apps/worker/package.json +++ b/src/systems/subspace/apps/worker/package.json @@ -8,10 +8,15 @@ "start": "bun ./src/server.ts", "server:build": "ncc build ./src/server.ts -o ./dist --source-map --external bun:sqlite --external bun && bun run sentry:sourcemaps:if-token", "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-subspace-worker ./dist && sentry-cli sourcemaps upload --org metorial --project mte-subspace-worker ./dist", - "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'" + "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts" }, "devDependencies": { - "@types/bun": "latest" + "@lowerdeck/testing-tools": "^1.0.1", + "@types/bun": "latest", + "vitest": "^4.0.17" }, "peerDependencies": { "typescript": "^5" diff --git a/src/systems/subspace/apps/worker/src/endpoints.ts b/src/systems/subspace/apps/worker/src/endpoints.ts index 3e84d7027..7d5c59d29 100644 --- a/src/systems/subspace/apps/worker/src/endpoints.ts +++ b/src/systems/subspace/apps/worker/src/endpoints.ts @@ -1,25 +1,8 @@ -import { withTracingSuppressed } from '@lowerdeck/telemetry'; -import { db } from '@metorial-subspace/db'; -import { RedisClient } from 'bun'; +import { workerHealthFetch } from './health'; -let redis = new RedisClient(process.env.REDIS_URL?.replace('rediss://', 'redis://'), { - tls: process.env.REDIS_URL?.startsWith('rediss://') -}); - -if (process.env.NODE_ENV === 'production') { +if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test') { Bun.serve({ - fetch: async _ => - await withTracingSuppressed(async () => { - try { - await db.backend.count(); - - await redis.ping(); - - return new Response('OK'); - } catch (e) { - return new Response('Service Unavailable', { status: 503 }); - } - }), - port: 12121 + fetch: workerHealthFetch, + port: Number(process.env.WORKER_HEALTH_PORT ?? 12121) }); } diff --git a/src/systems/subspace/apps/worker/src/health.ts b/src/systems/subspace/apps/worker/src/health.ts new file mode 100644 index 000000000..c165cab7a --- /dev/null +++ b/src/systems/subspace/apps/worker/src/health.ts @@ -0,0 +1,19 @@ +import { withTracingSuppressed } from '@lowerdeck/telemetry'; +import { db } from '@metorial-subspace/db'; +import { RedisClient } from 'bun'; + +let redis = new RedisClient(process.env.REDIS_URL?.replace('rediss://', 'redis://'), { + tls: process.env.REDIS_URL?.startsWith('rediss://') +}); + +export let workerHealthFetch = async (_request: Request) => + withTracingSuppressed(async () => { + try { + await db.backend.count(); + await redis.ping(); + + return new Response('OK'); + } catch { + return new Response('Service Unavailable', { status: 503 }); + } + }); diff --git a/src/systems/subspace/apps/worker/src/test/health.e2e.test.ts b/src/systems/subspace/apps/worker/src/test/health.e2e.test.ts new file mode 100644 index 000000000..c0d7078dc --- /dev/null +++ b/src/systems/subspace/apps/worker/src/test/health.e2e.test.ts @@ -0,0 +1,11 @@ +import { describe, expect, it } from 'vitest'; +import { workerHealthFetch } from '../health'; + +describe('subspace-worker health', () => { + it('returns OK when database and redis are reachable', async () => { + let response = await workerHealthFetch(new Request('http://worker.test/')); + + expect(response.status).toBe(200); + expect(await response.text()).toBe('OK'); + }); +}); diff --git a/src/systems/subspace/apps/worker/src/test/setup.ts b/src/systems/subspace/apps/worker/src/test/setup.ts new file mode 100644 index 000000000..c538e811c --- /dev/null +++ b/src/systems/subspace/apps/worker/src/test/setup.ts @@ -0,0 +1,18 @@ +import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '@metorial-subspace/db'; +import { afterAll } from 'vitest'; + +setupTestGlobals({ nodeEnv: 'test' }); + +let db = await setupPrismaTestDb({ + guard: 'subspace-test', + prismaClientFactory: url => new PrismaClient({ adapter: new PrismaPg({ connectionString: url }) }) +}); + +afterAll(async () => { + await db.disconnect(); +}); + +export let testDb = db.client; +export let cleanDatabase = db.clean; diff --git a/src/systems/subspace/apps/worker/vitest.e2e.config.ts b/src/systems/subspace/apps/worker/vitest.e2e.config.ts new file mode 100644 index 000000000..c5f68cdbc --- /dev/null +++ b/src/systems/subspace/apps/worker/vitest.e2e.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + return createVitestConfig({ + test: { + pool: 'forks', + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); +}); diff --git a/src/systems/subspace/apps/worker/vitest.unit.config.ts b/src/systems/subspace/apps/worker/vitest.unit.config.ts new file mode 100644 index 000000000..cc066393d --- /dev/null +++ b/src/systems/subspace/apps/worker/vitest.unit.config.ts @@ -0,0 +1,13 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: [ + 'src/**/*.test.ts', + resolve(__dirname, '../../modules/skills/src/**/*.test.ts') + ], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); diff --git a/src/systems/subspace/modules/skills/src/lib/detag.test.ts b/src/systems/subspace/modules/skills/src/lib/detag.test.ts new file mode 100644 index 000000000..fe04b633c --- /dev/null +++ b/src/systems/subspace/modules/skills/src/lib/detag.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, it } from 'vitest'; +import { detag } from './detag'; + +describe('detag', () => { + it('dedents multiline template strings', () => { + let result = detag` + line one + line two + `; + + expect(result).toBe('line one\n line two'); + }); +}); diff --git a/src/systems/synthesis/service/control.toml b/src/systems/synthesis/service/control.toml new file mode 100644 index 000000000..61d8d1e55 --- /dev/null +++ b/src/systems/synthesis/service/control.toml @@ -0,0 +1,41 @@ +[control] +name = "synthesis" + +[service] +port = 52160 +dockerfile = "src/systems/synthesis/service/Dockerfile" +build_context = "oss" +health = { path = "/ping" } + +[test.unit] +command = "bun run test:unit" + +[test.e2e] +command = "bun run test:e2e" +setup = ["bun run db:generate", "bun prisma db push --config ./prisma.config.ts --accept-data-loss"] +cwd = "/app/src/systems/synthesis/service" +runner = "service" + +[[databases]] +adapter = "postgres" +name = "synthesis-test" + +[env] +SYNTHESIS_DATABASE_URL = "$db.synthesis-test.url" +DATABASE_URL = "$db.synthesis-test.url" +REDIS_URL = "redis://$deps.redis.6379/0" +SYNTHESIS_API_PORT = "52160" +SYNTHESIS_HEALTH_PORT = "12121" + +[[deps]] +name = "postgres" +preset = "postgres" + +[deps.env] +POSTGRES_USER = "synthesis" +POSTGRES_PASSWORD = "synthesis" +POSTGRES_DB = "synthesis" + +[[deps]] +name = "redis" +preset = "redis" diff --git a/src/systems/synthesis/service/package.json b/src/systems/synthesis/service/package.json index 7b0f17a8a..286a5c00a 100644 --- a/src/systems/synthesis/service/package.json +++ b/src/systems/synthesis/service/package.json @@ -18,11 +18,14 @@ "prisma:push": "bun run db:push:dev", "db:generate": "bun prisma generate --config ./prisma.config.ts", "db:push:dev": "sh -c 'set -a; [ -f .env ] && . .env; set +a; bun prisma db push --config ./prisma.config.ts --accept-data-loss'", - "test": "bunx vitest run --passWithNoTests", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", diff --git a/src/systems/synthesis/service/src/lib/delta/apply.test.ts b/src/systems/synthesis/service/src/lib/delta/apply.test.ts new file mode 100644 index 000000000..45ec3f115 --- /dev/null +++ b/src/systems/synthesis/service/src/lib/delta/apply.test.ts @@ -0,0 +1,37 @@ +import { describe, expect, it } from 'vitest'; +import { applyBatch } from './apply'; +import { OpCode } from './types'; + +describe('applyBatch', () => { + it('sets nested values and deletes keys', () => { + let state = { name: 'alpha', nested: { count: 1 }, items: ['a', 'b'] }; + + let updated = applyBatch(state, [ + 1, + [OpCode.Set, ['name'], 'beta'], + [OpCode.Set, ['nested', 'count'], 2], + [OpCode.Delete, ['items', 0]] + ]); + + expect(updated).toEqual({ + name: 'beta', + nested: { count: 2 }, + items: ['b'] + }); + }); + + it('inserts into arrays and appends strings', () => { + let state = { message: 'hi', tags: ['one'] }; + + let updated = applyBatch(state, [ + 2, + [OpCode.StringAppend, ['message'], ' there'], + [OpCode.ArrayInsert, ['tags'], 1, ['two']] + ]); + + expect(updated).toEqual({ + message: 'hi there', + tags: ['one', 'two'] + }); + }); +}); diff --git a/src/systems/synthesis/service/src/test/ping.e2e.test.ts b/src/systems/synthesis/service/src/test/ping.e2e.test.ts new file mode 100644 index 000000000..4d1c21f1e --- /dev/null +++ b/src/systems/synthesis/service/src/test/ping.e2e.test.ts @@ -0,0 +1,11 @@ +import { describe, expect, it } from 'vitest'; +import { synthesisHttpApi } from '../http'; + +describe('synthesis ping', () => { + it('returns OK from /ping', async () => { + let response = await synthesisHttpApi.fetch(new Request('http://synthesis.test/ping')); + + expect(response.status).toBe(200); + expect(await response.text()).toBe('OK'); + }); +}); diff --git a/src/systems/synthesis/service/src/test/preload-env.ts b/src/systems/synthesis/service/src/test/preload-env.ts new file mode 100644 index 000000000..b7abd8f0e --- /dev/null +++ b/src/systems/synthesis/service/src/test/preload-env.ts @@ -0,0 +1,3 @@ +if (process.env.SYNTHESIS_DATABASE_URL) { + process.env.DATABASE_URL = process.env.SYNTHESIS_DATABASE_URL; +} diff --git a/src/systems/synthesis/service/src/test/setup.ts b/src/systems/synthesis/service/src/test/setup.ts new file mode 100644 index 000000000..cd4cb536a --- /dev/null +++ b/src/systems/synthesis/service/src/test/setup.ts @@ -0,0 +1,18 @@ +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '../../prisma/generated/client'; +import { afterAll } from 'vitest'; +import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; + +setupTestGlobals({ nodeEnv: 'test' }); + +let db = await setupPrismaTestDb({ + guard: 'synthesis-test', + prismaClientFactory: url => new PrismaClient({ adapter: new PrismaPg({ connectionString: url }) }) +}); + +afterAll(async () => { + await db.disconnect(); +}); + +export let testDb: PrismaClient = db.client; +export let cleanDatabase = db.clean; diff --git a/src/systems/synthesis/service/vitest.e2e.config.ts b/src/systems/synthesis/service/vitest.e2e.config.ts new file mode 100644 index 000000000..f786cb3ea --- /dev/null +++ b/src/systems/synthesis/service/vitest.e2e.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + return createVitestConfig({ + test: { + pool: 'forks', + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/preload-env.ts', './src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); +}); diff --git a/src/systems/synthesis/service/vitest.unit.config.ts b/src/systems/synthesis/service/vitest.unit.config.ts new file mode 100644 index 000000000..f6e4bae1e --- /dev/null +++ b/src/systems/synthesis/service/vitest.unit.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); diff --git a/src/tooling/control/mocks/Dockerfile b/src/tooling/control/mocks/Dockerfile index a92557b01..d8a2a5282 100644 --- a/src/tooling/control/mocks/Dockerfile +++ b/src/tooling/control/mocks/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1 +FROM oven/bun:1.2-alpine WORKDIR /mock ARG MOCK_SERVER=object-store/server.ts COPY ${MOCK_SERVER} ./server.ts From 86416def648c619dd38c1879fa4eca9c4a700fd3 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 15:58:07 +0200 Subject: [PATCH 07/69] Remove stubs --- src/systems/ares/service/src/test/client.ts | 33 ------------------- src/systems/ares/service/src/test/mocks.ts | 31 ----------------- .../ares/service/src/test/stubs/jackson.ts | 9 ----- 3 files changed, 73 deletions(-) delete mode 100644 src/systems/ares/service/src/test/client.ts delete mode 100644 src/systems/ares/service/src/test/mocks.ts delete mode 100644 src/systems/ares/service/src/test/stubs/jackson.ts diff --git a/src/systems/ares/service/src/test/client.ts b/src/systems/ares/service/src/test/client.ts deleted file mode 100644 index c9e07a569..000000000 --- a/src/systems/ares/service/src/test/client.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; -import { internalApp } from '../apis/internal/_app'; -import { appController } from '../apis/internal/controllers/app'; - -type ClientOptsLike = Parameters[0]; - -let testRootController = internalApp.controller({ app: appController }); -export type TestInternalClient = InferClient; - -let fetchRouter = createFetchRouter(); -let testInternalRPC = createServer({})(testRootController); -let aresInternalRpc = rpcMux({ path: '/metorial-ares-internal/api' }, [testInternalRPC]); - -let defaultEndpoint = 'http://ares-internal.test/metorial-ares-internal/api'; - -export let ensureAresTestFetch = () => { - fetchRouter.registerRoute(defaultEndpoint, request => aresInternalRpc.fetch(request)); - fetchRouter.install(); -}; - -export let createAresInternalClient = (opts: Partial = {}) => { - ensureAresTestFetch(); - - return createClient({ - ...opts, - endpoint: opts.endpoint ?? defaultEndpoint - } as ClientOptsLike); -}; - -export let getAresInternalClient = async (opts: Partial = {}) => - createAresInternalClient(opts); diff --git a/src/systems/ares/service/src/test/mocks.ts b/src/systems/ares/service/src/test/mocks.ts deleted file mode 100644 index 2247369aa..000000000 --- a/src/systems/ares/service/src/test/mocks.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { vi } from 'vitest'; - -vi.mock('../lib/jackson', () => ({ - jackson: { - apiController: {}, - oauthController: {}, - redirectUrl: 'http://ares-sso.test/*', - defaultRedirectUrl: { - saml: 'http://ares-sso.test/sso/jxn/saml/callback', - oidc: 'http://ares-sso.test/sso/jxn/oidc/callback' - } - } -})); - -vi.mock('../email/client', () => { - let sender = { id: 'relay_sender_test' }; - let emailIdentity = { id: 'relay_email_identity_test' }; - - return { - relay: { - sender: { upsert: vi.fn(async () => sender) }, - emailIdentity: { upsert: vi.fn(async () => emailIdentity) }, - email: { send: vi.fn(async () => undefined) } - }, - sender: Promise.resolve(sender), - emailIdentity: Promise.resolve(emailIdentity), - createTemplateSender: () => ({ - send: vi.fn(async () => undefined) - }) - }; -}); diff --git a/src/systems/ares/service/src/test/stubs/jackson.ts b/src/systems/ares/service/src/test/stubs/jackson.ts deleted file mode 100644 index 564fe95ca..000000000 --- a/src/systems/ares/service/src/test/stubs/jackson.ts +++ /dev/null @@ -1,9 +0,0 @@ -export let jackson = { - apiController: {}, - oauthController: {}, - redirectUrl: 'http://ares-sso.test/*', - defaultRedirectUrl: { - saml: 'http://ares-sso.test/sso/jxn/saml/callback', - oidc: 'http://ares-sso.test/sso/jxn/oidc/callback' - } -}; From 1e8750ef56d4f9c3a899b3f34ee0a59282c634a8 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 17:08:25 +0200 Subject: [PATCH 08/69] Import remaining services --- .github/workflows/control.yml | 6 + .gitignore | 3 + bun.lock | 389 +- src/backend/modules/email/package.json | 2 +- src/backend/modules/email/src/relay.ts | 2 +- .../modules/email/src/templates/index.ts | 2 +- src/backend/modules/file/package.json | 2 +- src/backend/modules/file/src/storage.ts | 2 +- src/backend/modules/search/package.json | 2 +- src/backend/modules/search/src/index.ts | 2 +- .../forge/dts-bundle-generator.config.json | 2 +- src/systems/_clients/object-storage/Makefile | 16 + src/systems/_clients/object-storage/README.md | 132 + .../_clients/object-storage/package.json | 41 + .../_clients/object-storage/src/index.test.ts | 213 + .../_clients/object-storage/src/index.ts | 300 ++ .../_clients/object-storage/tsconfig.json | 18 + .../_clients/object-storage/tsup.config.ts | 11 + .../dts-bundle-generator.config.json | 2 +- src/systems/_clients/relay/.gitignore | 34 + src/systems/_clients/relay/README.md | 21 + src/systems/_clients/relay/package.json | 43 + src/systems/_clients/relay/src/index.ts | 14 + .../relay/src/templates/components/button.tsx | 28 + .../relay/src/templates/components/code.tsx | 30 + .../src/templates/components/dataList.tsx | 23 + .../relay/src/templates/components/index.tsx | 6 + .../relay/src/templates/components/layout.tsx | 45 + .../relay/src/templates/components/text.tsx | 22 + .../src/templates/components/wrapper.tsx | 86 + .../_clients/relay/src/templates/index.ts | 3 + .../relay/src/templates/lib/email.tsx | 30 + .../_clients/relay/src/templates/template.ts | 7 + src/systems/_clients/relay/tsconfig.json | 37 + src/systems/_clients/relay/tsup.config.ts | 15 + src/systems/_clients/voyager/.gitignore | 34 + src/systems/_clients/voyager/README.md | 21 + src/systems/_clients/voyager/package.json | 40 + src/systems/_clients/voyager/src/index.ts | 6 + src/systems/_clients/voyager/tsconfig.json | 36 + src/systems/_clients/voyager/tsup.config.ts | 11 + src/systems/ares/service/package.json | 4 +- .../ares/service/src/email/authCode.tsx | 2 +- src/systems/ares/service/src/email/client.ts | 2 +- .../service/src/email/successfulLogin.tsx | 2 +- src/systems/cargo/modules/file/package.json | 2 +- src/systems/cargo/modules/file/src/storage.ts | 2 +- src/systems/cargo/modules/search/package.json | 2 +- src/systems/cargo/modules/search/src/index.ts | 2 +- src/systems/cargo/service/package.json | 2 +- src/systems/forge/service/package.json | 2 +- .../service/src/services/workflowArtifact.ts | 2 +- src/systems/forge/service/src/storage.ts | 2 +- src/systems/function-bay/service/package.json | 2 +- .../function-bay/service/src/storage.ts | 2 +- .../object-storage/service/.dockerignore | 43 + .../service/.github/workflows/legal.yml | 12 + .../service/.github/workflows/publish.yml | 72 + .../service/.github/workflows/test.yml | 103 + src/systems/object-storage/service/.gitignore | 21 + src/systems/object-storage/service/Cargo.lock | 4410 +++++++++++++++++ src/systems/object-storage/service/Cargo.toml | 60 + src/systems/object-storage/service/Dockerfile | 61 + src/systems/object-storage/service/LICENSE | 201 + src/systems/object-storage/service/README.md | 319 ++ .../object-storage/service/clients/.gitignore | 43 + .../service/clients/go/Makefile | 18 + .../service/clients/go/README.md | 157 + .../service/clients/go/client.go | 539 ++ .../service/clients/go/client_test.go | 312 ++ .../object-storage/service/clients/go/go.mod | 11 + .../service/clients/rust/Cargo.toml | 28 + .../service/clients/rust/Makefile | 18 + .../service/clients/rust/README.md | 117 + .../service/clients/rust/src/lib.rs | 785 +++ .../service/config.example.toml | 33 + .../object-storage/service/control.toml | 22 + .../service/object-store-backends/Cargo.toml | 38 + .../object-store-backends/src/azure.rs | 415 ++ .../object-store-backends/src/backend.rs | 81 + .../object-store-backends/src/error.rs | 27 + .../service/object-store-backends/src/gcs.rs | 389 ++ .../service/object-store-backends/src/lib.rs | 9 + .../object-store-backends/src/local.rs | 369 ++ .../service/object-store-backends/src/s3.rs | 426 ++ .../service/object-store/Cargo.toml | 41 + .../service/object-store/src/api.rs | 341 ++ .../service/object-store/src/config.rs | 85 + .../service/object-store/src/error.rs | 71 + .../service/object-store/src/lib.rs | 10 + .../service/object-store/src/main.rs | 91 + .../service/object-store/src/metadata.rs | 536 ++ .../service/object-store/src/router.rs | 36 + .../service/object-store/src/service.rs | 255 + .../object-store/tests/integration_test.rs | 421 ++ .../service/object-store/tests/load_test.rs | 355 ++ src/systems/origin/apps/service/package.json | 2 +- .../origin/apps/service/src/storage.ts | 2 +- .../relay/scripts/prepare-docker-build.sh | 5 + src/systems/relay/service/.dockerignore | 14 + src/systems/relay/service/.env.example | 13 + src/systems/relay/service/.gitignore | 148 + src/systems/relay/service/Dockerfile | 40 + src/systems/relay/service/control.toml | 38 + src/systems/relay/service/dev.Dockerfile | 15 + .../relay/service/docker-compose.dev.yml | 110 + src/systems/relay/service/init-test-db.sh | 15 + src/systems/relay/service/package.json | 73 + src/systems/relay/service/prisma.config.ts | 26 + .../20260209135950_init/migration.sql | 107 + .../prisma/migrations/migration_lock.toml | 3 + .../relay/service/prisma/schema.prisma | 121 + .../relay/service/src/controllers/_app.ts | 3 + .../relay/service/src/controllers/email.ts | 41 + .../service/src/controllers/emailIdentity.ts | 49 + .../relay/service/src/controllers/index.ts | 17 + .../relay/service/src/controllers/sender.ts | 42 + .../src/controllers/tests/sender.e2e.test.ts | 25 + src/systems/relay/service/src/cron/cleanup.ts | 24 + src/systems/relay/service/src/db.ts | 12 + src/systems/relay/service/src/endpoints.ts | 30 + src/systems/relay/service/src/env.ts | 21 + src/systems/relay/service/src/id.ts | 39 + src/systems/relay/service/src/init.ts | 34 + src/systems/relay/service/src/instrument.ts | 36 + src/systems/relay/service/src/lib/send.ts | 98 + .../service/src/presenters/emailIdentity.ts | 20 + .../relay/service/src/presenters/index.ts | 2 + .../relay/service/src/presenters/sender.ts | 11 + .../relay/service/src/queue/sendEmail.ts | 36 + .../service/src/queue/sendEmailSingle.ts | 124 + src/systems/relay/service/src/server.ts | 21 + .../relay/service/src/services/email.test.ts | 24 + .../relay/service/src/services/email.ts | 135 + .../relay/service/src/services/index.ts | 2 + .../relay/service/src/services/sender.ts | 49 + src/systems/relay/service/src/test/client.ts | 29 + src/systems/relay/service/src/test/setup.ts | 18 + src/systems/relay/service/src/worker.ts | 10 + src/systems/relay/service/tsconfig.json | 33 + src/systems/relay/service/vitest.config.ts | 46 + .../relay/service/vitest.e2e.config.ts | 19 + .../relay/service/vitest.unit.config.ts | 9 + src/systems/shuttle/service/package.json | 2 +- src/systems/shuttle/service/src/storage.ts | 2 +- src/systems/signal/service/package.json | 2 +- src/systems/signal/service/src/storage.ts | 2 +- src/systems/slates/apps/hub/package.json | 2 +- .../hub/src/services/slateSessionToolCall.ts | 2 +- src/systems/slates/apps/hub/src/storage.ts | 2 +- src/systems/slates/apps/registry/package.json | 6 +- .../slates/apps/registry/src/storage.ts | 2 +- .../slates/apps/registry/tsconfig.server.json | 12 + .../dts-bundle-generator.config.json | 2 +- .../registry/dts-bundle-generator.config.json | 2 +- .../subspace/modules/search/package.json | 2 +- .../subspace/modules/search/src/index.ts | 2 +- .../packages/connection-utils/package.json | 2 +- .../packages/connection-utils/src/storage.ts | 2 +- .../voyager/scripts/prepare-docker-build.sh | 5 + src/systems/voyager/service/.dockerignore | 14 + src/systems/voyager/service/.env.example | 5 + src/systems/voyager/service/.gitignore | 148 + src/systems/voyager/service/Dockerfile | 40 + src/systems/voyager/service/control.toml | 43 + src/systems/voyager/service/dev.Dockerfile | 18 + .../voyager/service/docker-compose.dev.yml | 54 + src/systems/voyager/service/package.json | 77 + src/systems/voyager/service/prisma.config.ts | 26 + .../20260208195500_init/migration.sql | 108 + .../prisma/migrations/migration_lock.toml | 1 + .../voyager/service/prisma/schema.prisma | 91 + src/systems/voyager/service/src/backend.ts | 39 + .../voyager/service/src/backends/_backend.ts | 17 + .../service/src/backends/algolia/index.ts | 85 + .../voyager/service/src/backends/index.ts | 5 + .../voyager/service/src/backends/pg/index.ts | 170 + .../voyager/service/src/backends/pg/schema.ts | 100 + .../voyager/service/src/controllers/_app.ts | 3 + .../voyager/service/src/controllers/_index.ts | 48 + .../voyager/service/src/controllers/index.ts | 21 + .../voyager/service/src/controllers/record.ts | 101 + .../voyager/service/src/controllers/source.ts | 42 + .../voyager/service/src/controllers/tenant.ts | 41 + .../src/controllers/tests/tenant.e2e.test.ts | 21 + src/systems/voyager/service/src/db.ts | 37 + src/systems/voyager/service/src/endpoints.ts | 29 + src/systems/voyager/service/src/env.ts | 13 + src/systems/voyager/service/src/id.ts | 31 + src/systems/voyager/service/src/init.ts | 26 + src/systems/voyager/service/src/instrument.ts | 35 + .../voyager/service/src/presenters/index.ts | 4 + .../voyager/service/src/presenters/index_.ts | 14 + .../voyager/service/src/presenters/record.ts | 18 + .../voyager/service/src/presenters/source.ts | 11 + .../voyager/service/src/presenters/tenant.ts | 11 + .../voyager/service/src/queues/cleanup.ts | 14 + .../voyager/service/src/queues/record.ts | 34 + src/systems/voyager/service/src/server.ts | 26 + .../voyager/service/src/services/index.ts | 4 + .../voyager/service/src/services/index_.ts | 57 + .../voyager/service/src/services/record.ts | 161 + .../voyager/service/src/services/source.ts | 49 + .../voyager/service/src/services/tenant.ts | 42 + .../voyager/service/src/test/client.ts | 29 + src/systems/voyager/service/src/test/setup.ts | 18 + .../service/src/utils/searchQuery.test.ts | 13 + .../voyager/service/src/utils/searchQuery.ts | 8 + src/systems/voyager/service/src/worker.ts | 9 + src/systems/voyager/service/tsconfig.json | 33 + .../voyager/service/vitest.e2e.config.ts | 19 + .../voyager/service/vitest.unit.config.ts | 9 + 212 files changed, 16987 insertions(+), 77 deletions(-) create mode 100644 src/systems/_clients/object-storage/Makefile create mode 100644 src/systems/_clients/object-storage/README.md create mode 100644 src/systems/_clients/object-storage/package.json create mode 100644 src/systems/_clients/object-storage/src/index.test.ts create mode 100644 src/systems/_clients/object-storage/src/index.ts create mode 100644 src/systems/_clients/object-storage/tsconfig.json create mode 100644 src/systems/_clients/object-storage/tsup.config.ts create mode 100644 src/systems/_clients/relay/.gitignore create mode 100644 src/systems/_clients/relay/README.md create mode 100644 src/systems/_clients/relay/package.json create mode 100644 src/systems/_clients/relay/src/index.ts create mode 100644 src/systems/_clients/relay/src/templates/components/button.tsx create mode 100644 src/systems/_clients/relay/src/templates/components/code.tsx create mode 100644 src/systems/_clients/relay/src/templates/components/dataList.tsx create mode 100644 src/systems/_clients/relay/src/templates/components/index.tsx create mode 100644 src/systems/_clients/relay/src/templates/components/layout.tsx create mode 100644 src/systems/_clients/relay/src/templates/components/text.tsx create mode 100644 src/systems/_clients/relay/src/templates/components/wrapper.tsx create mode 100644 src/systems/_clients/relay/src/templates/index.ts create mode 100644 src/systems/_clients/relay/src/templates/lib/email.tsx create mode 100644 src/systems/_clients/relay/src/templates/template.ts create mode 100644 src/systems/_clients/relay/tsconfig.json create mode 100644 src/systems/_clients/relay/tsup.config.ts create mode 100644 src/systems/_clients/voyager/.gitignore create mode 100644 src/systems/_clients/voyager/README.md create mode 100644 src/systems/_clients/voyager/package.json create mode 100644 src/systems/_clients/voyager/src/index.ts create mode 100644 src/systems/_clients/voyager/tsconfig.json create mode 100644 src/systems/_clients/voyager/tsup.config.ts create mode 100644 src/systems/object-storage/service/.dockerignore create mode 100644 src/systems/object-storage/service/.github/workflows/legal.yml create mode 100644 src/systems/object-storage/service/.github/workflows/publish.yml create mode 100644 src/systems/object-storage/service/.github/workflows/test.yml create mode 100644 src/systems/object-storage/service/.gitignore create mode 100644 src/systems/object-storage/service/Cargo.lock create mode 100644 src/systems/object-storage/service/Cargo.toml create mode 100644 src/systems/object-storage/service/Dockerfile create mode 100644 src/systems/object-storage/service/LICENSE create mode 100644 src/systems/object-storage/service/README.md create mode 100644 src/systems/object-storage/service/clients/.gitignore create mode 100644 src/systems/object-storage/service/clients/go/Makefile create mode 100644 src/systems/object-storage/service/clients/go/README.md create mode 100644 src/systems/object-storage/service/clients/go/client.go create mode 100644 src/systems/object-storage/service/clients/go/client_test.go create mode 100644 src/systems/object-storage/service/clients/go/go.mod create mode 100644 src/systems/object-storage/service/clients/rust/Cargo.toml create mode 100644 src/systems/object-storage/service/clients/rust/Makefile create mode 100644 src/systems/object-storage/service/clients/rust/README.md create mode 100644 src/systems/object-storage/service/clients/rust/src/lib.rs create mode 100644 src/systems/object-storage/service/config.example.toml create mode 100644 src/systems/object-storage/service/control.toml create mode 100644 src/systems/object-storage/service/object-store-backends/Cargo.toml create mode 100644 src/systems/object-storage/service/object-store-backends/src/azure.rs create mode 100644 src/systems/object-storage/service/object-store-backends/src/backend.rs create mode 100644 src/systems/object-storage/service/object-store-backends/src/error.rs create mode 100644 src/systems/object-storage/service/object-store-backends/src/gcs.rs create mode 100644 src/systems/object-storage/service/object-store-backends/src/lib.rs create mode 100644 src/systems/object-storage/service/object-store-backends/src/local.rs create mode 100644 src/systems/object-storage/service/object-store-backends/src/s3.rs create mode 100644 src/systems/object-storage/service/object-store/Cargo.toml create mode 100644 src/systems/object-storage/service/object-store/src/api.rs create mode 100644 src/systems/object-storage/service/object-store/src/config.rs create mode 100644 src/systems/object-storage/service/object-store/src/error.rs create mode 100644 src/systems/object-storage/service/object-store/src/lib.rs create mode 100644 src/systems/object-storage/service/object-store/src/main.rs create mode 100644 src/systems/object-storage/service/object-store/src/metadata.rs create mode 100644 src/systems/object-storage/service/object-store/src/router.rs create mode 100644 src/systems/object-storage/service/object-store/src/service.rs create mode 100644 src/systems/object-storage/service/object-store/tests/integration_test.rs create mode 100644 src/systems/object-storage/service/object-store/tests/load_test.rs create mode 100755 src/systems/relay/scripts/prepare-docker-build.sh create mode 100644 src/systems/relay/service/.dockerignore create mode 100644 src/systems/relay/service/.env.example create mode 100644 src/systems/relay/service/.gitignore create mode 100644 src/systems/relay/service/Dockerfile create mode 100644 src/systems/relay/service/control.toml create mode 100644 src/systems/relay/service/dev.Dockerfile create mode 100644 src/systems/relay/service/docker-compose.dev.yml create mode 100755 src/systems/relay/service/init-test-db.sh create mode 100644 src/systems/relay/service/package.json create mode 100644 src/systems/relay/service/prisma.config.ts create mode 100644 src/systems/relay/service/prisma/migrations/20260209135950_init/migration.sql create mode 100644 src/systems/relay/service/prisma/migrations/migration_lock.toml create mode 100644 src/systems/relay/service/prisma/schema.prisma create mode 100644 src/systems/relay/service/src/controllers/_app.ts create mode 100644 src/systems/relay/service/src/controllers/email.ts create mode 100644 src/systems/relay/service/src/controllers/emailIdentity.ts create mode 100644 src/systems/relay/service/src/controllers/index.ts create mode 100644 src/systems/relay/service/src/controllers/sender.ts create mode 100644 src/systems/relay/service/src/controllers/tests/sender.e2e.test.ts create mode 100644 src/systems/relay/service/src/cron/cleanup.ts create mode 100644 src/systems/relay/service/src/db.ts create mode 100644 src/systems/relay/service/src/endpoints.ts create mode 100644 src/systems/relay/service/src/env.ts create mode 100644 src/systems/relay/service/src/id.ts create mode 100644 src/systems/relay/service/src/init.ts create mode 100644 src/systems/relay/service/src/instrument.ts create mode 100644 src/systems/relay/service/src/lib/send.ts create mode 100644 src/systems/relay/service/src/presenters/emailIdentity.ts create mode 100644 src/systems/relay/service/src/presenters/index.ts create mode 100644 src/systems/relay/service/src/presenters/sender.ts create mode 100644 src/systems/relay/service/src/queue/sendEmail.ts create mode 100644 src/systems/relay/service/src/queue/sendEmailSingle.ts create mode 100644 src/systems/relay/service/src/server.ts create mode 100644 src/systems/relay/service/src/services/email.test.ts create mode 100644 src/systems/relay/service/src/services/email.ts create mode 100644 src/systems/relay/service/src/services/index.ts create mode 100644 src/systems/relay/service/src/services/sender.ts create mode 100644 src/systems/relay/service/src/test/client.ts create mode 100644 src/systems/relay/service/src/test/setup.ts create mode 100644 src/systems/relay/service/src/worker.ts create mode 100644 src/systems/relay/service/tsconfig.json create mode 100644 src/systems/relay/service/vitest.config.ts create mode 100644 src/systems/relay/service/vitest.e2e.config.ts create mode 100644 src/systems/relay/service/vitest.unit.config.ts create mode 100644 src/systems/slates/apps/registry/tsconfig.server.json create mode 100755 src/systems/voyager/scripts/prepare-docker-build.sh create mode 100644 src/systems/voyager/service/.dockerignore create mode 100644 src/systems/voyager/service/.env.example create mode 100644 src/systems/voyager/service/.gitignore create mode 100644 src/systems/voyager/service/Dockerfile create mode 100644 src/systems/voyager/service/control.toml create mode 100644 src/systems/voyager/service/dev.Dockerfile create mode 100644 src/systems/voyager/service/docker-compose.dev.yml create mode 100644 src/systems/voyager/service/package.json create mode 100644 src/systems/voyager/service/prisma.config.ts create mode 100644 src/systems/voyager/service/prisma/migrations/20260208195500_init/migration.sql create mode 100644 src/systems/voyager/service/prisma/migrations/migration_lock.toml create mode 100644 src/systems/voyager/service/prisma/schema.prisma create mode 100644 src/systems/voyager/service/src/backend.ts create mode 100644 src/systems/voyager/service/src/backends/_backend.ts create mode 100644 src/systems/voyager/service/src/backends/algolia/index.ts create mode 100644 src/systems/voyager/service/src/backends/index.ts create mode 100644 src/systems/voyager/service/src/backends/pg/index.ts create mode 100644 src/systems/voyager/service/src/backends/pg/schema.ts create mode 100644 src/systems/voyager/service/src/controllers/_app.ts create mode 100644 src/systems/voyager/service/src/controllers/_index.ts create mode 100644 src/systems/voyager/service/src/controllers/index.ts create mode 100644 src/systems/voyager/service/src/controllers/record.ts create mode 100644 src/systems/voyager/service/src/controllers/source.ts create mode 100644 src/systems/voyager/service/src/controllers/tenant.ts create mode 100644 src/systems/voyager/service/src/controllers/tests/tenant.e2e.test.ts create mode 100644 src/systems/voyager/service/src/db.ts create mode 100644 src/systems/voyager/service/src/endpoints.ts create mode 100644 src/systems/voyager/service/src/env.ts create mode 100644 src/systems/voyager/service/src/id.ts create mode 100644 src/systems/voyager/service/src/init.ts create mode 100644 src/systems/voyager/service/src/instrument.ts create mode 100644 src/systems/voyager/service/src/presenters/index.ts create mode 100644 src/systems/voyager/service/src/presenters/index_.ts create mode 100644 src/systems/voyager/service/src/presenters/record.ts create mode 100644 src/systems/voyager/service/src/presenters/source.ts create mode 100644 src/systems/voyager/service/src/presenters/tenant.ts create mode 100644 src/systems/voyager/service/src/queues/cleanup.ts create mode 100644 src/systems/voyager/service/src/queues/record.ts create mode 100644 src/systems/voyager/service/src/server.ts create mode 100644 src/systems/voyager/service/src/services/index.ts create mode 100644 src/systems/voyager/service/src/services/index_.ts create mode 100644 src/systems/voyager/service/src/services/record.ts create mode 100644 src/systems/voyager/service/src/services/source.ts create mode 100644 src/systems/voyager/service/src/services/tenant.ts create mode 100644 src/systems/voyager/service/src/test/client.ts create mode 100644 src/systems/voyager/service/src/test/setup.ts create mode 100644 src/systems/voyager/service/src/utils/searchQuery.test.ts create mode 100644 src/systems/voyager/service/src/utils/searchQuery.ts create mode 100644 src/systems/voyager/service/src/worker.ts create mode 100644 src/systems/voyager/service/tsconfig.json create mode 100644 src/systems/voyager/service/vitest.e2e.config.ts create mode 100644 src/systems/voyager/service/vitest.unit.config.ts diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index 9b9b41e1b..3fe5e2f83 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -42,6 +42,9 @@ jobs: - subspace-public - subspace-worker - synthesis + - voyager + - relay + - object-storage with: command: ci mode: unit @@ -71,6 +74,9 @@ jobs: - subspace-public - subspace-worker - synthesis + - voyager + - relay + - object-storage with: command: ci mode: e2e diff --git a/.gitignore b/.gitignore index 629ff10ac..8e4e3285e 100644 --- a/.gitignore +++ b/.gitignore @@ -178,4 +178,7 @@ venv/ bin .DS_Store +# Rust build output (object-storage) +src/systems/object-storage/service/target/ + env.json diff --git a/bun.lock b/bun.lock index 5e6e608cf..f8961d61a 100644 --- a/bun.lock +++ b/bun.lock @@ -438,7 +438,7 @@ "dependencies": { "@lowerdeck/programmable-promise": "1.0.6", "@lowerdeck/service": "^1.0.7", - "@metorial-services/relay-client": "^1.0.5", + "@metorial-platform-systems/relay-client": "workspace:*", "@metorial/db": "^1.0.0", "@metorial/queue": "^1.0.0", }, @@ -477,6 +477,7 @@ "@lowerdeck/pagination": "^1.0.8", "@lowerdeck/service": "^1.0.7", "@lowerdeck/validation": "^1.0.10", + "@metorial-platform-systems/object-storage-client": "workspace:*", "@metorial/config": "^1.0.0", "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", @@ -484,7 +485,6 @@ "@metorial/id": "^1.0.0", "@metorial/internal-clients": "1.0.0", "@metorial/queue": "^1.0.0", - "object-storage-client": "^0.2.5", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -663,7 +663,7 @@ "dependencies": { "@lowerdeck/env": "^1.0.6", "@lowerdeck/validation": "^1.0.10", - "@metorial-services/voyager-client": "^1.0.1", + "@metorial-platform-systems/voyager-client": "workspace:*", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1592,6 +1592,19 @@ "vitest": "^3.1.2", }, }, + "src/systems/_clients/object-storage": { + "name": "@metorial-platform-systems/object-storage-client", + "version": "1.0.0", + "dependencies": { + "axios": "^1.6.0", + }, + "devDependencies": { + "axios-mock-adapter": "^1.22.0", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, "src/systems/_clients/origin-client": { "name": "@metorial-platform-systems/origin-client", "version": "1.0.0", @@ -1606,6 +1619,21 @@ "vitest": "^3.1.2", }, }, + "src/systems/_clients/relay": { + "name": "@metorial-platform-systems/relay-client", + "version": "1.0.0", + "dependencies": { + "@lowerdeck/rpc-client": "^1.1.4", + "@react-email/components": "^1.0.7", + "react": "^19.2.4", + }, + "devDependencies": { + "@types/react": "^19.0.0", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, "src/systems/_clients/shuttle": { "name": "@metorial-platform-systems/shuttle-client", "version": "1.0.0", @@ -1678,6 +1706,18 @@ "vitest": "^3.1.2", }, }, + "src/systems/_clients/voyager": { + "name": "@metorial-platform-systems/voyager-client", + "version": "1.0.0", + "dependencies": { + "@lowerdeck/rpc-client": "^1.1.4", + }, + "devDependencies": { + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, "src/systems/ares/service": { "name": "@metorial/ares", "dependencies": { @@ -1717,7 +1757,8 @@ "@metorial-io/pages": "^1.0.0", "@metorial-io/ui": "^1.0.0", "@metorial-io/ui-product": "^1.0.0", - "@metorial-services/relay-client": "^1.0.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial-platform-systems/relay-client": "workspace:*", "@prisma/adapter-pg": "^7.4.1", "@prisma/client": "^7.4.1", "@sentry/bun": "^10.38.0", @@ -1728,7 +1769,6 @@ "input-otp": "^1.4.2", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "object-storage-client": "^0.2.5", "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", "react": "^19.0.0", @@ -1938,12 +1978,12 @@ "@metorial-cargo/module-file": "^1.0.0", "@metorial-cargo/module-skill": "^1.0.0", "@metorial-cargo/module-store": "^1.0.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", - "object-storage-client": "^0.2.5", "prisma": "^7.2.0", }, "devDependencies": { @@ -1982,6 +2022,7 @@ "@lowerdeck/slugify": "^1.0.6", "@lowerdeck/snowflake": "^1.0.2", "@lowerdeck/validation": "1.0.10", + "@metorial-platform-systems/object-storage-client": "workspace:*", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", @@ -1991,7 +2032,6 @@ "date-fns": "^4.1.0", "jszip": "^3.10.1", "mongoose": "^9.0.2", - "object-storage-client": "^0.2.5", "prisma": "^7.2.0", "yaml": "^2.8.2", }, @@ -2126,6 +2166,7 @@ "@lowerdeck/snowflake": "^1.0.2", "@lowerdeck/validation": "^1.0.10", "@metorial-platform-systems/forge-client": "workspace:*", + "@metorial-platform-systems/object-storage-client": "workspace:*", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", @@ -2138,7 +2179,6 @@ "jose": "^6.2.2", "jszip": "^3.10.1", "lodash": "4.17.21", - "object-storage-client": "^0.2.5", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "undici": "^8.1.0", @@ -2245,6 +2285,7 @@ "@lowerdeck/snowflake": "^1.0.2", "@lowerdeck/telemetry": "^1.1.1", "@lowerdeck/validation": "^1.0.10", + "@metorial-platform-systems/object-storage-client": "workspace:*", "@octokit/auth-app": "^8.1.2", "@octokit/core": "^7.0.6", "@prisma/adapter-pg": "^7.4.1", @@ -2257,7 +2298,6 @@ "jszip": "^3.10.1", "long": "^5.3.2", "nice-grpc": "^2.1.12", - "object-storage-client": "^0.2.5", "pg": "^8.18.0", "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", @@ -2265,6 +2305,7 @@ "yaml": "^2.8.2", }, "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", @@ -2276,6 +2317,58 @@ "typescript": "^5", }, }, + "src/systems/relay/service": { + "name": "@metorial/relay", + "dependencies": { + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@aws-sdk/client-ses": "^3.985.0", + "@lowerdeck/api-mux": "^1.0.1", + "@lowerdeck/cache": "^1.0.0", + "@lowerdeck/canonicalize": "^1.0.4", + "@lowerdeck/cron": "^1.0.4", + "@lowerdeck/encryption": "^1.0.6", + "@lowerdeck/env": "^1.0.4", + "@lowerdeck/error": "^1.0.8", + "@lowerdeck/hash": "^1.0.4", + "@lowerdeck/id": "^1.0.5", + "@lowerdeck/once": "^1.0.4", + "@lowerdeck/pagination": "^1.0.4", + "@lowerdeck/queue": "^1.0.4", + "@lowerdeck/rpc-client": "^1.0.2", + "@lowerdeck/rpc-server": "^1.0.4", + "@lowerdeck/sentry": "^1.0.2", + "@lowerdeck/service": "^1.0.3", + "@lowerdeck/slugify": "^1.0.4", + "@lowerdeck/snowflake": "^1.0.2", + "@lowerdeck/validation": "^1.0.4", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial-services/forge-client": "^1.0.3", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@sentry/bun": "^10.38.0", + "@types/nodemailer": "^7.0.9", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "ipaddr.js": "^2.3.0", + "jszip": "^3.10.1", + "nodemailer": "^8.0.1", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "yaml": "^2.8.2", + }, + "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", + "@types/bun": "latest", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "vitest": "4.0.17", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, "src/systems/shuttle/sdk": { "name": "@metorial/root", "dependencies": { @@ -2364,6 +2457,7 @@ "@lowerdeck/tokens": "^1.0.5", "@lowerdeck/validation": "^1.0.10", "@metorial-platform-systems/function-bay-client": "workspace:*", + "@metorial-platform-systems/object-storage-client": "workspace:*", "@metorial/mcp-server": "^1.0.0-rc.11", "@modelcontextprotocol/sdk": "^1.25.3", "@prisma/adapter-pg": "^7.2.0", @@ -2379,7 +2473,6 @@ "ipaddr.js": "^2.3.0", "jsonata": "^2.1.0", "jszip": "^3.10.1", - "object-storage-client": "^0.2.5", "p-queue": "^9.1.0", "pg": "^8.16.3", "prisma": "^7.2.0", @@ -2426,6 +2519,7 @@ "@lowerdeck/snowflake": "^1.0.2", "@lowerdeck/telemetry": "^1.1.1", "@lowerdeck/validation": "^1.0.10", + "@metorial-platform-systems/object-storage-client": "workspace:*", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", @@ -2435,7 +2529,6 @@ "date-fns": "^4.1.0", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "object-storage-client": "^0.2.5", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", @@ -2491,6 +2584,7 @@ "@metorial-io/ui-product": "^1.0.0", "@metorial-platform-systems/ares-client": "^1.0.0", "@metorial-platform-systems/function-bay-client": "workspace:*", + "@metorial-platform-systems/object-storage-client": "workspace:*", "@metorial-platform-systems/signal-client": "workspace:*", "@metorial-services/slates-registry-client": "latest", "@metorial-services/slates-registry-internal-client": "^1.0.0", @@ -2507,7 +2601,6 @@ "hono": "^4.11.3", "jszip": "^3.10.1", "lodash": "4.17.21", - "object-storage-client": "^0.2.5", "p-queue": "^9.0.1", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", @@ -2572,6 +2665,7 @@ "@metorial-io/ui": "^1.0.0", "@metorial-io/ui-product": "^1.0.0", "@metorial-platform-systems/ares-client": "^1.0.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", "@metorial/util-endpoint": "^1.0.1", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", @@ -2584,7 +2678,6 @@ "hono": "^4.11.3", "jszip": "^3.10.1", "lodash-es": "^4.17.22", - "object-storage-client": "^0.2.5", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", @@ -2597,6 +2690,7 @@ "yaml": "^2.8.2", }, "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/minimatch": "^6.0.0", "@types/react": "^19.0.0", @@ -2606,6 +2700,7 @@ "@vitejs/plugin-react": "^4.3.0", "autoprefixer": "^10.4.0", "vite": "^5.4.0", + "vitest": "^4.0.17", }, "peerDependencies": { "typescript": "^5", @@ -2786,7 +2881,9 @@ "yup": "^1.7.1", }, "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", + "vitest": "^4.0.17", }, "peerDependencies": { "typescript": "^5", @@ -2814,7 +2911,9 @@ "@vercel/ncc": "^0.38.3", }, "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", + "vitest": "^4.0.17", }, "peerDependencies": { "typescript": "^5", @@ -3517,6 +3616,7 @@ "zod": "^4.4.3", }, "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", @@ -3526,6 +3626,61 @@ "typescript": "^5", }, }, + "src/systems/voyager/service": { + "name": "@metorial/voyager", + "dependencies": { + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@lowerdeck/api-mux": "^1.0.2", + "@lowerdeck/cache": "^1.0.1", + "@lowerdeck/canonicalize": "^1.0.4", + "@lowerdeck/cron": "^1.0.7", + "@lowerdeck/encryption": "^1.0.7", + "@lowerdeck/env": "^1.0.4", + "@lowerdeck/error": "^1.1.0", + "@lowerdeck/hash": "^1.0.4", + "@lowerdeck/id": "^1.0.6", + "@lowerdeck/once": "^1.0.4", + "@lowerdeck/pagination": "^1.0.5", + "@lowerdeck/queue": "^1.0.7", + "@lowerdeck/rpc-client": "^1.1.0", + "@lowerdeck/rpc-server": "^1.0.7", + "@lowerdeck/sentry": "^1.0.2", + "@lowerdeck/service": "^1.0.3", + "@lowerdeck/slugify": "^1.0.5", + "@lowerdeck/validation": "^1.0.4", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial-services/forge-client": "^1.0.3", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", + "@types/pg": "^8.16.0", + "algoliasearch": "^5.48.1", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "drizzle-orm": "^0.45.1", + "ipaddr.js": "^2.3.0", + "jszip": "^3.10.1", + "pg": "^8.16.3", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "snowflake-uuid": "^1.0.0", + "yaml": "^2.8.2", + }, + "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", + "@types/bun": "latest", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "vitest": "4.0.17", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, "src/tooling/control": { "name": "@metorial/control", "version": "0.1.0", @@ -3571,6 +3726,34 @@ "@ai-sdk/xai": ["@ai-sdk/xai@3.0.89", "", { "dependencies": { "@ai-sdk/openai-compatible": "2.0.47", "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ecFE4iQnWePrxPYuSUYCh8lpoKZ52J3jao5whDVC3+Z9Cu/XeyOe2oUGzsYSUPgbJNi/ZmD/KN69bHbUcAHFvw=="], + "@algolia/abtesting": ["@algolia/abtesting@1.18.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-aehCadlWOGvrT91KUIZpC0MbB8KBW9yUuvTJFd2xesR7le/IsT4nJUnjCCZ4ZqZCeTcPHPV5mo//fZ5oxcSVYw=="], + + "@algolia/client-abtesting": ["@algolia/client-abtesting@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-HmXOGBOAOJPounpBzBpuY0zDYeiCpxgHnQmuA7JO6ScukcBdGp3/XM9zJk5pJx/xNGD68mbPGXWpDxGtl6BwDQ=="], + + "@algolia/client-analytics": ["@algolia/client-analytics@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-5oo4+I8iixie9vXhCyNFCzeIr8pqA3FQ//VsLHTDvZAV4ttYOPGvYHGQq5NSalrLx5Jc3dRro/5uDOlnUMcBJg=="], + + "@algolia/client-common": ["@algolia/client-common@5.52.1", "", {}, "sha512-qCDoZfx5MpX7XQzvQ3bC4tSEMkQWQMaF/ABtLuoze03Y/flR563CCSws02qIJ23oX7lxl92LsilZjINVyTdtLw=="], + + "@algolia/client-insights": ["@algolia/client-insights@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-hnGs0/lsFJ2PWDxNBz7pxreXo/Xz7gxYRcfePBUjsH26ad0kU/sgnVZd9LwWBpsQv65z2jlb5dkyaB9WE9M9FQ=="], + + "@algolia/client-personalization": ["@algolia/client-personalization@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-2VxxNc/uBysyKvGeBdSM5n9eIDKH8kWD7wd9/yqbJAiVwU4Yv6tU1LSJusHKrXV/aCu1KW7t9Gug9QyeEmtn/Q=="], + + "@algolia/client-query-suggestions": ["@algolia/client-query-suggestions@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-O6mPtsw3xEfNOe6gWFpYLeAZAIljNa4Hgna3bq15PwyN7nbjTY0wXJFRbzs/0YVf75Br+SbOQUmjKxXYjDiSiQ=="], + + "@algolia/client-search": ["@algolia/client-search@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-gA8oJOV1LnQQkDf91iebNnFInHuW0gRPEgLSOQ7EfipCEjYTHm5swm1DlH9H5RaRw4RrHuzHBegnlzc0MAstcg=="], + + "@algolia/ingestion": ["@algolia/ingestion@1.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-U9zZfc5xIu9wRxZkt+HceJUAD4VKHKbAyLSloJdEyMRmphXeibfrY9cxqIXBcmPeZzGhn3Imb35Dq8l19PkJhw=="], + + "@algolia/monitoring": ["@algolia/monitoring@1.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-a3SGNceHmkQfq77iG8Ka+w1pvwfZa/0lzEIgse30fL0kD+yKnd/dg0dQvSfFPAEt2f21DMcGkDSSeJlO3KdQjQ=="], + + "@algolia/recommend": ["@algolia/recommend@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-z98QEguCFDpxb4S/PyrUK1igqF8tPsdbqOUUO6ON91vJ58w+Gwa6ncrI0oNXSFcrkxA5EqPKPQ2A1PBCn08TYQ=="], + + "@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1" } }, "sha512-CI7+/0I11QeZM59Uc8whd2or0kqzFVjpaPn9Qpwll/krHcBAxk24WkAQ6WX+IwDVMfpont4YGbKwAmCre3vE8Q=="], + + "@algolia/requester-fetch": ["@algolia/requester-fetch@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1" } }, "sha512-S6bDuw9byfOvm3T71cgdoZgrgnZq6hpdMLkx52Louh57nUAmvGQESz2aojOynQHjbTiV55smvAFbgn0qT4tJrg=="], + + "@algolia/requester-node-http": ["@algolia/requester-node-http@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1" } }, "sha512-tqZXM+54rWo4mk5jL5Z/flE11nPmNEdXwFBM5py9DkOmbjeCNemfVd45FyM97XdzfZ0dl9uOJC6PYn1FpkeyQg=="], + "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], @@ -3603,6 +3786,8 @@ "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.1001.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.16", "@aws-sdk/credential-provider-node": "^3.972.15", "@aws-sdk/middleware-bucket-endpoint": "^3.972.6", "@aws-sdk/middleware-expect-continue": "^3.972.6", "@aws-sdk/middleware-flexible-checksums": "^3.973.2", "@aws-sdk/middleware-host-header": "^3.972.6", "@aws-sdk/middleware-location-constraint": "^3.972.6", "@aws-sdk/middleware-logger": "^3.972.6", "@aws-sdk/middleware-recursion-detection": "^3.972.6", "@aws-sdk/middleware-sdk-s3": "^3.972.16", "@aws-sdk/middleware-ssec": "^3.972.6", "@aws-sdk/middleware-user-agent": "^3.972.16", "@aws-sdk/region-config-resolver": "^3.972.6", "@aws-sdk/signature-v4-multi-region": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-endpoints": "^3.996.3", "@aws-sdk/util-user-agent-browser": "^3.972.6", "@aws-sdk/util-user-agent-node": "^3.973.1", "@smithy/config-resolver": "^4.4.9", "@smithy/core": "^3.23.7", "@smithy/eventstream-serde-browser": "^4.2.10", "@smithy/eventstream-serde-config-resolver": "^4.3.10", "@smithy/eventstream-serde-node": "^4.2.10", "@smithy/fetch-http-handler": "^5.3.12", "@smithy/hash-blob-browser": "^4.2.11", "@smithy/hash-node": "^4.2.10", "@smithy/hash-stream-node": "^4.2.10", "@smithy/invalid-dependency": "^4.2.10", "@smithy/md5-js": "^4.2.10", "@smithy/middleware-content-length": "^4.2.10", "@smithy/middleware-endpoint": "^4.4.21", "@smithy/middleware-retry": "^4.4.38", "@smithy/middleware-serde": "^4.2.11", "@smithy/middleware-stack": "^4.2.10", "@smithy/node-config-provider": "^4.3.10", "@smithy/node-http-handler": "^4.4.13", "@smithy/protocol-http": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-body-length-node": "^4.2.2", "@smithy/util-defaults-mode-browser": "^4.3.37", "@smithy/util-defaults-mode-node": "^4.2.40", "@smithy/util-endpoints": "^3.3.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-retry": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "@smithy/util-waiter": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-uKgFjQuBjMcd0iigLQwnqIp9gOy/5TGBxa42rcb6l5byDt1mrwOe6fyWTEUEJaNHG2LKYSPUibteGvM1zfm0Rw=="], + "@aws-sdk/client-ses": ["@aws-sdk/client-ses@3.1052.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.13", "@aws-sdk/credential-provider-node": "^3.972.44", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/fetch-http-handler": "^5.4.3", "@smithy/node-http-handler": "^4.7.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-uYmk/sieuniKhq4Qvc7Lg0b7HX3Td3SeJZsABIy0JX1EH0Y5Zl9RXMRloG2h/IwU9ZS2Gj1a00gBop0s6vP7nw=="], + "@aws-sdk/core": ["@aws-sdk/core@3.974.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws-sdk/xml-builder": "^3.972.24", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/core": "^3.24.2", "@smithy/signature-v4": "^5.4.2", "@smithy/types": "^4.14.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-QpnINq5FZH6EOaDEkmHdT7eUunbvD27pDNQypaWjFyYz7Zl1q3UCMQErBZxpmfGfI7MvI2TlK8KTkgNpv8b1ug=="], "@aws-sdk/crc64-nvme": ["@aws-sdk/crc64-nvme@3.972.3", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UExeK+EFiq5LAcbHm96CQLSia+5pvpUVSAsVApscBzayb7/6dJBJKwV4/onsk4VbWSmqxDMcfuTD+pC4RxgZHg=="], @@ -4333,8 +4518,12 @@ "@metorial-platform-systems/function-bay-client": ["@metorial-platform-systems/function-bay-client@workspace:src/systems/_clients/function-bay"], + "@metorial-platform-systems/object-storage-client": ["@metorial-platform-systems/object-storage-client@workspace:src/systems/_clients/object-storage"], + "@metorial-platform-systems/origin-client": ["@metorial-platform-systems/origin-client@workspace:src/systems/_clients/origin-client"], + "@metorial-platform-systems/relay-client": ["@metorial-platform-systems/relay-client@workspace:src/systems/_clients/relay"], + "@metorial-platform-systems/shuttle-client": ["@metorial-platform-systems/shuttle-client@workspace:src/systems/_clients/shuttle"], "@metorial-platform-systems/signal-client": ["@metorial-platform-systems/signal-client@workspace:src/systems/_clients/signal"], @@ -4345,9 +4534,11 @@ "@metorial-platform-systems/synthesis-client": ["@metorial-platform-systems/synthesis-client@workspace:src/systems/_clients/synthesis"], - "@metorial-services/registry-client": ["@metorial-services/registry-client@1.0.0", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.3", "@lowerdeck/rpc-server": "^1.0.6", "@lowerdeck/validation": "^1.0.4" } }, "sha512-6A3tb7rtxex7GlygF6W832p8zoW5I1tkEzEpGzlhjA7wWIwPKVIlYF2XxKhua3z2+kXRKUW6WKjKwc+P81TIdw=="], + "@metorial-platform-systems/voyager-client": ["@metorial-platform-systems/voyager-client@workspace:src/systems/_clients/voyager"], - "@metorial-services/relay-client": ["@metorial-services/relay-client@1.0.5", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.5", "@react-email/components": "^1.0.7", "react": "^19.2.4" } }, "sha512-2YoVhxORVH+zr4eX8CwTLQpQ5fTLFM9kMLyYZEpdcmp/R7ZPTTQAiKP1EyOI3Kn/OIIv856UAo3UPWhoS79HCQ=="], + "@metorial-services/forge-client": ["@metorial-services/forge-client@1.0.4", "", { "dependencies": { "@lowerdeck/rpc-client": "latest" } }, "sha512-riTCFBoCd72LuBBuXZI7MmXd+C04QdxvsPAAgR46Ps07z7qdAOV3g3ir86XiZme+QVDcCLK3wcO3UH6oxfoTrA=="], + + "@metorial-services/registry-client": ["@metorial-services/registry-client@1.0.0", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.3", "@lowerdeck/rpc-server": "^1.0.6", "@lowerdeck/validation": "^1.0.4" } }, "sha512-6A3tb7rtxex7GlygF6W832p8zoW5I1tkEzEpGzlhjA7wWIwPKVIlYF2XxKhua3z2+kXRKUW6WKjKwc+P81TIdw=="], "@metorial-services/scout-client": ["@metorial-services/scout-client@1.0.0", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.2" } }, "sha512-iZUt3ot1libD7mDh/9K5O/oYmuZGWxaxEIuTypzz0UQY0Ra4BFWwtfB88VwQCew58Fz6S2wf6iDsFLsq+/2s7w=="], @@ -4563,6 +4754,8 @@ "@metorial/redis": ["@metorial/redis@workspace:src/packages/backend/redis"], + "@metorial/relay": ["@metorial/relay@workspace:src/systems/relay/service"], + "@metorial/rest": ["@metorial/rest@workspace:src/packages/server/rest"], "@metorial/root": ["@metorial/root@workspace:src/systems/shuttle/sdk"], @@ -4607,6 +4800,8 @@ "@metorial/util-websocket": ["@metorial/util-websocket@1.0.0", "", { "dependencies": { "mitt": "^3.0.1", "ws": "^8.18.2" } }, "sha512-o0qRqbrjlmpjuKGyND4WDDCKBBRPztV8VkaX1HFSnbbKl/Jftz8CPtKnKmLQ38O4XPWPwl7Y7+9OPW7nqDg7UA=="], + "@metorial/voyager": ["@metorial/voyager@workspace:src/systems/voyager/service"], + "@mixmark-io/domino": ["@mixmark-io/domino@2.2.0", "", {}, "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw=="], "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.27.1", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA=="], @@ -5501,6 +5696,8 @@ "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], + "@types/nodemailer": ["@types/nodemailer@7.0.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g=="], + "@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="], "@types/pg": ["@types/pg@8.20.0", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow=="], @@ -5655,6 +5852,8 @@ "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "algoliasearch": ["algoliasearch@5.52.1", "", { "dependencies": { "@algolia/abtesting": "1.18.1", "@algolia/client-abtesting": "5.52.1", "@algolia/client-analytics": "5.52.1", "@algolia/client-common": "5.52.1", "@algolia/client-insights": "5.52.1", "@algolia/client-personalization": "5.52.1", "@algolia/client-query-suggestions": "5.52.1", "@algolia/client-search": "5.52.1", "@algolia/ingestion": "1.52.1", "@algolia/monitoring": "1.52.1", "@algolia/recommend": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-fHA8+kXTbjagw3jkLiaS7KKrH8qe2DyOsiUhGlN4cdT77PEsfqXZl7ewDk1hsg+pJnPlnE50XtLxjR91iJOpmg=="], + "anser": ["anser@2.3.5", "", {}, "sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ=="], "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], @@ -5713,6 +5912,8 @@ "axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], + "axios-mock-adapter": ["axios-mock-adapter@1.22.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "is-buffer": "^2.0.5" }, "peerDependencies": { "axios": ">= 0.17.0" } }, "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw=="], + "b4a": ["b4a@1.8.0", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg=="], "babel-plugin-macros": ["babel-plugin-macros@3.1.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", "resolve": "^1.19.0" } }, "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg=="], @@ -6103,7 +6304,7 @@ "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], - "dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], @@ -6601,6 +6802,8 @@ "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + "is-buffer": ["is-buffer@2.0.5", "", {}, "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="], + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], @@ -7135,6 +7338,8 @@ "node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="], + "nodemailer": ["nodemailer@8.0.7", "", {}, "sha512-pkjE4mkBzQjdJT4/UmlKl3pX0rC9fZmjh7c6C9o7lv66Ac6w9WCnzPzhbPNxwZAzlF4mdq4CSWB5+FbK6FWCow=="], + "nopt": ["nopt@8.1.0", "", { "dependencies": { "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A=="], "normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], @@ -8523,6 +8728,18 @@ "@aws-sdk/client-s3/@smithy/util-waiter": ["@smithy/util-waiter@4.2.10", "", { "dependencies": { "@smithy/abort-controller": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-4eTWph/Lkg1wZEDAyObwme0kmhEb7J/JjibY2znJdrYRgKbKqB7YoEhhJVJ4R1g/SYih4zuwX7LpJaM8RsnTVg=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.44", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.39", "@aws-sdk/credential-provider-http": "^3.972.41", "@aws-sdk/credential-provider-ini": "^3.972.43", "@aws-sdk/credential-provider-process": "^3.972.39", "@aws-sdk/credential-provider-sso": "^3.972.43", "@aws-sdk/credential-provider-web-identity": "^3.972.43", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-sDaBIT0yrNNIPfvlsiTCmANm07zKju+ipWODjEXgZlsjMeIJR3LVp7RDyAOzUoAsTbDfYKDWp+i5WrFiQP6rmQ=="], + + "@aws-sdk/client-ses/@aws-sdk/types": ["@aws-sdk/types@3.973.9", "", { "dependencies": { "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-kuBfgQVdcz5Bmapc4A13YbpVw/pXkesfhetcFYwbntqas8sF41OHyd4o28+/TG2ZQdHBsv90Lsu5y6oitvYCdg=="], + + "@aws-sdk/client-ses/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + + "@aws-sdk/client-ses/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], + + "@aws-sdk/client-ses/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], + + "@aws-sdk/client-ses/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@aws-sdk/core/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], "@aws-sdk/core/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], @@ -8787,12 +9004,20 @@ "@metorial-platform-systems/function-bay-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/object-storage-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@metorial-platform-systems/object-storage-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/origin-client/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], "@metorial-platform-systems/origin-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@metorial-platform-systems/origin-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/relay-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@metorial-platform-systems/relay-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/shuttle-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@metorial-platform-systems/shuttle-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -8813,14 +9038,16 @@ "@metorial-platform-systems/synthesis-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/voyager-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@metorial-platform-systems/voyager-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-services/registry-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], "@metorial-services/registry-client/@lowerdeck/rpc-server": ["@lowerdeck/rpc-server@1.0.10", "", { "dependencies": { "@lowerdeck/error": "^1.2.2", "@lowerdeck/execution-context": "^1.0.4", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", "@lowerdeck/telemetry": "^1.0.1", "@lowerdeck/validation": "^1.0.8", "cookie": "^1.1.1" } }, "sha512-nitrDjYoYOal/W1djpaQ7EiDsvFokyUGPBXPyHzLqSrKDAqi22Tpb/nPAgGnEokxMbu6Fl9KhLlhIXABkYYvUg=="], "@metorial-services/registry-client/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "@metorial-services/relay-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], - "@metorial-services/scout-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], "@metorial-services/slates-registry-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], @@ -8831,8 +9058,6 @@ "@metorial-services/slates-registry-internal-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial-services/voyager-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], - "@metorial-subspace/app-controller/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], "@metorial-subspace/conduit/vitest": ["vitest@2.1.9", "", { "dependencies": { "@vitest/expect": "2.1.9", "@vitest/mocker": "2.1.9", "@vitest/pretty-format": "^2.1.9", "@vitest/runner": "2.1.9", "@vitest/snapshot": "2.1.9", "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", "vite-node": "2.1.9", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "2.1.9", "@vitest/ui": "2.1.9", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q=="], @@ -9065,6 +9290,8 @@ "@metorial/redis/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/relay/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial/rest/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], "@metorial/rpc/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -9105,10 +9332,14 @@ "@metorial/slates/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "@metorial/slates/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@metorial/slates/sonner": ["sonner@1.7.4", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw=="], "@metorial/slates-registry/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], + "@metorial/slates-registry/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@metorial/state/@metorial/generated": ["@metorial/generated@3.0.0", "", { "dependencies": { "@metorial/util-endpoint": "^3.0.0", "@metorial/util-resource-mapper": "^3.0.0", "jose": "^5.9.6" } }, "sha512-1vJpqLgB8SLw6/Pr+xgnq9mGI4Xpays6JNzJGjB1hK7ZBuTGl5ebgI/Th67TCohdAg347FTv/tj3lK2kPHS3bw=="], "@metorial/state/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -9123,6 +9354,8 @@ "@metorial/unified-id/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/voyager/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@modelcontextprotocol/sdk/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], "@modelcontextprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], @@ -9387,6 +9620,8 @@ "@types/node-fetch/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@types/nodemailer/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@types/pg/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], "@types/pg-pool/@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="], @@ -9497,7 +9732,9 @@ "dir-glob/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], - "dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + "dom-serializer/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + + "domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], "dprint-node/detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], @@ -9557,8 +9794,6 @@ "html-to-text/deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], - "html-to-text/dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], - "htmlparser2/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], "htmlparser2/domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], @@ -10065,6 +10300,20 @@ "@aws-sdk/client-s3/@smithy/util-waiter/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-29wX9zpAvEt1vcj0psha+y6ygBHy2V/S72mp6e7q0KARLWXq+pwE/lR6qGkwknQvruh52lXvlqZIga8Hdxkucw=="], + + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/fetch-http-handler": "^5.4.3", "@smithy/node-http-handler": "^4.7.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-IA3CQTjtJkb6u1H4mE4936c8OPBMa9Jggtwe8U2Mqw/vvb/tZ5Ebd0mcZcX0uKWQhOyYo/+qNIwkV5Xh+FeJJA=="], + + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/credential-provider-env": "^3.972.39", "@aws-sdk/credential-provider-http": "^3.972.41", "@aws-sdk/credential-provider-login": "^3.972.43", "@aws-sdk/credential-provider-process": "^3.972.39", "@aws-sdk/credential-provider-sso": "^3.972.43", "@aws-sdk/credential-provider-web-identity": "^3.972.43", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-4mzII+3mZEVXXE1xzrLQrCJL7/r62A63bA6SVzZoNL5rqCJghpf+xgGltVrIBBs0n+mOZBKrQl2tRREtvZ5l6A=="], + + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-2k/amBifLd75eXNwgvPw/2lKYSQ3NhvHQgkVKVjfUq13/eJ3JRtHmznuFenn74OK3sSfp4SMy1YB2w+UVXoKqA=="], + + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/token-providers": "3.1052.0", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-LPc3+Y4vhH1T4x6CMqwCM6hk5+SRf/Lwmgm8INm95wxTtIRHcMwQUVkDzWu4Iw/RSncxYM2BC01OrYbxOPZvyg=="], + + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-wQtL34lUD/09VXjwAUo2T+I3aEXRDxMB3DKmTJL/Zj0Gi6sLDTrVhae1XVt01yzkquOWajI/sZW72JGDZ1ciTw=="], + + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.3.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w=="], + "@aws-sdk/core/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], "@aws-sdk/core/@smithy/signature-v4/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], @@ -10351,6 +10600,24 @@ "@metorial-platform-systems/function-bay-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-platform-systems/object-storage-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-platform-systems/object-storage-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-platform-systems/object-storage-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-platform-systems/object-storage-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-platform-systems/object-storage-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-platform-systems/object-storage-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-platform-systems/object-storage-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-platform-systems/object-storage-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial-platform-systems/origin-client/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "@metorial-platform-systems/origin-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], @@ -10371,6 +10638,24 @@ "@metorial-platform-systems/origin-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-platform-systems/relay-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-platform-systems/relay-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-platform-systems/relay-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-platform-systems/relay-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-platform-systems/relay-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-platform-systems/relay-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-platform-systems/relay-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-platform-systems/relay-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], "@metorial-platform-systems/shuttle-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], @@ -10461,14 +10746,30 @@ "@metorial-platform-systems/synthesis-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@metorial-platform-systems/voyager-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@metorial-platform-systems/voyager-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@metorial-platform-systems/voyager-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@metorial-platform-systems/voyager-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@metorial-platform-systems/voyager-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@metorial-platform-systems/voyager-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@metorial-platform-systems/voyager-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "@metorial-platform-systems/voyager-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial-services/registry-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], "@metorial-services/registry-client/@lowerdeck/rpc-server/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], "@metorial-services/registry-client/@lowerdeck/rpc-server/@lowerdeck/execution-context": ["@lowerdeck/execution-context@1.1.0", "", { "dependencies": { "@lowerdeck/id": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "@opentelemetry/api": "^1.9.0" } }, "sha512-3aAgx6fiUF7Tduq1WR+GqGXZYaHhoM502/uwqQKtTOXsB6nyOp1NhOLHoU+ZZvZZflQ9ddpMwTCicjvQnmhXeA=="], - "@metorial-services/relay-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], - "@metorial-services/scout-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], "@metorial-services/slates-registry-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], @@ -10507,8 +10808,6 @@ "@metorial-services/slates-registry-internal-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-services/voyager-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], - "@metorial-subspace/conduit/vitest/@vitest/expect": ["@vitest/expect@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw=="], "@metorial-subspace/conduit/vitest/@vitest/mocker": ["@vitest/mocker@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg=="], @@ -11915,6 +12214,8 @@ "@metorial/redis/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/relay/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/rest/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], "@metorial/rest/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], @@ -12097,6 +12398,8 @@ "@metorial/unified-id/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/voyager/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/otlp-transformer/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.1", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-I4PHczeujhQAQv6ZBzqHYEUiggZL4IdSMixtVD3EYqbdrjujE7kRfI5QohjlPoJm8BvenoW5YaTMWRrbpot6tg=="], @@ -12241,6 +12544,8 @@ "@types/node-fetch/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@types/nodemailer/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@types/pg/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "@types/readable-stream/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], @@ -12295,6 +12600,8 @@ "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="], + "domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + "eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "eslint/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -12333,10 +12640,6 @@ "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "html-to-text/dom-serializer/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - - "htmlparser2/domutils/dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], - "jest-worker/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "log-symbols/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -12601,6 +12904,10 @@ "@aws-sdk/client-s3/@smithy/node-http-handler/@smithy/querystring-builder/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini/@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-HG7kQCwXtbv3oBV61Ins0oNX8KKyvrMqqRkb6ZiAfQHbMuHaiNaEb2KnpKLPkNpqImSBK82UkVE/kaY6IfWikA=="], + + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1052.0", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-QqZNB3so7UIDxZtroc85TQaLVxdZRFm0eWM1CSR2N+b06as9TOrilvrlTZuj3guYlxMs6yLOgGxnklJ5qMYtTw=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], @@ -12661,10 +12968,18 @@ "@metorial-platform-systems/function-bay-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/object-storage-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial-platform-systems/origin-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/relay-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial-platform-systems/shuttle-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -12685,7 +13000,9 @@ "@metorial-platform-systems/synthesis-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-services/relay-client/@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@metorial-platform-systems/voyager-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], "@metorial-services/scout-client/@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], @@ -12697,8 +13014,6 @@ "@metorial-services/slates-registry-internal-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-services/voyager-client/@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "@metorial-subspace/conduit/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial-subspace/conduit/vitest/@vitest/spy/tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="], @@ -13431,8 +13746,12 @@ "@metorial-platform-systems/function-bay-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], "@metorial-platform-systems/signal-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], @@ -13443,6 +13762,8 @@ "@metorial-platform-systems/synthesis-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@metorial-services/slates-registry-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], "@metorial-services/slates-registry-internal-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], diff --git a/src/backend/modules/email/package.json b/src/backend/modules/email/package.json index a03bd96de..0b7ce69ec 100644 --- a/src/backend/modules/email/package.json +++ b/src/backend/modules/email/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@lowerdeck/programmable-promise": "1.0.6", - "@metorial-services/relay-client": "^1.0.5", + "@metorial-platform-systems/relay-client": "workspace:*", "@metorial/db": "^1.0.0", "@metorial/queue": "^1.0.0", "@lowerdeck/service": "^1.0.7" diff --git a/src/backend/modules/email/src/relay.ts b/src/backend/modules/email/src/relay.ts index fcabb5333..fb494a8b0 100644 --- a/src/backend/modules/email/src/relay.ts +++ b/src/backend/modules/email/src/relay.ts @@ -4,7 +4,7 @@ import { createRelayClient, type EmailIdentity, type ITemplate -} from '@metorial-services/relay-client'; +} from '@metorial-platform-systems/relay-client'; import { env } from './env'; export let relay: ReturnType = createRelayClient({ diff --git a/src/backend/modules/email/src/templates/index.ts b/src/backend/modules/email/src/templates/index.ts index 937c38a60..4572a79df 100644 --- a/src/backend/modules/email/src/templates/index.ts +++ b/src/backend/modules/email/src/templates/index.ts @@ -9,4 +9,4 @@ export { Wrapper, type IEmail, type ITemplate -} from '@metorial-services/relay-client'; +} from '@metorial-platform-systems/relay-client'; diff --git a/src/backend/modules/file/package.json b/src/backend/modules/file/package.json index 470b68fd3..ce38c3523 100644 --- a/src/backend/modules/file/package.json +++ b/src/backend/modules/file/package.json @@ -22,7 +22,7 @@ "@metorial/queue": "^1.0.0", "@lowerdeck/service": "^1.0.7", "@lowerdeck/validation": "^1.0.10", - "object-storage-client": "^0.2.5" + "@metorial-platform-systems/object-storage-client": "workspace:*" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/file/src/storage.ts b/src/backend/modules/file/src/storage.ts index 7b90b3bec..a1eef19f2 100644 --- a/src/backend/modules/file/src/storage.ts +++ b/src/backend/modules/file/src/storage.ts @@ -1,5 +1,5 @@ import { delay } from '@lowerdeck/delay'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; export let storage = new ObjectStorageClient(env.storage.OBJECT_STORAGE_URL); diff --git a/src/backend/modules/search/package.json b/src/backend/modules/search/package.json index 522280f13..58cbf1d13 100644 --- a/src/backend/modules/search/package.json +++ b/src/backend/modules/search/package.json @@ -9,7 +9,7 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@metorial-services/voyager-client": "^1.0.1", + "@metorial-platform-systems/voyager-client": "workspace:*", "@lowerdeck/env": "^1.0.6", "@lowerdeck/validation": "^1.0.10" }, diff --git a/src/backend/modules/search/src/index.ts b/src/backend/modules/search/src/index.ts index fe65fe9f6..ee5dc2cb0 100644 --- a/src/backend/modules/search/src/index.ts +++ b/src/backend/modules/search/src/index.ts @@ -1,4 +1,4 @@ -import { createVoyagerClient } from '@metorial-services/voyager-client'; +import { createVoyagerClient } from '@metorial-platform-systems/voyager-client'; import { env } from './env'; type VoyagerIndex = diff --git a/src/systems/_clients/forge/dts-bundle-generator.config.json b/src/systems/_clients/forge/dts-bundle-generator.config.json index 0d919054b..36ef42b08 100644 --- a/src/systems/_clients/forge/dts-bundle-generator.config.json +++ b/src/systems/_clients/forge/dts-bundle-generator.config.json @@ -9,7 +9,7 @@ "@lowerdeck/rpc-client", "@lowerdeck/rpc-server", "@lowerdeck/validation", - "object-storage-client" + "@metorial-platform-systems/object-storage-client" ] } } diff --git a/src/systems/_clients/object-storage/Makefile b/src/systems/_clients/object-storage/Makefile new file mode 100644 index 000000000..d8a25f750 --- /dev/null +++ b/src/systems/_clients/object-storage/Makefile @@ -0,0 +1,16 @@ +.PHONY: test build clean install + +test: + npm test + +build: + npm run build + +clean: + npm run clean + rm -rf node_modules + +install: + npm install + +all: install build test diff --git a/src/systems/_clients/object-storage/README.md b/src/systems/_clients/object-storage/README.md new file mode 100644 index 000000000..67ee609ba --- /dev/null +++ b/src/systems/_clients/object-storage/README.md @@ -0,0 +1,132 @@ +# Object Storage Client for TypeScript + +TypeScript/JavaScript client library for interacting with the [Metorial Object Storage Service](https://github.com/metorial/object-storage). + +## Usage + +```typescript +import { ObjectStorageClient } from 'object-storage-client'; + +const client = new ObjectStorageClient('http://localhost:8080'); + +// Create a bucket +const bucket = await client.createBucket('my-bucket'); +console.log(`Created bucket: ${bucket.name}`); + +// Upload an object +const data = Buffer.from('Hello, World!'); +const obj = await client.putObject( + 'my-bucket', + 'hello.txt', + data, + 'text/plain', + { key1: 'value1' } +); +console.log(`Uploaded object: ${obj.key} (ETag: ${obj.etag})`); + +// Download an object +const objData = await client.getObject('my-bucket', 'hello.txt'); +console.log(`Downloaded ${objData.data.length} bytes`); + +// List objects +const objects = await client.listObjects('my-bucket'); +for (const obj of objects) { + console.log(`${obj.key}: ${obj.size} bytes`); +} + +// Delete object +await client.deleteObject('my-bucket', 'hello.txt'); + +// Delete bucket +await client.deleteBucket('my-bucket'); +``` + +## API Reference + +### Client Creation + +```typescript +const client = new ObjectStorageClient('http://localhost:8080'); +``` + +With custom timeout: + +```typescript +const client = new ObjectStorageClient('http://localhost:8080', 60000); +``` + +### Bucket Operations + +**Create Bucket** +```typescript +const bucket = await client.createBucket('bucket-name'); +``` + +**List Buckets** +```typescript +const buckets = await client.listBuckets(); +``` + +**Delete Bucket** +```typescript +await client.deleteBucket('bucket-name'); +``` + +### Object Operations + +**Put Object** +```typescript +const data = Buffer.from('content'); +const obj = await client.putObject( + 'bucket-name', + 'object-key', + data, + 'application/json', + { key: 'value' } +); +``` + +**Get Object** +```typescript +const objData = await client.getObject('bucket-name', 'object-key'); +// objData.data contains the object buffer +// objData.metadata contains metadata +``` + +**Head Object** +```typescript +const metadata = await client.headObject('bucket-name', 'object-key'); +``` + +**Delete Object** +```typescript +await client.deleteObject('bucket-name', 'object-key'); +``` + +**List Objects** +```typescript +// List all objects +const objects = await client.listObjects('bucket-name'); + +// List with prefix +const objects = await client.listObjects('bucket-name', 'prefix/'); + +// List with prefix and max keys +const objects = await client.listObjects('bucket-name', 'prefix/', 100); +``` + +## Error Handling + +The client throws `ObjectStorageError` for API errors: + +```typescript +import { ObjectStorageError } from 'object-storage-client'; + +try { + const obj = await client.getObject('bucket', 'key'); +} catch (error) { + if (error instanceof ObjectStorageError) { + console.log(`Status: ${error.statusCode}, Message: ${error.message}`); + } +} +``` diff --git a/src/systems/_clients/object-storage/package.json b/src/systems/_clients/object-storage/package.json new file mode 100644 index 000000000..0952c4ca8 --- /dev/null +++ b/src/systems/_clients/object-storage/package.json @@ -0,0 +1,41 @@ +{ + "name": "@metorial-platform-systems/object-storage-client", + "version": "1.0.0", + "publishConfig": { + "access": "public" + }, + "files": [ + "src/**", + "dist/**", + "README.md", + "package.json" + ], + "author": "Tobias Herber", + "license": "FSL 1.1", + "type": "module", + "exports": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.js", + "default": "./dist/index.js" + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "test": "vitest run", + "lint": "prettier src/**/*.ts --check", + "build": "tsup", + "prepublish": "bun run build", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "axios": "^1.6.0" + }, + "devDependencies": { + "axios-mock-adapter": "^1.22.0", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/systems/_clients/object-storage/src/index.test.ts b/src/systems/_clients/object-storage/src/index.test.ts new file mode 100644 index 000000000..4f5be4a56 --- /dev/null +++ b/src/systems/_clients/object-storage/src/index.test.ts @@ -0,0 +1,213 @@ +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import MockAdapter from 'axios-mock-adapter'; +import { ObjectStorageClient, ObjectStorageError } from './index'; + +describe('ObjectStorageClient', () => { + let client: ObjectStorageClient; + let mock: MockAdapter; + + beforeEach(() => { + client = new ObjectStorageClient('http://localhost:8080'); + mock = new MockAdapter((client as any).client); + }); + + afterEach(() => { + mock.restore(); + }); + + describe('createBucket', () => { + it('should create a bucket', async () => { + mock.onPost('/buckets').reply(200, { + name: 'test-bucket', + created_at: '2024-01-01T00:00:00Z', + }); + + const bucket = await client.createBucket('test-bucket'); + expect(bucket.name).toBe('test-bucket'); + expect(bucket.created_at).toBe('2024-01-01T00:00:00Z'); + }); + + it('should throw error on conflict', async () => { + mock.onPost('/buckets').reply(409, 'Bucket already exists'); + + await expect(client.createBucket('test-bucket')).rejects.toThrow( + ObjectStorageError + ); + }); + }); + + describe('listBuckets', () => { + it('should list buckets', async () => { + mock.onGet('/buckets').reply(200, { + buckets: [ + { name: 'bucket1', created_at: '2024-01-01T00:00:00Z' }, + { name: 'bucket2', created_at: '2024-01-02T00:00:00Z' }, + ], + }); + + const buckets = await client.listBuckets(); + expect(buckets).toHaveLength(2); + expect(buckets[0].name).toBe('bucket1'); + expect(buckets[1].name).toBe('bucket2'); + }); + }); + + describe('deleteBucket', () => { + it('should delete a bucket', async () => { + mock.onDelete('/buckets/test-bucket').reply(204); + + await expect(client.deleteBucket('test-bucket')).resolves.toBeUndefined(); + }); + + it('should throw error on not found', async () => { + mock.onDelete('/buckets/test-bucket').reply(404, 'Bucket not found'); + + await expect(client.deleteBucket('test-bucket')).rejects.toThrow( + ObjectStorageError + ); + }); + }); + + describe('putObject', () => { + it('should put an object', async () => { + mock.onPut('/buckets/test-bucket/objects/test-key').reply(200, { + key: 'test-key', + size: 13, + content_type: 'text/plain', + etag: 'abc123', + last_modified: '2024-01-01T00:00:00Z', + metadata: { key1: 'value1' }, + }); + + const data = Buffer.from('Hello, World!'); + const obj = await client.putObject( + 'test-bucket', + 'test-key', + data, + 'text/plain', + { key1: 'value1' } + ); + + expect(obj.key).toBe('test-key'); + expect(obj.size).toBe(13); + expect(obj.etag).toBe('abc123'); + }); + }); + + describe('getObject', () => { + it('should get an object', async () => { + const data = Buffer.from('Hello, World!'); + mock.onGet('/buckets/test-bucket/objects/test-key').reply(200, data, { + 'content-type': 'text/plain', + 'content-length': '13', + 'etag': 'abc123', + 'last-modified': '2024-01-01T00:00:00Z', + }); + + const obj = await client.getObject('test-bucket', 'test-key'); + expect(obj.metadata.key).toBe('test-key'); + expect(obj.metadata.size).toBe(13); + expect(obj.metadata.etag).toBe('abc123'); + expect(obj.data).toEqual(data); + }); + + it('should throw error on not found', async () => { + mock.onGet('/buckets/test-bucket/objects/test-key').reply(404, 'Object not found'); + + await expect(client.getObject('test-bucket', 'test-key')).rejects.toThrow( + ObjectStorageError + ); + }); + }); + + describe('headObject', () => { + it('should head an object', async () => { + mock.onHead('/buckets/test-bucket/objects/test-key').reply(200, undefined, { + 'content-type': 'text/plain', + 'content-length': '13', + 'etag': 'abc123', + 'last-modified': '2024-01-01T00:00:00Z', + }); + + const obj = await client.headObject('test-bucket', 'test-key'); + expect(obj.key).toBe('test-key'); + expect(obj.size).toBe(13); + expect(obj.etag).toBe('abc123'); + }); + }); + + describe('deleteObject', () => { + it('should delete an object', async () => { + mock.onDelete('/buckets/test-bucket/objects/test-key').reply(204); + + await expect(client.deleteObject('test-bucket', 'test-key')).resolves.toBeUndefined(); + }); + }); + + describe('listObjects', () => { + it('should list objects', async () => { + mock.onGet('/buckets/test-bucket/objects').reply(200, { + objects: [ + { + key: 'prefix/obj1', + size: 100, + etag: 'etag1', + last_modified: '2024-01-01T00:00:00Z', + metadata: {}, + }, + { + key: 'prefix/obj2', + size: 200, + etag: 'etag2', + last_modified: '2024-01-02T00:00:00Z', + metadata: {}, + }, + ], + }); + + const objects = await client.listObjects('test-bucket', 'prefix/', 10); + expect(objects).toHaveLength(2); + expect(objects[0].key).toBe('prefix/obj1'); + expect(objects[1].key).toBe('prefix/obj2'); + }); + + it('should list objects without params', async () => { + mock.onGet('/buckets/test-bucket/objects').reply(200, { + objects: [], + }); + + const objects = await client.listObjects('test-bucket'); + expect(objects).toHaveLength(0); + }); + }); + + describe('getPublicURL', () => { + it('should get public URL with custom expiration', async () => { + mock.onGet('/buckets/test-bucket/public-url/test-key').reply(200, { + url: 'https://example.com/signed-url?signature=abc123', + expires_in: 7200, + }); + + const response = await client.getPublicURL('test-bucket', 'test-key', 7200); + expect(response.url).toBe('https://example.com/signed-url?signature=abc123'); + expect(response.expires_in).toBe(7200); + }); + + it('should get public URL with default expiration', async () => { + mock.onGet('/buckets/test-bucket/public-url/test-key').reply(200, { + url: 'https://example.com/signed-url?signature=xyz789', + expires_in: 3600, + }); + + const response = await client.getPublicURL('test-bucket', 'test-key'); + expect(response.url).toBe('https://example.com/signed-url?signature=xyz789'); + expect(response.expires_in).toBe(3600); + }); + + it('should handle not found error', async () => { + mock.onGet('/buckets/test-bucket/public-url/test-key').reply(404, 'Object not found'); + + await expect(client.getPublicURL('test-bucket', 'test-key')).rejects.toThrow('Object not found'); + }); + }); +}); diff --git a/src/systems/_clients/object-storage/src/index.ts b/src/systems/_clients/object-storage/src/index.ts new file mode 100644 index 000000000..5ce22d9e1 --- /dev/null +++ b/src/systems/_clients/object-storage/src/index.ts @@ -0,0 +1,300 @@ +import axios, { AxiosError, AxiosInstance } from 'axios'; + +export class ObjectStorageError extends Error { + constructor( + public statusCode: number, + public message: string + ) { + super(`Object storage error (status ${statusCode}): ${message}`); + this.name = 'ObjectStorageError'; + } +} + +export interface Bucket { + id: string; + name: string; + created_at: string; +} + +export interface ObjectMetadata { + key: string; + size: number; + content_type?: string; + etag: string; + last_modified: string; + metadata: Record; +} + +export interface ObjectData { + metadata: ObjectMetadata; + data: Buffer; +} + +interface CreateBucketRequest { + name: string; +} + +interface ListBucketsResponse { + buckets: Bucket[]; +} + +interface ListObjectsResponse { + objects: ObjectMetadata[]; +} + +export enum PublicUrlPurpose { + Retrieve = 'retrieve', + Upload = 'upload', +} + +export interface PublicURLResponse { + url: string; + expires_in: number; +} + +export class ObjectStorageClient { + private client: AxiosInstance; + + constructor(baseURL: string, timeout: number = 30000) { + this.client = axios.create({ + baseURL, + timeout, + }); + } + + private handleError(error: AxiosError): never { + if (error.response) { + const message = typeof error.response.data === 'string' + ? error.response.data + : JSON.stringify(error.response.data); + throw new ObjectStorageError(error.response.status, message); + } + throw error; + } + + async ping(): Promise { + try { + await this.client.get('/ping'); + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async createBucket(name: string): Promise { + try { + const response = await this.client.post('/buckets', { + name, + } as CreateBucketRequest); + return response.data; + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async upsertBucket(name: string): Promise { + try { + const response = await this.client.put('/buckets', { + name, + } as CreateBucketRequest); + return response.data; + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async getBucket(id: string): Promise { + try { + const response = await this.client.get(`/buckets/${id}`); + return response.data; + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async listBuckets(): Promise { + try { + const response = await this.client.get('/buckets'); + return response.data.buckets; + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async deleteBucket(name: string): Promise { + try { + await this.client.delete(`/buckets/${name}`); + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async putObject( + bucket: string, + key: string, + data: Buffer | Uint8Array | Blob | ReadableStream | string, + contentType?: string, + metadata?: Record + ): Promise { + try { + const headers: Record = {}; + + if (contentType) { + headers['content-type'] = contentType; + } + + if (metadata) { + for (const [k, v] of Object.entries(metadata)) { + headers[`x-object-meta-${k}`] = v; + } + } + + const response = await this.client.put( + `/buckets/${bucket}/objects/${key}`, + data, + { headers } + ); + return response.data; + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async getObject(bucket: string, key: string): Promise { + try { + const response = await this.client.get( + `/buckets/${bucket}/objects/${key}`, + { responseType: 'arraybuffer' } + ); + + const size = parseInt(response.headers['content-length'] || '0', 10); + const contentType = response.headers['content-type']; + const etag = response.headers['etag'] || ''; + const lastModified = response.headers['last-modified'] || ''; + + // Extract custom metadata from x-object-meta-* headers + const metadata: Record = {}; + for (const [headerName, headerValue] of Object.entries(response.headers)) { + if (headerName.startsWith('x-object-meta-')) { + const metaKey = headerName.substring('x-object-meta-'.length); + metadata[metaKey] = String(headerValue); + } + } + + return { + metadata: { + key, + size, + content_type: contentType, + etag, + last_modified: lastModified, + metadata, + }, + data: Buffer.from(response.data), + }; + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async headObject(bucket: string, key: string): Promise { + try { + const response = await this.client.head(`/buckets/${bucket}/objects/${key}`); + + const size = parseInt(response.headers['content-length'] || '0', 10); + const contentType = response.headers['content-type']; + const etag = response.headers['etag'] || ''; + const lastModified = response.headers['last-modified'] || ''; + + // Extract custom metadata from x-object-meta-* headers + const metadata: Record = {}; + for (const [headerName, headerValue] of Object.entries(response.headers)) { + if (headerName.startsWith('x-object-meta-')) { + const metaKey = headerName.substring('x-object-meta-'.length); + metadata[metaKey] = String(headerValue); + } + } + + return { + key, + size, + content_type: contentType, + etag, + last_modified: lastModified, + metadata, + }; + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async getObjectInfo(bucket: string, key: string): Promise { + try { + const response = await this.client.get( + `/buckets/${bucket}/object-info/${key}` + ); + return response.data; + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async deleteObject(bucket: string, key: string): Promise { + try { + await this.client.delete(`/buckets/${bucket}/objects/${key}`); + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async listObjects( + bucket: string, + prefix?: string, + maxKeys?: number + ): Promise { + try { + const params: Record = {}; + + if (prefix !== undefined) { + params.prefix = prefix; + } + if (maxKeys !== undefined) { + params.max_keys = maxKeys; + } + + const response = await this.client.get( + `/buckets/${bucket}/objects`, + { params } + ); + return response.data.objects; + } catch (error) { + this.handleError(error as AxiosError); + } + } + + async getPublicURL( + bucket: string, + key: string, + expirationSecs?: number, + purpose?: PublicUrlPurpose + ): Promise { + try { + const params: Record = {}; + + if (expirationSecs !== undefined) { + params.expiration_secs = expirationSecs; + } + + if (purpose !== undefined) { + params.purpose = purpose; + } + + const response = await this.client.get( + `/buckets/${bucket}/public-url/${key}`, + { params } + ); + return response.data; + } catch (error) { + this.handleError(error as AxiosError); + } + } +} diff --git a/src/systems/_clients/object-storage/tsconfig.json b/src/systems/_clients/object-storage/tsconfig.json new file mode 100644 index 000000000..1f147cc4d --- /dev/null +++ b/src/systems/_clients/object-storage/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["ES2020"], + "declaration": true, + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "resolveJsonModule": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "**/*.test.ts"] +} diff --git a/src/systems/_clients/object-storage/tsup.config.ts b/src/systems/_clients/object-storage/tsup.config.ts new file mode 100644 index 000000000..f4e82f33b --- /dev/null +++ b/src/systems/_clients/object-storage/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['cjs', 'esm'], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + outDir: 'dist' +}); diff --git a/src/systems/_clients/origin-client/dts-bundle-generator.config.json b/src/systems/_clients/origin-client/dts-bundle-generator.config.json index 3ef3c06ca..51547a10f 100644 --- a/src/systems/_clients/origin-client/dts-bundle-generator.config.json +++ b/src/systems/_clients/origin-client/dts-bundle-generator.config.json @@ -12,7 +12,7 @@ "@lowerdeck/rpc-client", "@lowerdeck/rpc-server", "@lowerdeck/validation", - "object-storage-client" + "@metorial-platform-systems/object-storage-client" ] } } diff --git a/src/systems/_clients/relay/.gitignore b/src/systems/_clients/relay/.gitignore new file mode 100644 index 000000000..a14702c40 --- /dev/null +++ b/src/systems/_clients/relay/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/src/systems/_clients/relay/README.md b/src/systems/_clients/relay/README.md new file mode 100644 index 000000000..3dc22a157 --- /dev/null +++ b/src/systems/_clients/relay/README.md @@ -0,0 +1,21 @@ +# Metorial Relay Client + +A client library for interacting with the Metorial Relay platform using TypeScript. + +## Usage + +```ts +import { createRelayClient } from '@lowerdeck/forge-client'; + +let forge = createRelayClient({ + endpoint: '...' +}); +``` + +## License + +This project is licensed under the Apache License 2.0. + +
+ Built with ❤️ by Metorial +
diff --git a/src/systems/_clients/relay/package.json b/src/systems/_clients/relay/package.json new file mode 100644 index 000000000..0d0fef01c --- /dev/null +++ b/src/systems/_clients/relay/package.json @@ -0,0 +1,43 @@ +{ + "name": "@metorial-platform-systems/relay-client", + "version": "1.0.0", + "publishConfig": { + "access": "public" + }, + "files": [ + "src/**", + "dist/**", + "README.md", + "package.json" + ], + "author": "Tobias Herber", + "license": "FSL 1.1", + "type": "module", + "exports": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.js", + "default": "./dist/index.js" + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check", + "build": "tsup", + "prepublish": "bun run build", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@lowerdeck/rpc-client": "^1.1.4", + "@react-email/components": "^1.0.7", + "react": "^19.2.4" + }, + "devDependencies": { + "@types/react": "^19.0.0", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/systems/_clients/relay/src/index.ts b/src/systems/_clients/relay/src/index.ts new file mode 100644 index 000000000..29cb04c78 --- /dev/null +++ b/src/systems/_clients/relay/src/index.ts @@ -0,0 +1,14 @@ +import { createClient } from '@lowerdeck/rpc-client'; +import type { RelayClient } from '../../../relay/service/src/controllers'; + +export * from './templates'; + +type ClientOpts = Parameters[0]; + +export type EmailIdentity = Awaited>; + +export let createRelayClient = (o: ClientOpts) => { + let inner = createClient(o); + + return inner; +}; diff --git a/src/systems/_clients/relay/src/templates/components/button.tsx b/src/systems/_clients/relay/src/templates/components/button.tsx new file mode 100644 index 000000000..2ac57bb95 --- /dev/null +++ b/src/systems/_clients/relay/src/templates/components/button.tsx @@ -0,0 +1,28 @@ +import { Button as EmailButton, Section } from '@react-email/components'; +import React from 'react'; + +let buttonContainer = { + padding: '27px 0 27px', + textAlign: 'center' as const +}; + +let button = { + backgroundColor: '#000000', + borderRadius: '7px', + fontWeight: '600', + color: '#fff', + fontSize: '15px', + textDecoration: 'none', + textAlign: 'center' as const, + display: 'block' +}; + +export let Button = ({ href, children }: { href: string; children: React.ReactNode }) => { + return ( +
+ + {children as any} + +
+ ); +}; diff --git a/src/systems/_clients/relay/src/templates/components/code.tsx b/src/systems/_clients/relay/src/templates/components/code.tsx new file mode 100644 index 000000000..ce8cfa7d1 --- /dev/null +++ b/src/systems/_clients/relay/src/templates/components/code.tsx @@ -0,0 +1,30 @@ +import { Section, Text } from '@react-email/components'; + +export let Code = ({ code }: { code: string }) => { + let first3 = code.slice(0, 3); + let last3 = code.slice(3, 6); + + return ( +
+ + {first3} + - + {last3} + +
+ ); +}; diff --git a/src/systems/_clients/relay/src/templates/components/dataList.tsx b/src/systems/_clients/relay/src/templates/components/dataList.tsx new file mode 100644 index 000000000..36d7c58ce --- /dev/null +++ b/src/systems/_clients/relay/src/templates/components/dataList.tsx @@ -0,0 +1,23 @@ +import { Column, Row, Section, Text } from '@react-email/components'; + +let container = { + // background: '#efefef', + // border: '1px solid #ccc' +}; + +export let DataList = ({ items }: { items: { label: string; value: string }[] }) => { + return ( +
+ {items.map(({ label, value }, i) => ( + + + + {label}:{' '} + + {value} + + + ))} +
+ ); +}; diff --git a/src/systems/_clients/relay/src/templates/components/index.tsx b/src/systems/_clients/relay/src/templates/components/index.tsx new file mode 100644 index 000000000..27659c401 --- /dev/null +++ b/src/systems/_clients/relay/src/templates/components/index.tsx @@ -0,0 +1,6 @@ +export * from './button'; +export * from './code'; +export * from './dataList'; +export * from './layout'; +export * from './text'; +export * from './wrapper'; diff --git a/src/systems/_clients/relay/src/templates/components/layout.tsx b/src/systems/_clients/relay/src/templates/components/layout.tsx new file mode 100644 index 000000000..965da7554 --- /dev/null +++ b/src/systems/_clients/relay/src/templates/components/layout.tsx @@ -0,0 +1,45 @@ +import { Text as EmailText } from '@react-email/components'; +import React from 'react'; + +export let Layout = ({ + title, + description, + children, + style +}: { + title: React.ReactNode; + description?: React.ReactNode; + children: React.ReactNode; + style?: React.CSSProperties; +}) => { + return ( + + + {title} + + + {description && ( + + {description} + + )} + + {children} + + ); +}; diff --git a/src/systems/_clients/relay/src/templates/components/text.tsx b/src/systems/_clients/relay/src/templates/components/text.tsx new file mode 100644 index 000000000..773344443 --- /dev/null +++ b/src/systems/_clients/relay/src/templates/components/text.tsx @@ -0,0 +1,22 @@ +import { Text as EmailText } from '@react-email/components'; +import React from 'react'; + +export let Text = ({ + children, + style +}: { + children: React.ReactNode; + style?: React.CSSProperties; +}) => { + return ( + + {children} + + ); +}; diff --git a/src/systems/_clients/relay/src/templates/components/wrapper.tsx b/src/systems/_clients/relay/src/templates/components/wrapper.tsx new file mode 100644 index 000000000..e949ca47d --- /dev/null +++ b/src/systems/_clients/relay/src/templates/components/wrapper.tsx @@ -0,0 +1,86 @@ +import { + Body, + Container, + Head, + Hr, + Html, + Img, + Preview, + Section, + Text +} from '@react-email/components'; +import React from 'react'; + +let main = { + backgroundColor: '#ffffff', + margin: '0 auto', + fontFamily: + "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif" +}; + +let container = { + maxWidth: '600px', + margin: '0 auto' +}; + +let logoContainer = { + marginTop: '25px' +}; + +let footerText = { + fontSize: '12px', + color: '#777' +}; + +let hr = { + margin: '20px 0px', + border: 'none', + borderBottom: '1px solid #ddd', + background: 'none' +}; + +export let Wrapper = ({ + children, + preview +}: { + children?: React.ReactNode; + preview?: string; +}) => { + return ( + + + + {preview && {preview}} + + + +
+ Metorial +
+ + {children} + +
+ +
+ {process.env.METORIAL_SOURCE == 'enterprise' ? ( + + Sent by Metorial 💌. If you have any questions, feel free to contact us. If you + need to reference this message use this ID: EMAIL_ID. + + ) : ( + + Sent by a self hosted instance of Metorial. + Contact the administrator of this instance if you have any questions. + + )} +
+
+ + + ); +}; diff --git a/src/systems/_clients/relay/src/templates/index.ts b/src/systems/_clients/relay/src/templates/index.ts new file mode 100644 index 000000000..dfe132667 --- /dev/null +++ b/src/systems/_clients/relay/src/templates/index.ts @@ -0,0 +1,3 @@ +export * from './components'; +export * from './lib/email'; +export * from './template'; diff --git a/src/systems/_clients/relay/src/templates/lib/email.tsx b/src/systems/_clients/relay/src/templates/lib/email.tsx new file mode 100644 index 000000000..3b32e72fd --- /dev/null +++ b/src/systems/_clients/relay/src/templates/lib/email.tsx @@ -0,0 +1,30 @@ +import { render } from '@react-email/components'; +import React from 'react'; +import { Wrapper } from '../components/wrapper'; + +export interface IEmail { + subject: string; + html: string | Promise; + text: string | Promise; +} + +export let createEmail = ({ + content, + preview, + subject +}: { + content: React.ReactElement; + preview?: string; + subject: string; +}) => { + let inner = {content}; + + let html = render(inner, { plainText: false }); + let text = render(inner, { plainText: true }); + + return { + subject, + html, + text + }; +}; diff --git a/src/systems/_clients/relay/src/templates/template.ts b/src/systems/_clients/relay/src/templates/template.ts new file mode 100644 index 000000000..df114a91f --- /dev/null +++ b/src/systems/_clients/relay/src/templates/template.ts @@ -0,0 +1,7 @@ +import { IEmail } from './lib/email'; + +export interface ITemplate { + render: (data: Data) => IEmail | Promise; +} + +export let createTemplate = (template: ITemplate) => template; diff --git a/src/systems/_clients/relay/tsconfig.json b/src/systems/_clients/relay/tsconfig.json new file mode 100644 index 000000000..5af1e632d --- /dev/null +++ b/src/systems/_clients/relay/tsconfig.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Default", + "include": [ + "src" + ], + "compilerOptions": { + "outDir": "dist", + "composite": false, + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "inlineSources": false, + "isolatedModules": true, + "moduleResolution": "node", + "module": "esnext", + "lib": [ + "ESNext", + "DOM", + "DOM.Iterable" + ], + "target": "ESNext", + "noUnusedLocals": false, + "noUnusedParameters": false, + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true, + "downlevelIteration": true, + "resolveJsonModule": true, + "jsx": "react-jsx" + }, + "exclude": [ + "dist", + "node_modules" + ] +} \ No newline at end of file diff --git a/src/systems/_clients/relay/tsup.config.ts b/src/systems/_clients/relay/tsup.config.ts new file mode 100644 index 000000000..98b8eb00c --- /dev/null +++ b/src/systems/_clients/relay/tsup.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['cjs', 'esm'], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + outDir: 'dist', + esbuildOptions(options) { + options.jsx = 'automatic'; + }, + external: ['react', '@react-email/components'] +}); diff --git a/src/systems/_clients/voyager/.gitignore b/src/systems/_clients/voyager/.gitignore new file mode 100644 index 000000000..a14702c40 --- /dev/null +++ b/src/systems/_clients/voyager/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/src/systems/_clients/voyager/README.md b/src/systems/_clients/voyager/README.md new file mode 100644 index 000000000..b126e40aa --- /dev/null +++ b/src/systems/_clients/voyager/README.md @@ -0,0 +1,21 @@ +# Metorial Voyager Client + +A client library for interacting with the Metorial Voyager platform using TypeScript. + +## Usage + +```ts +import { createVoyagerClient } from '@lowerdeck/voyager-client'; + +let voyager = createVoyagerClient({ + endpoint: '...' +}); +``` + +## License + +This project is licensed under the Apache License 2.0. + +
+ Built with ❤️ by Metorial +
diff --git a/src/systems/_clients/voyager/package.json b/src/systems/_clients/voyager/package.json new file mode 100644 index 000000000..a223c4e91 --- /dev/null +++ b/src/systems/_clients/voyager/package.json @@ -0,0 +1,40 @@ +{ + "name": "@metorial-platform-systems/voyager-client", + "version": "1.0.0", + "publishConfig": { + "access": "public" + }, + "files": [ + "src/**", + "dist/**", + "README.md", + "package.json" + ], + "author": "Tobias Herber", + "license": "FSL 1.1", + "type": "module", + "exports": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.js", + "default": "./dist/index.js" + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check", + "build": "tsup", + "prepublish": "bun run build", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@lowerdeck/rpc-client": "^1.1.4" + }, + "devDependencies": { + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/systems/_clients/voyager/src/index.ts b/src/systems/_clients/voyager/src/index.ts new file mode 100644 index 000000000..9bb677d5d --- /dev/null +++ b/src/systems/_clients/voyager/src/index.ts @@ -0,0 +1,6 @@ +import { createClient } from '@lowerdeck/rpc-client'; +import type { VoyagerClient } from '../../../voyager/service/src/controllers'; + +type ClientOpts = Parameters[0]; + +export let createVoyagerClient = (o: ClientOpts) => createClient(o); diff --git a/src/systems/_clients/voyager/tsconfig.json b/src/systems/_clients/voyager/tsconfig.json new file mode 100644 index 000000000..1835d16d3 --- /dev/null +++ b/src/systems/_clients/voyager/tsconfig.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Default", + "include": [ + "src" + ], + "compilerOptions": { + "outDir": "dist", + "composite": false, + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "inlineSources": false, + "isolatedModules": true, + "moduleResolution": "node", + "module": "esnext", + "lib": [ + "ESNext", + "DOM", + "DOM.Iterable" + ], + "target": "ESNext", + "noUnusedLocals": false, + "noUnusedParameters": false, + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true, + "downlevelIteration": true, + "resolveJsonModule": true, + }, + "exclude": [ + "dist", + "node_modules" + ] +} \ No newline at end of file diff --git a/src/systems/_clients/voyager/tsup.config.ts b/src/systems/_clients/voyager/tsup.config.ts new file mode 100644 index 000000000..f4e82f33b --- /dev/null +++ b/src/systems/_clients/voyager/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['cjs', 'esm'], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + outDir: 'dist' +}); diff --git a/src/systems/ares/service/package.json b/src/systems/ares/service/package.json index 12eddf1f4..10cbc493d 100644 --- a/src/systems/ares/service/package.json +++ b/src/systems/ares/service/package.json @@ -75,7 +75,7 @@ "@metorial-io/pages": "^1.0.0", "@metorial-io/ui": "^1.0.0", "@metorial-io/ui-product": "^1.0.0", - "@metorial-services/relay-client": "^1.0.5", + "@metorial-platform-systems/relay-client": "workspace:*", "@prisma/adapter-pg": "^7.4.1", "@prisma/client": "^7.4.1", "@sentry/bun": "^10.38.0", @@ -86,7 +86,7 @@ "input-otp": "^1.4.2", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", "react": "^19.0.0", diff --git a/src/systems/ares/service/src/email/authCode.tsx b/src/systems/ares/service/src/email/authCode.tsx index 67b5cd151..7eced8153 100644 --- a/src/systems/ares/service/src/email/authCode.tsx +++ b/src/systems/ares/service/src/email/authCode.tsx @@ -4,7 +4,7 @@ import { createTemplate, Layout, Text -} from '@metorial-services/relay-client'; +} from '@metorial-platform-systems/relay-client'; import { createTemplateSender, emailIdentity, sender } from './client'; export let sendAuthCodeEmail = createTemplateSender( diff --git a/src/systems/ares/service/src/email/client.ts b/src/systems/ares/service/src/email/client.ts index fb5256f53..8cdf9fa08 100644 --- a/src/systems/ares/service/src/email/client.ts +++ b/src/systems/ares/service/src/email/client.ts @@ -4,7 +4,7 @@ import { createRelayClient, type EmailIdentity, type ITemplate -} from '@metorial-services/relay-client'; +} from '@metorial-platform-systems/relay-client'; import { env } from '../env'; export let relay: ReturnType = createRelayClient({ diff --git a/src/systems/ares/service/src/email/successfulLogin.tsx b/src/systems/ares/service/src/email/successfulLogin.tsx index 911ca4775..55dec19d7 100644 --- a/src/systems/ares/service/src/email/successfulLogin.tsx +++ b/src/systems/ares/service/src/email/successfulLogin.tsx @@ -5,7 +5,7 @@ import { DataList, Layout, Text -} from '@metorial-services/relay-client'; +} from '@metorial-platform-systems/relay-client'; import type { User } from '@sentry/bun'; import { UAParser } from 'ua-parser-js'; import type { AuthIntent } from '../../prisma/generated/client'; diff --git a/src/systems/cargo/modules/file/package.json b/src/systems/cargo/modules/file/package.json index 9d148e42f..26c7912b2 100644 --- a/src/systems/cargo/modules/file/package.json +++ b/src/systems/cargo/modules/file/package.json @@ -33,7 +33,7 @@ "@lowerdeck/validation": "1.0.10", "@metorial-cargo/db": "^1.0.0", "@metorial-cargo/list-utils": "^1.0.0", - "object-storage-client": "^0.2.5" + "@metorial-platform-systems/object-storage-client": "workspace:*" }, "module": "src/index.ts", "types": "src/index.ts", diff --git a/src/systems/cargo/modules/file/src/storage.ts b/src/systems/cargo/modules/file/src/storage.ts index 95e3e11eb..f89453a18 100644 --- a/src/systems/cargo/modules/file/src/storage.ts +++ b/src/systems/cargo/modules/file/src/storage.ts @@ -1,6 +1,6 @@ import { delay } from '@lowerdeck/delay'; import { env } from '@metorial-cargo/db'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; export let storage = new ObjectStorageClient(env.storage.OBJECT_STORAGE_URL); diff --git a/src/systems/cargo/modules/search/package.json b/src/systems/cargo/modules/search/package.json index f4bea873c..5d627cb5c 100644 --- a/src/systems/cargo/modules/search/package.json +++ b/src/systems/cargo/modules/search/package.json @@ -17,6 +17,6 @@ "@lowerdeck/env": "^1.0.6", "@lowerdeck/programmable-promise": "^1.0.6", "@lowerdeck/validation": "^1.0.10", - "@metorial-services/voyager-client": "^1.0.1" + "@metorial-platform-systems/voyager-client": "workspace:*" } } diff --git a/src/systems/cargo/modules/search/src/index.ts b/src/systems/cargo/modules/search/src/index.ts index 5aa016100..f11ee4f8e 100644 --- a/src/systems/cargo/modules/search/src/index.ts +++ b/src/systems/cargo/modules/search/src/index.ts @@ -1,6 +1,6 @@ import { delay } from '@lowerdeck/delay'; import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; -import { createVoyagerClient } from '@metorial-services/voyager-client'; +import { createVoyagerClient } from '@metorial-platform-systems/voyager-client'; import { env } from './env'; let getIndexName = (suffix?: string) => diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index b36c43bb3..7608de7f6 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -65,7 +65,7 @@ "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "prisma": "^7.2.0", "@metorial-cargo/db": "^1.0.0", "@metorial-cargo/module-file": "^1.0.0", diff --git a/src/systems/forge/service/package.json b/src/systems/forge/service/package.json index eb592b477..91c246859 100644 --- a/src/systems/forge/service/package.json +++ b/src/systems/forge/service/package.json @@ -66,7 +66,7 @@ "date-fns": "^4.1.0", "jszip": "^3.10.1", "mongoose": "^9.0.2", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "prisma": "^7.2.0", "yaml": "^2.8.2" } diff --git a/src/systems/forge/service/src/services/workflowArtifact.ts b/src/systems/forge/service/src/services/workflowArtifact.ts index ece5cb1c7..6bec15fd5 100644 --- a/src/systems/forge/service/src/services/workflowArtifact.ts +++ b/src/systems/forge/service/src/services/workflowArtifact.ts @@ -2,7 +2,7 @@ import { notFoundError, ServiceError } from '@lowerdeck/error'; import { generatePlainId } from '@lowerdeck/id'; import { Paginator } from '@lowerdeck/pagination'; import { Service } from '@lowerdeck/service'; -import { PublicUrlPurpose } from 'object-storage-client'; +import { PublicUrlPurpose } from '@metorial-platform-systems/object-storage-client'; import type { Workflow, WorkflowArtifactType, diff --git a/src/systems/forge/service/src/storage.ts b/src/systems/forge/service/src/storage.ts index 7d597ebc2..61d16ba21 100644 --- a/src/systems/forge/service/src/storage.ts +++ b/src/systems/forge/service/src/storage.ts @@ -1,5 +1,5 @@ import { delay } from '@lowerdeck/delay'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; export let storage = new ObjectStorageClient(env.storage.OBJECT_STORAGE_URL, 1000 * 60 * 10); diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index 3b4d528d9..d639cb8e2 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -72,7 +72,7 @@ "jose": "^6.2.2", "jszip": "^3.10.1", "lodash": "4.17.21", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "undici": "^8.1.0", diff --git a/src/systems/function-bay/service/src/storage.ts b/src/systems/function-bay/service/src/storage.ts index 54401e267..6ba33c455 100644 --- a/src/systems/function-bay/service/src/storage.ts +++ b/src/systems/function-bay/service/src/storage.ts @@ -1,5 +1,5 @@ import { delay } from '@lowerdeck/delay'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; export let storage = new ObjectStorageClient(env.storage.OBJECT_STORAGE_URL, 1000 * 60 * 10); diff --git a/src/systems/object-storage/service/.dockerignore b/src/systems/object-storage/service/.dockerignore new file mode 100644 index 000000000..753b23e7c --- /dev/null +++ b/src/systems/object-storage/service/.dockerignore @@ -0,0 +1,43 @@ +# Rust build artifacts +target/ +**/*.rs.bk +*.pdb + +# IDE files +.idea/ +.vscode/ +*.swp +*.swo +*~ + +# Git +.git/ +.gitignore + +# CI/CD +.github/ + +# Documentation +*.md +docs/ + +# Test files +tests/ + +# Client directories (not needed in the service image) +clients/ + +# OS files +.DS_Store +Thumbs.db + +# Environment files +.env +.env.local + +# Config files (should be provided at runtime) +config.toml +config.*.toml + +# Logs +*.log diff --git a/src/systems/object-storage/service/.github/workflows/legal.yml b/src/systems/object-storage/service/.github/workflows/legal.yml new file mode 100644 index 000000000..b7cc1b68b --- /dev/null +++ b/src/systems/object-storage/service/.github/workflows/legal.yml @@ -0,0 +1,12 @@ +name: Check Legal Boilerplate + +on: + pull_request: + types: [opened, edited, synchronize, reopened] + +jobs: + legal: + permissions: + pull-requests: write + contents: read + uses: metorial/.github/.github/workflows/legal-boilerplate.yml@main diff --git a/src/systems/object-storage/service/.github/workflows/publish.yml b/src/systems/object-storage/service/.github/workflows/publish.yml new file mode 100644 index 000000000..374e77e67 --- /dev/null +++ b/src/systems/object-storage/service/.github/workflows/publish.yml @@ -0,0 +1,72 @@ +name: Build and Publish Docker Image + +on: + push: + branches: [ main ] + tags: + - 'v*' + pull_request: + branches: [ main ] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + name: Build and Push Docker Image + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + # Tag with branch name for branch pushes + type=ref,event=branch + # Tag with tag name for tag pushes + type=ref,event=tag + # Tag with PR number for pull requests + type=ref,event=pr + # Tag as 'latest' for main branch + type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }} + # Semantic versioning tags for version tags + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + # Tag with commit SHA (short form) + type=sha,format=short + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + id: build-push + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + platforms: linux/amd64,linux/arm64 + + - name: Image digest + run: echo "Image pushed with digest ${{ steps.build-push.outputs.digest }}" diff --git a/src/systems/object-storage/service/.github/workflows/test.yml b/src/systems/object-storage/service/.github/workflows/test.yml new file mode 100644 index 000000000..8c8c3115b --- /dev/null +++ b/src/systems/object-storage/service/.github/workflows/test.yml @@ -0,0 +1,103 @@ +name: Test + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +env: + CARGO_TERM_COLOR: always + RUST_BACKTRACE: 1 + +jobs: + test: + name: Test Suite + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, ubuntu-24.04-arm] + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-registry- + + - name: Cache cargo index + uses: actions/cache@v4 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-index- + + - name: Cache cargo build + uses: actions/cache@v4 + with: + path: target + key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-build-target- + + - name: Check formatting + run: cargo fmt --all -- --check + + - name: Run clippy + run: cargo clippy --all-targets --all-features -- -D warnings + + - name: Run tests + run: cargo test --workspace --verbose + + - name: Run doc tests + run: cargo test --doc --workspace --verbose + + build: + name: Build + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, ubuntu-24.04-arm] + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-registry- + + - name: Cache cargo index + uses: actions/cache@v4 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-index- + + - name: Cache cargo build + uses: actions/cache@v4 + with: + path: target + key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-build-target- + + - name: Build + run: cargo build --release --verbose diff --git a/src/systems/object-storage/service/.gitignore b/src/systems/object-storage/service/.gitignore new file mode 100644 index 000000000..ad6795588 --- /dev/null +++ b/src/systems/object-storage/service/.gitignore @@ -0,0 +1,21 @@ +# Generated by Cargo +# will have compiled files and executables +debug +target + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb + +# Generated by cargo mutants +# Contains mutation testing data +**/mutants.out*/ + +# RustRover +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/src/systems/object-storage/service/Cargo.lock b/src/systems/object-storage/service/Cargo.lock new file mode 100644 index 000000000..5363a3257 --- /dev/null +++ b/src/systems/object-storage/service/Cargo.lock @@ -0,0 +1,4410 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "RustyXML" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b5ace29ee3216de37c0546865ad08edef58b0f9e76838ed8959a84a990e58c5" + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener 5.4.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "aws-config" +version = "1.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0149602eeaf915158e14029ba0c78dedb8c08d554b024d54c8f239aab46511d" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.3.0", + "hex", + "http 1.4.0", + "ring", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "aws-credential-types" +version = "1.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b01c9521fa01558f750d183c8c68c81b0155b9d193a4ba7f84c36bd1b6d04a06" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", +] + +[[package]] +name = "aws-lc-rs" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b5ce75405893cd713f9ab8e297d8e438f624dde7d706108285f7e17a25a180f" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "179c3777a8b5e70e90ea426114ffc565b2c1a9f82f6c4a0c5a34aa6ef5e781b6" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "aws-runtime" +version = "1.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce527fb7e53ba9626fc47824f25e256250556c40d8f81d27dd92aa38239d632" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.3.0", + "http 0.2.12", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "tracing", + "uuid", +] + +[[package]] +name = "aws-sdk-s3" +version = "1.115.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdaa0053cbcbc384443dd24569bd5d1664f86427b9dc04677bd0ab853954baec" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-checksums", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "fastrand 2.3.0", + "hex", + "hmac", + "http 0.2.12", + "http 1.4.0", + "http-body 0.4.6", + "lru", + "percent-encoding", + "regex-lite", + "sha2", + "tracing", + "url", +] + +[[package]] +name = "aws-sdk-sso" +version = "1.90.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f18e53542c522459e757f81e274783a78f8c81acdfc8d1522ee8a18b5fb1c66" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.3.0", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-ssooidc" +version = "1.92.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "532f4d866012ffa724a4385c82e8dd0e59f0ca0e600f3f22d4c03b6824b34e4a" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.3.0", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-sts" +version = "1.94.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1be6fbbfa1a57724788853a623378223fe828fc4c09b146c992f0c95b6256174" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-query", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "fastrand 2.3.0", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sigv4" +version = "1.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c35452ec3f001e1f2f6db107b6373f1f48f05ec63ba2c5c9fa91f07dad32af11" +dependencies = [ + "aws-credential-types", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "crypto-bigint 0.5.5", + "form_urlencoded", + "hex", + "hmac", + "http 0.2.12", + "http 1.4.0", + "p256", + "percent-encoding", + "ring", + "sha2", + "subtle", + "time", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-async" +version = "1.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "127fcfad33b7dfc531141fda7e1c402ac65f88aca5511a4d31e2e3d2cd01ce9c" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "aws-smithy-checksums" +version = "0.63.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95bd108f7b3563598e4dc7b62e1388c9982324a2abd622442167012690184591" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "bytes", + "crc-fast", + "hex", + "http 0.2.12", + "http-body 0.4.6", + "md-5", + "pin-project-lite", + "sha1", + "sha2", + "tracing", +] + +[[package]] +name = "aws-smithy-eventstream" +version = "0.60.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e29a304f8319781a39808847efb39561351b1bb76e933da7aa90232673638658" +dependencies = [ + "aws-smithy-types", + "bytes", + "crc32fast", +] + +[[package]] +name = "aws-smithy-http" +version = "0.62.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445d5d720c99eed0b4aa674ed00d835d9b1427dd73e04adaf2f94c6b2d6f9fca" +dependencies = [ + "aws-smithy-eventstream", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "futures-util", + "http 0.2.12", + "http 1.4.0", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", +] + +[[package]] +name = "aws-smithy-http-client" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "623254723e8dfd535f566ee7b2381645f8981da086b5c4aa26c0c41582bb1d2c" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "h2 0.3.27", + "h2 0.4.12", + "http 0.2.12", + "http 1.4.0", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper 1.8.1", + "hyper-rustls 0.24.2", + "hyper-rustls 0.27.7", + "hyper-util", + "pin-project-lite", + "rustls 0.21.12", + "rustls 0.23.35", + "rustls-native-certs 0.8.2", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower", + "tracing", +] + +[[package]] +name = "aws-smithy-json" +version = "0.61.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2db31f727935fc63c6eeae8b37b438847639ec330a9161ece694efba257e0c54" +dependencies = [ + "aws-smithy-types", +] + +[[package]] +name = "aws-smithy-observability" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d1881b1ea6d313f9890710d65c158bdab6fb08c91ea825f74c1c8c357baf4cc" +dependencies = [ + "aws-smithy-runtime-api", +] + +[[package]] +name = "aws-smithy-query" +version = "0.60.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d28a63441360c477465f80c7abac3b9c4d075ca638f982e605b7dc2a2c7156c9" +dependencies = [ + "aws-smithy-types", + "urlencoding", +] + +[[package]] +name = "aws-smithy-runtime" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bbe9d018d646b96c7be063dd07987849862b0e6d07c778aad7d93d1be6c1ef0" +dependencies = [ + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-http-client", + "aws-smithy-observability", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "fastrand 2.3.0", + "http 0.2.12", + "http 1.4.0", + "http-body 0.4.6", + "http-body 1.0.1", + "pin-project-lite", + "pin-utils", + "tokio", + "tracing", +] + +[[package]] +name = "aws-smithy-runtime-api" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7204f9fd94749a7c53b26da1b961b4ac36bf070ef1e0b94bb09f79d4f6c193" +dependencies = [ + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.4.0", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-types" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f535879a207fce0db74b679cfc3e91a3159c8144d717d55f5832aea9eef46e" +dependencies = [ + "base64-simd", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.4.0", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite", + "pin-utils", + "ryu", + "serde", + "time", + "tokio", + "tokio-util", +] + +[[package]] +name = "aws-smithy-xml" +version = "0.60.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab77cdd036b11056d2a30a7af7b775789fb024bf216acc13884c6c97752ae56" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "aws-types" +version = "1.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d79fb68e3d7fe5d4833ea34dc87d2e97d26d3086cb3da660bb6b1f76d98680b6" +dependencies = [ + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "rustc_version", + "tracing", +] + +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.8.1", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "azure_core" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ce3de4b65b1ee2667c81d1fc692949049502a4cf9c38118d811d6d79a7eaef" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bytes", + "dyn-clone", + "futures", + "getrandom 0.2.16", + "hmac", + "http-types", + "once_cell", + "paste", + "pin-project", + "quick-xml", + "rand 0.8.5", + "reqwest 0.12.24", + "rustc_version", + "serde", + "serde_json", + "sha2", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "azure_storage" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9713002fc30956a9f4061cdbc2e912ff739c6160e138ad3b6d992b3bcedccc6d" +dependencies = [ + "RustyXML", + "async-lock", + "async-trait", + "azure_core", + "bytes", + "serde", + "serde_derive", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "azure_storage_blobs" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5b3a31dd8f920739437b827d0c9f9a4011eb3f06f79a121764aa11af6c51ee2" +dependencies = [ + "RustyXML", + "azure_core", + "azure_storage", + "azure_svc_blobstorage", + "bytes", + "futures", + "serde", + "serde_derive", + "serde_json", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "azure_svc_blobstorage" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef37ba6180df451042f1c277d4d0898e2447f0a5d5072e0ff11ee6ea5e7ef38" +dependencies = [ + "azure_core", + "bytes", + "futures", + "log", + "once_cell", + "serde", + "serde_json", + "time", +] + +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytes" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" + +[[package]] +name = "bytes-utils" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +dependencies = [ + "bytes", + "either", +] + +[[package]] +name = "cc" +version = "1.2.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", +] + +[[package]] +name = "cmake" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +dependencies = [ + "cc", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "config" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" +dependencies = [ + "async-trait", + "convert_case", + "json5", + "nom", + "pathdiff", + "ron", + "rust-ini", + "serde", + "serde_json", + "toml", + "yaml-rust2", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.16", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc-fast" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ddc2d09feefeee8bd78101665bd8645637828fa9317f9f292496dbbd8c65ff3" +dependencies = [ + "crc", + "digest", + "rand 0.9.2", + "regex", + "rustversion", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + +[[package]] +name = "downcast" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "ecdsa" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +dependencies = [ + "der 0.6.1", + "elliptic-curve", + "rfc6979", + "signature", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +dependencies = [ + "base16ct", + "crypto-bigint 0.4.9", + "der 0.6.1", + "digest", + "ff", + "generic-array", + "group", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.1", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fragile" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "google-cloud-auth" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf7cb7864f08a92e77c26bb230d021ea57691788fb5dd51793f96965d19e7f9" +dependencies = [ + "async-trait", + "base64 0.21.7", + "google-cloud-metadata", + "google-cloud-token", + "home", + "jsonwebtoken", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror 1.0.69", + "time", + "tokio", + "tracing", + "urlencoding", +] + +[[package]] +name = "google-cloud-metadata" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc279bfb50487d7bcd900e8688406475fc750fe474a835b2ab9ade9eb1fc90e2" +dependencies = [ + "reqwest 0.11.27", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "google-cloud-storage" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11e8a2f70d56feb2dd53d9649df048a833add396c8932c9edbad18c6c7f6a18a" +dependencies = [ + "anyhow", + "async-stream", + "async-trait", + "base64 0.21.7", + "bytes", + "futures-util", + "google-cloud-auth", + "google-cloud-metadata", + "google-cloud-token", + "hex", + "once_cell", + "percent-encoding", + "pkcs8 0.10.2", + "regex", + "reqwest 0.11.27", + "reqwest-middleware", + "ring", + "serde", + "serde_json", + "sha2", + "thiserror 1.0.69", + "time", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "google-cloud-token" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c12ba8b21d128a2ce8585955246977fbce4415f680ebf9199b6f9d6d725f" +dependencies = [ + "async-trait", +] + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.4.0", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.4.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.4.0", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "http-types" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" +dependencies = [ + "anyhow", + "async-channel", + "base64 0.13.1", + "futures-lite", + "infer", + "pin-project-lite", + "rand 0.7.3", + "serde", + "serde_json", + "serde_qs", + "serde_urlencoded", + "url", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2 0.4.12", + "http 1.4.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http 1.4.0", + "hyper 1.8.1", + "hyper-util", + "rustls 0.23.35", + "rustls-native-certs 0.8.2", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.32", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.8.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "hyper 1.8.1", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.1", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +dependencies = [ + "equivalent", + "hashbrown 0.16.1", +] + +[[package]] +name = "infer" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +dependencies = [ + "base64 0.22.1", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.61.2", +] + +[[package]] +name = "mockall" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "lazy_static", + "mockall_derive", + "predicates", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework 2.11.1", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "object-store" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "bytes", + "chrono", + "config", + "futures", + "mime_guess", + "mockall", + "object-store-backends", + "reqwest 0.11.27", + "serde", + "serde_json", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tower", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "object-store-backends" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "aws-config", + "aws-sdk-s3", + "aws-smithy-types", + "azure_core", + "azure_storage", + "azure_storage_blobs", + "bytes", + "chrono", + "futures", + "google-cloud-storage", + "hex", + "http-body-util", + "hyper 1.8.1", + "mockall", + "serde", + "serde_json", + "sha2", + "tempfile", + "thiserror 1.0.69", + "time", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "openssl" +version = "0.10.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "ordered-multimap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" +dependencies = [ + "dlv-list", + "hashbrown 0.14.5", +] + +[[package]] +name = "outref" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" + +[[package]] +name = "p256" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pest" +version = "2.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82" +dependencies = [ + "pest", + "sha2", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.10", + "spki 0.7.3", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "predicates" +version = "3.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +dependencies = [ + "anstyle", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" + +[[package]] +name = "predicates-tree" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +dependencies = [ + "predicates-core", + "termtree", +] + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quote" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.10.0", +] + +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-lite" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da" + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.8.1", + "hyper-tls 0.6.0", + "hyper-util", + "js-sys", + "log", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tokio-native-tls", + "tokio-util", + "tower", + "tower-http 0.6.7", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "reqwest-middleware" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +dependencies = [ + "anyhow", + "async-trait", + "http 0.2.12", + "reqwest 0.11.27", + "serde", + "task-local-extensions", + "thiserror 1.0.69", +] + +[[package]] +name = "rfc6979" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint 0.4.9", + "hmac", + "zeroize", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.7", + "bitflags 2.10.0", + "serde", + "serde_derive", +] + +[[package]] +name = "rust-ini" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags 2.10.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.23.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +dependencies = [ + "aws-lc-rs", + "once_cell", + "rustls-pki-types", + "rustls-webpki 0.103.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework 2.11.1", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework 3.5.1", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pki-types" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct", + "der 0.6.1", + "generic-array", + "pkcs8 0.9.0", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "serde_core", +] + +[[package]] +name = "serde_qs" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" +dependencies = [ + "percent-encoding", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + +[[package]] +name = "simple_asn1" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 2.0.17", + "time", +] + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der 0.6.1", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.10", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "task-local-extensions" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" +dependencies = [ + "pin-utils", +] + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +dependencies = [ + "fastrand 2.3.0", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "termtree" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "js-sys", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.1", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls 0.23.35", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "bitflags 2.10.0", + "bytes", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" +dependencies = [ + "bitflags 2.10.0", + "bytes", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "getrandom 0.3.4", + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + +[[package]] +name = "yaml-rust2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink", +] + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/src/systems/object-storage/service/Cargo.toml b/src/systems/object-storage/service/Cargo.toml new file mode 100644 index 000000000..671c5d8be --- /dev/null +++ b/src/systems/object-storage/service/Cargo.toml @@ -0,0 +1,60 @@ +[workspace] +members = ["object-store", "object-store-backends"] +resolver = "2" + +[workspace.package] +version = "0.1.0" +edition = "2021" +authors = ["Metorial"] +license = "MIT" + +[workspace.dependencies] +# Async runtime +tokio = { version = "1.35", features = ["full"] } +async-trait = "0.1" + +# HTTP framework +axum = "0.7" +tower = "0.5" +tower-http = { version = "0.5", features = ["trace", "cors", "timeout"] } + +# Serialization +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" + +# Error handling +anyhow = "1.0" +thiserror = "1.0" + +# Logging +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } + +# Storage backends +aws-sdk-s3 = "1.14" +aws-config = "1.1" +aws-smithy-types = "1.3" +google-cloud-storage = "0.16" +azure_storage = "0.20" +azure_storage_blobs = "0.20" + +# No longer using SQLX - metadata stored in object storage backend + +# UUID +uuid = { version = "1.6", features = ["v4", "serde"] } + +# Time +chrono = { version = "0.4", features = ["serde"] } + +# Testing +mockall = "0.12" + +# Cryptography for ETag +sha2 = "0.10" +hex = "0.4" + +# Content type detection +mime_guess = "2.0" + +# Compression +flate2 = "1.0" diff --git a/src/systems/object-storage/service/Dockerfile b/src/systems/object-storage/service/Dockerfile new file mode 100644 index 000000000..4a7ae28fb --- /dev/null +++ b/src/systems/object-storage/service/Dockerfile @@ -0,0 +1,61 @@ +# Build stage +FROM rust:1.91-slim AS builder + +RUN apt-get update && apt-get install -y \ + pkg-config \ + libssl-dev \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app/src/systems/object-storage/service + +COPY src/systems/object-storage/service/Cargo.toml src/systems/object-storage/service/Cargo.lock ./ +COPY src/systems/object-storage/service/object-store/Cargo.toml ./object-store/ +COPY src/systems/object-storage/service/object-store-backends/Cargo.toml ./object-store-backends/ + +RUN mkdir -p object-store/src object-store-backends/src && \ + echo "fn main() {}" > object-store/src/main.rs && \ + echo "pub fn dummy() {}" > object-store/src/lib.rs && \ + echo "pub fn dummy() {}" > object-store-backends/src/lib.rs && \ + cargo build --release && \ + rm -rf object-store/src object-store-backends/src + +COPY src/systems/object-storage/service/object-store ./object-store +COPY src/systems/object-storage/service/object-store-backends ./object-store-backends + +RUN rm -rf target/release/object-store-service target/release/deps/object_store_service* target/release/.fingerprint/object-store-* && \ + cargo build --release --bin object-store-service + +FROM builder AS workspace + +WORKDIR /app/src/systems/object-storage/service +CMD ["sleep", "infinity"] + +# Production stage +FROM debian:trixie-slim AS runner + +RUN apt-get update && apt-get install -y \ + ca-certificates \ + libssl3 \ + curl \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd -m -u 1000 appuser + +WORKDIR /app + +COPY --from=builder /app/src/systems/object-storage/service/target/release/object-store-service /app/object-store-service + +RUN mkdir -p /app/data && chown -R appuser:appuser /app + +USER appuser + +EXPOSE 52010 + +ENV RUST_LOG=info +ENV OBJECT_STORE_BACKEND_TYPE=local +ENV OBJECT_STORE_BACKEND_ROOT_PATH=/app/data + +HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52010/health || exit 1 + +CMD ["/app/object-store-service"] diff --git a/src/systems/object-storage/service/LICENSE b/src/systems/object-storage/service/LICENSE new file mode 100644 index 000000000..59a871184 --- /dev/null +++ b/src/systems/object-storage/service/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2025 Metorial, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/src/systems/object-storage/service/README.md b/src/systems/object-storage/service/README.md new file mode 100644 index 000000000..fe4faca01 --- /dev/null +++ b/src/systems/object-storage/service/README.md @@ -0,0 +1,319 @@ +# Object Storage Service + +A lightweight, universal object storage service. It provides a simple HTTP API for managing buckets and objects, with support for multiple storage backends including local filesystem, AWS S3, Google Cloud Storage, and Azure Blob Storage. + +## Features + +- RESTful HTTP API for object storage operations +- Multi-backend support (local, S3, GCS, Azure) +- Support for metadata directly in the storage backend +- ETag generation for cache validation + +## Installation + +### Using Docker + +The Docker image does not include configuration. You must provide it externally using either a config file or environment variables. + +**Option 1: Using a configuration file (recommended)** + +Copy `config.example.toml` to `config.toml` and modify it for your needs, then mount it into the container: + +```bash +docker pull ghcr.io/metorial/object-storage:latest + +# Create your config.toml first (see Configuration section below) +docker run -p 8080:8080 \ + -e CONFIG_PATH=/app/config/config.toml \ + -v $(pwd)/config.toml:/app/config/config.toml:ro \ + -v object-store-data:/app/data \ + ghcr.io/metorial/object-storage:latest +``` + +**Option 2: Using environment variables** + +Configure entirely through environment variables without a config file: + +```bash +docker run -p 8080:8080 \ + -e OBJECT_STORE__SERVER__HOST=0.0.0.0 \ + -e OBJECT_STORE__SERVER__PORT=8080 \ + -e OBJECT_STORE__BACKEND__TYPE=local \ + -e OBJECT_STORE__BACKEND__ROOT_PATH=/app/data \ + -e OBJECT_STORE__BACKEND__PHYSICAL_BUCKET=object-store-data \ + -v object-store-data:/app/data \ + ghcr.io/metorial/object-storage:latest +``` + +**Using Docker Compose** + +```yaml +services: + object-storage: + image: ghcr.io/metorial/object-storage:latest + ports: + - "8080:8080" + volumes: + - ./config.toml:/app/config/config.toml:ro + - object-store-data:/app/data + environment: + - CONFIG_PATH=/app/config/config.toml + - RUST_LOG=info + +volumes: + object-store-data: +``` + +### Building from Source + +```bash +cargo build --release +./target/release/object-store-service +``` + +## Configuration + +The service requires configuration to be provided externally. You can use either a TOML file or environment variables. + +### Configuration File + +Create a `config.toml` file and set the `CONFIG_PATH` environment variable: + +```bash +export CONFIG_PATH=/path/to/config.toml +./object-store-service +``` + +**Example config.toml for local development:** + +```toml +[server] +host = "127.0.0.1" +port = 8080 + +[backend] +type = "local" +root_path = "./data" +physical_bucket = "object-store-data" +``` + +**Example config.toml for Docker:** + +```toml +[server] +host = "0.0.0.0" # Accept connections from any interface +port = 8080 + +[backend] +type = "local" +root_path = "/app/data" # Use container paths +physical_bucket = "object-store-data" +``` + +### Environment Variables + +All config options can be set via environment variables with the `OBJECT_STORE__` prefix. Nested keys use double underscores: + +```bash +export OBJECT_STORE__SERVER__HOST=0.0.0.0 +export OBJECT_STORE__SERVER__PORT=8080 +export OBJECT_STORE__BACKEND__TYPE=local +export OBJECT_STORE__BACKEND__ROOT_PATH=/app/data +export OBJECT_STORE__BACKEND__PHYSICAL_BUCKET=object-store-data +``` + +Environment variables override config file values, allowing you to use a base config file and override specific settings. + +### Backend Configuration + +**Local filesystem:** +```toml +[backend] +type = "local" +root_path = "./data" +physical_bucket = "object-store-data" +``` + +**S3:** +```toml +[backend] +type = "s3" +region = "us-east-1" +physical_bucket = "my-bucket" +endpoint = "http://localhost:9000" # Optional, for MinIO +``` + +**Google Cloud Storage:** +```toml +[backend] +type = "gcs" +physical_bucket = "my-gcs-bucket" +``` + +**Azure Blob Storage:** +```toml +[backend] +type = "azure" +account = "myaccount" +access_key = "myaccesskey" +physical_bucket = "mycontainer" +``` + +## API Reference + +### Health Check + +``` +GET /health +``` + +Returns service health status. + +### Buckets + +**Create a bucket:** +``` +POST /buckets +Content-Type: application/json + +{ + "name": "my-bucket" +} +``` + +**List buckets:** +``` +GET /buckets +``` + +**Delete a bucket:** +``` +DELETE /buckets/{bucket} +``` + +### Objects + +**Upload an object:** +``` +PUT /buckets/{bucket}/objects/{key} +Content-Type: application/octet-stream +x-object-meta-author: john +x-object-meta-version: 1.0 + +[binary data] +``` + +Custom metadata headers must be prefixed with `x-object-meta-`. + +**Download an object:** +``` +GET /buckets/{bucket}/objects/{key} +``` + +**Get object metadata:** +``` +HEAD /buckets/{bucket}/objects/{key} +``` + +**Delete an object:** +``` +DELETE /buckets/{bucket}/objects/{key} +``` + +**List objects in a bucket:** +``` +GET /buckets/{bucket}/objects?prefix=folder/&max_keys=100 +``` + +Query parameters: +- `prefix` (optional): Filter objects by prefix +- `max_keys` (optional): Limit number of results + +### Response Format + +All JSON responses follow this structure: + +**Success (Bucket):** +```json +{ + "name": "my-bucket", + "created_at": "2024-01-15T10:30:00Z" +} +``` + +**Success (Object Metadata):** +```json +{ + "key": "path/to/file.txt", + "size": 1024, + "content_type": "text/plain", + "etag": "abc123...", + "last_modified": "2024-01-15T10:30:00Z", + "metadata": { + "author": "john", + "version": "1.0" + } +} +``` + +**Error:** +```json +{ + "error": "Bucket not found: my-bucket" +} +``` + +## Architecture + +The service is organized into three main components: + +- **object-store**: HTTP API layer and service logic +- **object-store-backends**: Storage backend implementations +- **clients**: Client libraries for different languages + +## Client Libraries + +Client libraries are available for multiple languages: + +### Go + +```bash +go get github.com/metorial/object-storage/clients/go +``` + +```go +import objectstorage "github.com/metorial/object-storage/clients/go" + +client := objectstorage.NewClient("http://localhost:8080") +bucket, err := client.CreateBucket("my-bucket") +``` + +See [clients/go/README.md](clients/go/README.md) for full documentation. + +### TypeScript/JavaScript + +```bash +npm install @metorial/object-storage-client +``` + +```typescript +import { ObjectStorageClient } from '@metorial/object-storage-client'; + +const client = new ObjectStorageClient('http://localhost:8080'); +const bucket = await client.createBucket('my-bucket'); +``` + +See [clients/typescript/README.md](clients/typescript/README.md) for full documentation. + +### Rust + +```toml +[dependencies] +object-storage-client = "0.1" +``` + +See [clients/rust/README.md](clients/rust/README.md) for full documentation. + +## License + +Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) file for details. diff --git a/src/systems/object-storage/service/clients/.gitignore b/src/systems/object-storage/service/clients/.gitignore new file mode 100644 index 000000000..6137ad05f --- /dev/null +++ b/src/systems/object-storage/service/clients/.gitignore @@ -0,0 +1,43 @@ +# Rust +rust/target/ +rust/Cargo.lock +rust/**/*.rs.bk + +# Go +go/go.sum + +# Python +python/venv/ +python/.venv/ +python/__pycache__/ +python/**/__pycache__/ +python/*.pyc +python/**/*.pyc +python/*.pyo +python/**/*.pyo +python/*.egg-info/ +python/dist/ +python/build/ +python/.pytest_cache/ +python/.coverage +python/htmlcov/ +python/*.egg + +# TypeScript/JavaScript +typescript/node_modules/ +typescript/dist/ +typescript/coverage/ +typescript/.nyc_output/ +typescript/*.log +typescript/.DS_Store + +# IDEs +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db diff --git a/src/systems/object-storage/service/clients/go/Makefile b/src/systems/object-storage/service/clients/go/Makefile new file mode 100644 index 000000000..dc57d6da6 --- /dev/null +++ b/src/systems/object-storage/service/clients/go/Makefile @@ -0,0 +1,18 @@ +.PHONY: test build fmt vet clean + +test: + go test -v -race -cover ./... + +build: + go build -v ./... + +fmt: + go fmt ./... + +vet: + go vet ./... + +clean: + go clean + +all: fmt vet test build diff --git a/src/systems/object-storage/service/clients/go/README.md b/src/systems/object-storage/service/clients/go/README.md new file mode 100644 index 000000000..d596bd7e7 --- /dev/null +++ b/src/systems/object-storage/service/clients/go/README.md @@ -0,0 +1,157 @@ +# Object Storage Client for Go + +Go client library for interacting with the [Metorial Object Storage Service](https://github.com/metorial/object-storage). + +## Installation + +```bash +go get github.com/metorial/object-storage/clients/go +``` + +## Usage + +```go +package main + +import ( + "fmt" + "log" + + objectstorage "github.com/metorial/object-storage/clients/go" +) + +func main() { + client := objectstorage.NewClient("http://localhost:8080") + + // Create a bucket + bucket, err := client.CreateBucket("my-bucket") + if err != nil { + log.Fatal(err) + } + fmt.Printf("Created bucket: %s\n", bucket.Name) + + // Upload an object + data := []byte("Hello, World!") + contentType := "text/plain" + metadata := map[string]string{"key1": "value1"} + + obj, err := client.PutObject("my-bucket", "hello.txt", data, &contentType, metadata) + if err != nil { + log.Fatal(err) + } + fmt.Printf("Uploaded object: %s (ETag: %s)\n", obj.Key, obj.ETag) + + // Download an object + objData, err := client.GetObject("my-bucket", "hello.txt") + if err != nil { + log.Fatal(err) + } + fmt.Printf("Downloaded %d bytes\n", len(objData.Data)) + + // List objects + objects, err := client.ListObjects("my-bucket", nil, nil) + if err != nil { + log.Fatal(err) + } + for _, obj := range objects { + fmt.Printf("%s: %d bytes\n", obj.Key, obj.Size) + } + + // Delete object + if err := client.DeleteObject("my-bucket", "hello.txt"); err != nil { + log.Fatal(err) + } + + // Delete bucket + if err := client.DeleteBucket("my-bucket"); err != nil { + log.Fatal(err) + } +} +``` + +## API Reference + +### Client Creation + +```go +client := objectstorage.NewClient("http://localhost:8080") +``` + +For custom HTTP client configuration: + +```go +httpClient := &http.Client{Timeout: 60 * time.Second} +client := objectstorage.NewClientWithHTTP("http://localhost:8080", httpClient) +``` + +### Bucket Operations + +**Create Bucket** +```go +bucket, err := client.CreateBucket("bucket-name") +``` + +**List Buckets** +```go +buckets, err := client.ListBuckets() +``` + +**Delete Bucket** +```go +err := client.DeleteBucket("bucket-name") +``` + +### Object Operations + +**Put Object** +```go +data := []byte("content") +contentType := "application/json" +metadata := map[string]string{"key": "value"} + +obj, err := client.PutObject("bucket-name", "object-key", data, &contentType, metadata) +``` + +**Get Object** +```go +objData, err := client.GetObject("bucket-name", "object-key") +// objData.Data contains the object bytes +// objData.Metadata contains metadata +``` + +**Head Object** +```go +metadata, err := client.HeadObject("bucket-name", "object-key") +``` + +**Delete Object** +```go +err := client.DeleteObject("bucket-name", "object-key") +``` + +**List Objects** +```go +// List all objects +objects, err := client.ListObjects("bucket-name", nil, nil) + +// List with prefix +prefix := "prefix/" +objects, err := client.ListObjects("bucket-name", &prefix, nil) + +// List with prefix and max keys +maxKeys := 100 +objects, err := client.ListObjects("bucket-name", &prefix, &maxKeys) +``` + +## Error Handling + +The client returns typed errors: + +```go +obj, err := client.GetObject("bucket", "key") +if err != nil { + if objErr, ok := err.(*objectstorage.Error); ok { + fmt.Printf("Status: %d, Message: %s\n", objErr.StatusCode, objErr.Message) + } +} +``` diff --git a/src/systems/object-storage/service/clients/go/client.go b/src/systems/object-storage/service/clients/go/client.go new file mode 100644 index 000000000..19de5bf4f --- /dev/null +++ b/src/systems/object-storage/service/clients/go/client.go @@ -0,0 +1,539 @@ +package objectstorage + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "time" +) + +type Client struct { + baseURL string + httpClient *http.Client +} + +type Bucket struct { + ID string `json:"id"` + Name string `json:"name"` + CreatedAt string `json:"created_at"` +} + +type ObjectMetadata struct { + Key string `json:"key"` + Size uint64 `json:"size"` + ContentType *string `json:"content_type,omitempty"` + ETag string `json:"etag"` + LastModified string `json:"last_modified"` + Metadata map[string]string `json:"metadata"` +} + +type ObjectData struct { + Metadata ObjectMetadata + Data []byte +} + +type createBucketRequest struct { + Name string `json:"name"` +} + +type listBucketsResponse struct { + Buckets []Bucket `json:"buckets"` +} + +type listObjectsResponse struct { + Objects []ObjectMetadata `json:"objects"` +} + +type PublicUrlPurpose string + +const ( + PublicUrlPurposeRetrieve PublicUrlPurpose = "retrieve" + PublicUrlPurposeUpload PublicUrlPurpose = "upload" +) + +type PublicURLResponse struct { + URL string `json:"url"` + ExpiresIn uint64 `json:"expires_in"` +} + +type Error struct { + StatusCode int + Message string +} + +func (e *Error) Error() string { + return fmt.Sprintf("object storage error (status %d): %s", e.StatusCode, e.Message) +} + +func NewClient(baseURL string) *Client { + return &Client{ + baseURL: baseURL, + httpClient: &http.Client{ + Timeout: 30 * time.Second, + }, + } +} + +func NewClientWithHTTP(baseURL string, httpClient *http.Client) *Client { + return &Client{ + baseURL: baseURL, + httpClient: httpClient, + } +} + +func (c *Client) Ping() error { + req, err := http.NewRequest("GET", c.baseURL+"/ping", nil) + if err != nil { + return err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + return nil +} + +func (c *Client) CreateBucket(name string) (*Bucket, error) { + reqBody := createBucketRequest{Name: name} + body, err := json.Marshal(reqBody) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", c.baseURL+"/buckets", bytes.NewReader(body)) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", "application/json") + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + var bucket Bucket + if err := json.NewDecoder(resp.Body).Decode(&bucket); err != nil { + return nil, err + } + + return &bucket, nil +} + +func (c *Client) UpsertBucket(name string) (*Bucket, error) { + reqBody := createBucketRequest{Name: name} + body, err := json.Marshal(reqBody) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", c.baseURL+"/buckets", bytes.NewReader(body)) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", "application/json") + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + var bucket Bucket + if err := json.NewDecoder(resp.Body).Decode(&bucket); err != nil { + return nil, err + } + + return &bucket, nil +} + +func (c *Client) GetBucket(id string) (*Bucket, error) { + req, err := http.NewRequest("GET", c.baseURL+"/buckets/"+id, nil) + if err != nil { + return nil, err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + var bucket Bucket + if err := json.NewDecoder(resp.Body).Decode(&bucket); err != nil { + return nil, err + } + + return &bucket, nil +} + +func (c *Client) ListBuckets() ([]Bucket, error) { + req, err := http.NewRequest("GET", c.baseURL+"/buckets", nil) + if err != nil { + return nil, err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + var result listBucketsResponse + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { + return nil, err + } + + return result.Buckets, nil +} + +func (c *Client) DeleteBucket(name string) error { + req, err := http.NewRequest("DELETE", c.baseURL+"/buckets/"+name, nil) + if err != nil { + return err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusNoContent { + bodyBytes, _ := io.ReadAll(resp.Body) + return &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + return nil +} + +func (c *Client) PutObject(bucket, key string, data []byte, contentType *string, metadata map[string]string) (*ObjectMetadata, error) { + urlPath := fmt.Sprintf("%s/buckets/%s/objects/%s", c.baseURL, bucket, key) + req, err := http.NewRequest("PUT", urlPath, bytes.NewReader(data)) + if err != nil { + return nil, err + } + + if contentType != nil { + req.Header.Set("Content-Type", *contentType) + } + + for k, v := range metadata { + req.Header.Set("x-object-meta-"+k, v) + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + var objMetadata ObjectMetadata + if err := json.NewDecoder(resp.Body).Decode(&objMetadata); err != nil { + return nil, err + } + + return &objMetadata, nil +} + +func (c *Client) GetObject(bucket, key string) (*ObjectData, error) { + urlPath := fmt.Sprintf("%s/buckets/%s/objects/%s", c.baseURL, bucket, key) + req, err := http.NewRequest("GET", urlPath, nil) + if err != nil { + return nil, err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + data, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + size, _ := strconv.ParseUint(resp.Header.Get("Content-Length"), 10, 64) + contentType := resp.Header.Get("Content-Type") + var ct *string + if contentType != "" { + ct = &contentType + } + + // Extract custom metadata from x-object-meta-* headers + metadata := make(map[string]string) + for headerName, headerValues := range resp.Header { + if len(headerValues) > 0 { + const prefix = "X-Object-Meta-" + if len(headerName) > len(prefix) && headerName[:len(prefix)] == prefix { + metaKey := headerName[len(prefix):] + metadata[metaKey] = headerValues[0] + } + } + } + + return &ObjectData{ + Metadata: ObjectMetadata{ + Key: key, + Size: size, + ContentType: ct, + ETag: resp.Header.Get("ETag"), + LastModified: resp.Header.Get("Last-Modified"), + Metadata: metadata, + }, + Data: data, + }, nil +} + +func (c *Client) HeadObject(bucket, key string) (*ObjectMetadata, error) { + urlPath := fmt.Sprintf("%s/buckets/%s/objects/%s", c.baseURL, bucket, key) + req, err := http.NewRequest("HEAD", urlPath, nil) + if err != nil { + return nil, err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: "Object not found", + } + } + + size, _ := strconv.ParseUint(resp.Header.Get("Content-Length"), 10, 64) + contentType := resp.Header.Get("Content-Type") + var ct *string + if contentType != "" { + ct = &contentType + } + + // Extract custom metadata from x-object-meta-* headers + metadata := make(map[string]string) + for headerName, headerValues := range resp.Header { + if len(headerValues) > 0 { + const prefix = "X-Object-Meta-" + if len(headerName) > len(prefix) && headerName[:len(prefix)] == prefix { + metaKey := headerName[len(prefix):] + metadata[metaKey] = headerValues[0] + } + } + } + + return &ObjectMetadata{ + Key: key, + Size: size, + ContentType: ct, + ETag: resp.Header.Get("ETag"), + LastModified: resp.Header.Get("Last-Modified"), + Metadata: metadata, + }, nil +} + +func (c *Client) GetObjectInfo(bucket, key string) (*ObjectMetadata, error) { + urlPath := fmt.Sprintf("%s/buckets/%s/object-info/%s", c.baseURL, bucket, key) + req, err := http.NewRequest("GET", urlPath, nil) + if err != nil { + return nil, err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + var objMetadata ObjectMetadata + if err := json.NewDecoder(resp.Body).Decode(&objMetadata); err != nil { + return nil, err + } + + return &objMetadata, nil +} + +func (c *Client) DeleteObject(bucket, key string) error { + urlPath := fmt.Sprintf("%s/buckets/%s/objects/%s", c.baseURL, bucket, key) + req, err := http.NewRequest("DELETE", urlPath, nil) + if err != nil { + return err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusNoContent { + bodyBytes, _ := io.ReadAll(resp.Body) + return &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + return nil +} + +func (c *Client) ListObjects(bucket string, prefix *string, maxKeys *int) ([]ObjectMetadata, error) { + urlPath := fmt.Sprintf("%s/buckets/%s/objects", c.baseURL, bucket) + + params := url.Values{} + if prefix != nil { + params.Add("prefix", *prefix) + } + if maxKeys != nil { + params.Add("max_keys", strconv.Itoa(*maxKeys)) + } + + if len(params) > 0 { + urlPath += "?" + params.Encode() + } + + req, err := http.NewRequest("GET", urlPath, nil) + if err != nil { + return nil, err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + var result listObjectsResponse + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { + return nil, err + } + + return result.Objects, nil +} + +func (c *Client) GetPublicURL(bucket, key string, expirationSecs *uint64, purpose *PublicUrlPurpose) (*PublicURLResponse, error) { + urlPath := fmt.Sprintf("%s/buckets/%s/public-url/%s", c.baseURL, bucket, key) + + params := url.Values{} + if expirationSecs != nil { + params.Add("expiration_secs", strconv.FormatUint(*expirationSecs, 10)) + } + if purpose != nil { + params.Add("purpose", string(*purpose)) + } + + if len(params) > 0 { + urlPath += "?" + params.Encode() + } + + req, err := http.NewRequest("GET", urlPath, nil) + if err != nil { + return nil, err + } + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + return nil, &Error{ + StatusCode: resp.StatusCode, + Message: string(bodyBytes), + } + } + + var result PublicURLResponse + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { + return nil, err + } + + return &result, nil +} diff --git a/src/systems/object-storage/service/clients/go/client_test.go b/src/systems/object-storage/service/clients/go/client_test.go new file mode 100644 index 000000000..02d5d9ee8 --- /dev/null +++ b/src/systems/object-storage/service/clients/go/client_test.go @@ -0,0 +1,312 @@ +package objectstorage + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestNewClient(t *testing.T) { + client := NewClient("http://localhost:8080") + assert.NotNil(t, client) + assert.Equal(t, "http://localhost:8080", client.baseURL) +} + +func TestCreateBucket(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + assert.Equal(t, "/buckets", r.URL.Path) + assert.Equal(t, "application/json", r.Header.Get("Content-Type")) + + var req createBucketRequest + err := json.NewDecoder(r.Body).Decode(&req) + require.NoError(t, err) + assert.Equal(t, "test-bucket", req.Name) + + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(Bucket{ + Name: "test-bucket", + CreatedAt: "2024-01-01T00:00:00Z", + }) + })) + defer server.Close() + + client := NewClient(server.URL) + bucket, err := client.CreateBucket("test-bucket") + require.NoError(t, err) + assert.Equal(t, "test-bucket", bucket.Name) + assert.Equal(t, "2024-01-01T00:00:00Z", bucket.CreatedAt) +} + +func TestCreateBucketError(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusConflict) + w.Write([]byte("Bucket already exists")) + })) + defer server.Close() + + client := NewClient(server.URL) + _, err := client.CreateBucket("test-bucket") + require.Error(t, err) + assert.Contains(t, err.Error(), "409") +} + +func TestListBuckets(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "GET", r.Method) + assert.Equal(t, "/buckets", r.URL.Path) + + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(listBucketsResponse{ + Buckets: []Bucket{ + {Name: "bucket1", CreatedAt: "2024-01-01T00:00:00Z"}, + {Name: "bucket2", CreatedAt: "2024-01-02T00:00:00Z"}, + }, + }) + })) + defer server.Close() + + client := NewClient(server.URL) + buckets, err := client.ListBuckets() + require.NoError(t, err) + assert.Len(t, buckets, 2) + assert.Equal(t, "bucket1", buckets[0].Name) + assert.Equal(t, "bucket2", buckets[1].Name) +} + +func TestDeleteBucket(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "DELETE", r.Method) + assert.Equal(t, "/buckets/test-bucket", r.URL.Path) + w.WriteHeader(http.StatusNoContent) + })) + defer server.Close() + + client := NewClient(server.URL) + err := client.DeleteBucket("test-bucket") + require.NoError(t, err) +} + +func TestDeleteBucketNotFound(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNotFound) + w.Write([]byte("Bucket not found")) + })) + defer server.Close() + + client := NewClient(server.URL) + err := client.DeleteBucket("test-bucket") + require.Error(t, err) + assert.Contains(t, err.Error(), "404") +} + +func TestPutObject(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + assert.Equal(t, "/buckets/test-bucket/objects/test-key", r.URL.Path) + assert.Equal(t, "text/plain", r.Header.Get("Content-Type")) + assert.Equal(t, "value1", r.Header.Get("x-object-meta-key1")) + + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(ObjectMetadata{ + Key: "test-key", + Size: 13, + ContentType: stringPtr("text/plain"), + ETag: "abc123", + LastModified: "2024-01-01T00:00:00Z", + Metadata: map[string]string{"key1": "value1"}, + }) + })) + defer server.Close() + + client := NewClient(server.URL) + contentType := "text/plain" + metadata := map[string]string{"key1": "value1"} + data := []byte("Hello, World!") + + obj, err := client.PutObject("test-bucket", "test-key", data, &contentType, metadata) + require.NoError(t, err) + assert.Equal(t, "test-key", obj.Key) + assert.Equal(t, uint64(13), obj.Size) + assert.Equal(t, "abc123", obj.ETag) +} + +func TestGetObject(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "GET", r.Method) + assert.Equal(t, "/buckets/test-bucket/objects/test-key", r.URL.Path) + + w.Header().Set("Content-Type", "text/plain") + w.Header().Set("Content-Length", "13") + w.Header().Set("ETag", "abc123") + w.Header().Set("Last-Modified", "2024-01-01T00:00:00Z") + w.WriteHeader(http.StatusOK) + w.Write([]byte("Hello, World!")) + })) + defer server.Close() + + client := NewClient(server.URL) + obj, err := client.GetObject("test-bucket", "test-key") + require.NoError(t, err) + assert.Equal(t, "test-key", obj.Metadata.Key) + assert.Equal(t, uint64(13), obj.Metadata.Size) + assert.Equal(t, "abc123", obj.Metadata.ETag) + assert.Equal(t, []byte("Hello, World!"), obj.Data) +} + +func TestGetObjectNotFound(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNotFound) + w.Write([]byte("Object not found")) + })) + defer server.Close() + + client := NewClient(server.URL) + _, err := client.GetObject("test-bucket", "test-key") + require.Error(t, err) + assert.Contains(t, err.Error(), "404") +} + +func TestHeadObject(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "HEAD", r.Method) + assert.Equal(t, "/buckets/test-bucket/objects/test-key", r.URL.Path) + + w.Header().Set("Content-Type", "text/plain") + w.Header().Set("Content-Length", "13") + w.Header().Set("ETag", "abc123") + w.Header().Set("Last-Modified", "2024-01-01T00:00:00Z") + w.WriteHeader(http.StatusOK) + })) + defer server.Close() + + client := NewClient(server.URL) + obj, err := client.HeadObject("test-bucket", "test-key") + require.NoError(t, err) + assert.Equal(t, "test-key", obj.Key) + assert.Equal(t, uint64(13), obj.Size) + assert.Equal(t, "abc123", obj.ETag) +} + +func TestDeleteObject(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "DELETE", r.Method) + assert.Equal(t, "/buckets/test-bucket/objects/test-key", r.URL.Path) + w.WriteHeader(http.StatusNoContent) + })) + defer server.Close() + + client := NewClient(server.URL) + err := client.DeleteObject("test-bucket", "test-key") + require.NoError(t, err) +} + +func TestListObjects(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "GET", r.Method) + assert.Equal(t, "/buckets/test-bucket/objects", r.URL.Path) + assert.Equal(t, "prefix/", r.URL.Query().Get("prefix")) + assert.Equal(t, "10", r.URL.Query().Get("max_keys")) + + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(listObjectsResponse{ + Objects: []ObjectMetadata{ + {Key: "prefix/obj1", Size: 100, ETag: "etag1", LastModified: "2024-01-01T00:00:00Z", Metadata: map[string]string{}}, + {Key: "prefix/obj2", Size: 200, ETag: "etag2", LastModified: "2024-01-02T00:00:00Z", Metadata: map[string]string{}}, + }, + }) + })) + defer server.Close() + + client := NewClient(server.URL) + prefix := "prefix/" + maxKeys := 10 + objects, err := client.ListObjects("test-bucket", &prefix, &maxKeys) + require.NoError(t, err) + assert.Len(t, objects, 2) + assert.Equal(t, "prefix/obj1", objects[0].Key) + assert.Equal(t, "prefix/obj2", objects[1].Key) +} + +func TestListObjectsNoParams(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "GET", r.Method) + assert.Equal(t, "/buckets/test-bucket/objects", r.URL.Path) + assert.Empty(t, r.URL.Query()) + + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(listObjectsResponse{ + Objects: []ObjectMetadata{}, + }) + })) + defer server.Close() + + client := NewClient(server.URL) + objects, err := client.ListObjects("test-bucket", nil, nil) + require.NoError(t, err) + assert.Empty(t, objects) +} + +func TestGetPublicURL(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "GET", r.Method) + assert.Equal(t, "/buckets/test-bucket/public-url/test-key", r.URL.Path) + assert.Equal(t, "7200", r.URL.Query().Get("expiration_secs")) + + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(PublicURLResponse{ + URL: "https://example.com/signed-url?signature=abc123", + ExpiresIn: 7200, + }) + })) + defer server.Close() + + client := NewClient(server.URL) + expirationSecs := uint64(7200) + response, err := client.GetPublicURL("test-bucket", "test-key", &expirationSecs) + require.NoError(t, err) + assert.Equal(t, "https://example.com/signed-url?signature=abc123", response.URL) + assert.Equal(t, uint64(7200), response.ExpiresIn) +} + +func TestGetPublicURLDefaultExpiration(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "GET", r.Method) + assert.Equal(t, "/buckets/test-bucket/public-url/test-key", r.URL.Path) + assert.Empty(t, r.URL.Query()) + + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(PublicURLResponse{ + URL: "https://example.com/signed-url?signature=xyz789", + ExpiresIn: 3600, + }) + })) + defer server.Close() + + client := NewClient(server.URL) + response, err := client.GetPublicURL("test-bucket", "test-key", nil) + require.NoError(t, err) + assert.Equal(t, "https://example.com/signed-url?signature=xyz789", response.URL) + assert.Equal(t, uint64(3600), response.ExpiresIn) +} + +func TestGetPublicURLNotFound(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNotFound) + w.Write([]byte("Object not found")) + })) + defer server.Close() + + client := NewClient(server.URL) + _, err := client.GetPublicURL("test-bucket", "test-key", nil) + require.Error(t, err) + assert.Contains(t, err.Error(), "Object not found") +} + +func stringPtr(s string) *string { + return &s +} diff --git a/src/systems/object-storage/service/clients/go/go.mod b/src/systems/object-storage/service/clients/go/go.mod new file mode 100644 index 000000000..5d129806f --- /dev/null +++ b/src/systems/object-storage/service/clients/go/go.mod @@ -0,0 +1,11 @@ +module github.com/metorial/object-storage/clients/go + +go 1.21 + +require github.com/stretchr/testify v1.8.4 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/src/systems/object-storage/service/clients/rust/Cargo.toml b/src/systems/object-storage/service/clients/rust/Cargo.toml new file mode 100644 index 000000000..7ee15d11a --- /dev/null +++ b/src/systems/object-storage/service/clients/rust/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "object-store-client" +version = "1.1.0" +edition = "2021" +authors = ["Object Storage Team"] +license = "Apache-2.0" +description = "Async Rust client library for Object Storage Service - S3-compatible object storage" +repository = "https://github.com/metorial/object-storage" +homepage = "https://github.com/metorial/object-storage" +documentation = "https://docs.rs/object-store-client" +readme = "README.md" +keywords = ["object-storage", "s3", "client", "async"] +categories = ["api-bindings", "web-programming::http-client"] + +[workspace] + +[dependencies] +reqwest = { version = "0.11", features = ["json", "multipart"] } +tokio = { version = "1.35", features = ["full"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +thiserror = "1.0" +chrono = { version = "0.4", features = ["serde"] } +bytes = "1.5" + +[dev-dependencies] +tokio-test = "0.4" +mockito = "1.2" diff --git a/src/systems/object-storage/service/clients/rust/Makefile b/src/systems/object-storage/service/clients/rust/Makefile new file mode 100644 index 000000000..61f351008 --- /dev/null +++ b/src/systems/object-storage/service/clients/rust/Makefile @@ -0,0 +1,18 @@ +.PHONY: test build fmt clippy clean + +test: + cargo test + +build: + cargo build --release + +fmt: + cargo fmt + +clippy: + cargo clippy -- -D warnings + +clean: + cargo clean + +all: fmt clippy test build diff --git a/src/systems/object-storage/service/clients/rust/README.md b/src/systems/object-storage/service/clients/rust/README.md new file mode 100644 index 000000000..ce14f91bd --- /dev/null +++ b/src/systems/object-storage/service/clients/rust/README.md @@ -0,0 +1,117 @@ +# Object Storage Client for Rust + +Async Rust client library for interacting with the [Metorial Object Storage Service](https://github.com/metorial/object-storage). + +## Installation + +Add to your `Cargo.toml`: + +```toml +[dependencies] +object-store-client = "0.1" +tokio = { version = "1", features = ["full"] } +``` + +## Usage + +```rust +use object_store_client::{ObjectStoreClient, Result}; + +#[tokio::main] +async fn main() -> Result<()> { + let client = ObjectStoreClient::new("http://localhost:8080"); + + // Create a bucket + client.create_bucket("my-bucket").await?; + + // Upload an object + let data = b"Hello, World!"; + client.put_object("my-bucket", "hello.txt", data, Some("text/plain"), None).await?; + + // Download an object + let obj = client.get_object("my-bucket", "hello.txt").await?; + println!("Downloaded {} bytes", obj.data.len()); + + // List objects + let objects = client.list_objects("my-bucket", None, None).await?; + for obj in objects { + println!("{}: {} bytes", obj.key, obj.size); + } + + // Delete object + client.delete_object("my-bucket", "hello.txt").await?; + + // Delete bucket + client.delete_bucket("my-bucket").await?; + + Ok(()) +} +``` + +## API Reference + +### Client Creation + +```rust +let client = ObjectStoreClient::new("http://localhost:8080"); +``` + +### Bucket Operations + +**Create Bucket** +```rust +client.create_bucket("bucket-name").await?; +``` + +**List Buckets** +```rust +let buckets = client.list_buckets().await?; +``` + +**Delete Bucket** +```rust +client.delete_bucket("bucket-name").await?; +``` + +### Object Operations + +**Put Object** +```rust +let metadata = client.put_object( + "bucket-name", + "object-key", + data, + Some("application/json"), + Some(custom_metadata) +).await?; +``` + +**Get Object** +```rust +let obj = client.get_object("bucket-name", "object-key").await?; +``` + +**Head Object** +```rust +let metadata = client.head_object("bucket-name", "object-key").await?; +``` + +**Delete Object** +```rust +client.delete_object("bucket-name", "object-key").await?; +``` + +**List Objects** +```rust +let objects = client.list_objects("bucket-name", Some("prefix/"), Some(100)).await?; +``` + +## Error Handling + +The client returns `Result` where `Error` can be: + +- `Error::NotFound` - Resource not found +- `Error::AlreadyExists` - Resource already exists +- `Error::BadRequest` - Invalid request +- `Error::ServerError` - Server error +- `Error::Http` - Network/HTTP error diff --git a/src/systems/object-storage/service/clients/rust/src/lib.rs b/src/systems/object-storage/service/clients/rust/src/lib.rs new file mode 100644 index 000000000..b4272faaf --- /dev/null +++ b/src/systems/object-storage/service/clients/rust/src/lib.rs @@ -0,0 +1,785 @@ +use bytes::Bytes; +use reqwest::{Client, StatusCode}; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error("HTTP error: {0}")] + Http(#[from] reqwest::Error), + + #[error("Not found: {0}")] + NotFound(String), + + #[error("Already exists: {0}")] + AlreadyExists(String), + + #[error("Bad request: {0}")] + BadRequest(String), + + #[error("Server error: {0}")] + ServerError(String), +} + +pub type Result = std::result::Result; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Bucket { + pub id: String, + pub name: String, + pub created_at: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ObjectMetadata { + pub key: String, + pub size: u64, + pub content_type: Option, + pub etag: String, + pub last_modified: String, + pub metadata: HashMap, +} + +#[derive(Debug, Clone)] +pub struct ObjectData { + pub metadata: ObjectMetadata, + pub data: Bytes, +} + +#[derive(Debug, Clone, Serialize)] +struct CreateBucketRequest { + name: String, +} + +#[derive(Debug, Deserialize)] +struct ListBucketsResponse { + buckets: Vec, +} + +#[derive(Debug, Deserialize)] +struct ListObjectsResponse { + objects: Vec, +} + +#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)] +#[serde(rename_all = "lowercase")] +pub enum PublicUrlPurpose { + #[default] + Retrieve, + Upload, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PublicUrlResponse { + pub url: String, + pub expires_in: u64, +} + +pub struct ObjectStoreClient { + client: Client, + base_url: String, +} + +impl ObjectStoreClient { + pub fn new(base_url: impl Into) -> Self { + Self { + client: Client::new(), + base_url: base_url.into(), + } + } + + pub fn with_client(base_url: impl Into, client: Client) -> Self { + Self { + client, + base_url: base_url.into(), + } + } + + pub async fn ping(&self) -> Result<()> { + let url = format!("{}/ping", self.base_url); + let response = self.client.get(&url).send().await?; + + match response.status() { + StatusCode::OK => Ok(()), + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn create_bucket(&self, name: &str) -> Result { + let url = format!("{}/buckets", self.base_url); + let req = CreateBucketRequest { + name: name.to_string(), + }; + + let response = self.client.post(&url).json(&req).send().await?; + + match response.status() { + StatusCode::OK => Ok(response.json().await?), + StatusCode::CONFLICT => Err(Error::AlreadyExists(name.to_string())), + StatusCode::BAD_REQUEST => { + Err(Error::BadRequest(response.text().await.unwrap_or_default())) + } + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn upsert_bucket(&self, name: &str) -> Result { + let url = format!("{}/buckets", self.base_url); + let req = CreateBucketRequest { + name: name.to_string(), + }; + + let response = self.client.put(&url).json(&req).send().await?; + + match response.status() { + StatusCode::OK => Ok(response.json().await?), + StatusCode::BAD_REQUEST => { + Err(Error::BadRequest(response.text().await.unwrap_or_default())) + } + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn get_bucket(&self, id: &str) -> Result { + let url = format!("{}/buckets/{}", self.base_url, id); + let response = self.client.get(&url).send().await?; + + match response.status() { + StatusCode::OK => Ok(response.json().await?), + StatusCode::NOT_FOUND => Err(Error::NotFound(id.to_string())), + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn list_buckets(&self) -> Result> { + let url = format!("{}/buckets", self.base_url); + let response = self.client.get(&url).send().await?; + + match response.status() { + StatusCode::OK => { + let resp: ListBucketsResponse = response.json().await?; + Ok(resp.buckets) + } + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn delete_bucket(&self, name: &str) -> Result<()> { + let url = format!("{}/buckets/{}", self.base_url, name); + let response = self.client.delete(&url).send().await?; + + match response.status() { + StatusCode::NO_CONTENT => Ok(()), + StatusCode::NOT_FOUND => Err(Error::NotFound(name.to_string())), + StatusCode::BAD_REQUEST => { + Err(Error::BadRequest(response.text().await.unwrap_or_default())) + } + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn put_object( + &self, + bucket: &str, + key: &str, + data: impl Into, + content_type: Option<&str>, + metadata: Option>, + ) -> Result { + let url = format!("{}/buckets/{}/objects/{}", self.base_url, bucket, key); + let mut request = self.client.put(&url); + + if let Some(ct) = content_type { + request = request.header("content-type", ct); + } + + if let Some(meta) = metadata { + for (k, v) in meta { + request = request.header(format!("x-object-meta-{}", k), v); + } + } + + let response = request.body(data.into()).send().await?; + + match response.status() { + StatusCode::OK => Ok(response.json().await?), + StatusCode::NOT_FOUND => Err(Error::NotFound(bucket.to_string())), + StatusCode::BAD_REQUEST => { + Err(Error::BadRequest(response.text().await.unwrap_or_default())) + } + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn get_object(&self, bucket: &str, key: &str) -> Result { + let url = format!("{}/buckets/{}/objects/{}", self.base_url, bucket, key); + let response = self.client.get(&url).send().await?; + + match response.status() { + StatusCode::OK => { + let etag = response + .headers() + .get("etag") + .and_then(|v| v.to_str().ok()) + .unwrap_or("") + .to_string(); + + let last_modified = response + .headers() + .get("last-modified") + .and_then(|v| v.to_str().ok()) + .unwrap_or("") + .to_string(); + + let content_type = response + .headers() + .get("content-type") + .and_then(|v| v.to_str().ok()) + .map(|s| s.to_string()); + + let size = response + .headers() + .get("content-length") + .and_then(|v| v.to_str().ok()) + .and_then(|s| s.parse().ok()) + .unwrap_or(0); + + // Extract custom metadata from x-object-meta-* headers + let mut metadata = HashMap::new(); + for (header_name, header_value) in response.headers().iter() { + if let Some(meta_key) = header_name.as_str().strip_prefix("x-object-meta-") { + if let Ok(meta_value) = header_value.to_str() { + metadata.insert(meta_key.to_string(), meta_value.to_string()); + } + } + } + + let data = response.bytes().await?; + + Ok(ObjectData { + metadata: ObjectMetadata { + key: key.to_string(), + size, + content_type, + etag, + last_modified, + metadata, + }, + data, + }) + } + StatusCode::NOT_FOUND => Err(Error::NotFound(format!("{}/{}", bucket, key))), + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn head_object(&self, bucket: &str, key: &str) -> Result { + let url = format!("{}/buckets/{}/objects/{}", self.base_url, bucket, key); + let response = self.client.head(&url).send().await?; + + match response.status() { + StatusCode::OK => { + let etag = response + .headers() + .get("etag") + .and_then(|v| v.to_str().ok()) + .unwrap_or("") + .to_string(); + + let last_modified = response + .headers() + .get("last-modified") + .and_then(|v| v.to_str().ok()) + .unwrap_or("") + .to_string(); + + let content_type = response + .headers() + .get("content-type") + .and_then(|v| v.to_str().ok()) + .map(|s| s.to_string()); + + let size = response + .headers() + .get("content-length") + .and_then(|v| v.to_str().ok()) + .and_then(|s| s.parse().ok()) + .unwrap_or(0); + + // Extract custom metadata from x-object-meta-* headers + let mut metadata = HashMap::new(); + for (header_name, header_value) in response.headers().iter() { + if let Some(meta_key) = header_name.as_str().strip_prefix("x-object-meta-") { + if let Ok(meta_value) = header_value.to_str() { + metadata.insert(meta_key.to_string(), meta_value.to_string()); + } + } + } + + Ok(ObjectMetadata { + key: key.to_string(), + size, + content_type, + etag, + last_modified, + metadata, + }) + } + StatusCode::NOT_FOUND => Err(Error::NotFound(format!("{}/{}", bucket, key))), + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn get_object_info(&self, bucket: &str, key: &str) -> Result { + let url = format!("{}/buckets/{}/object-info/{}", self.base_url, bucket, key); + let response = self.client.get(&url).send().await?; + + match response.status() { + StatusCode::OK => Ok(response.json().await?), + StatusCode::NOT_FOUND => Err(Error::NotFound(format!("{}/{}", bucket, key))), + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn delete_object(&self, bucket: &str, key: &str) -> Result<()> { + let url = format!("{}/buckets/{}/objects/{}", self.base_url, bucket, key); + let response = self.client.delete(&url).send().await?; + + match response.status() { + StatusCode::NO_CONTENT => Ok(()), + StatusCode::NOT_FOUND => Err(Error::NotFound(format!("{}/{}", bucket, key))), + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn list_objects( + &self, + bucket: &str, + prefix: Option<&str>, + max_keys: Option, + ) -> Result> { + let mut url = format!("{}/buckets/{}/objects", self.base_url, bucket); + let mut params = vec![]; + + if let Some(p) = prefix { + params.push(format!("prefix={}", p)); + } + if let Some(m) = max_keys { + params.push(format!("max_keys={}", m)); + } + + if !params.is_empty() { + url.push('?'); + url.push_str(¶ms.join("&")); + } + + let response = self.client.get(&url).send().await?; + + match response.status() { + StatusCode::OK => { + let resp: ListObjectsResponse = response.json().await?; + Ok(resp.objects) + } + StatusCode::NOT_FOUND => Err(Error::NotFound(bucket.to_string())), + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } + + pub async fn get_public_url( + &self, + bucket: &str, + key: &str, + expiration_secs: Option, + purpose: Option, + ) -> Result { + let mut url = format!("{}/buckets/{}/public-url/{}", self.base_url, bucket, key); + let mut params = vec![]; + + if let Some(exp) = expiration_secs { + params.push(format!("expiration_secs={}", exp)); + } + + if let Some(p) = purpose { + let purpose_str = match p { + PublicUrlPurpose::Retrieve => "retrieve", + PublicUrlPurpose::Upload => "upload", + }; + params.push(format!("purpose={}", purpose_str)); + } + + if !params.is_empty() { + url.push('?'); + url.push_str(¶ms.join("&")); + } + + let response = self.client.get(&url).send().await?; + + match response.status() { + StatusCode::OK => Ok(response.json().await?), + StatusCode::NOT_FOUND => Err(Error::NotFound(format!("{}/{}", bucket, key))), + StatusCode::BAD_REQUEST => { + Err(Error::BadRequest(response.text().await.unwrap_or_default())) + } + _ => Err(Error::ServerError( + response.text().await.unwrap_or_default(), + )), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use mockito::Server; + + #[tokio::test] + async fn test_client_creation() { + let client = ObjectStoreClient::new("http://localhost:8080"); + assert_eq!(client.base_url, "http://localhost:8080"); + } + + #[tokio::test] + async fn test_create_bucket() { + let mut server = Server::new_async().await; + let _m = server + .mock("POST", "/buckets") + .with_status(200) + .with_header("content-type", "application/json") + .with_body( + r#"{"id":"bucket-123","name":"test-bucket","created_at":"2024-01-01T00:00:00Z"}"#, + ) + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let bucket = client.create_bucket("test-bucket").await.unwrap(); + + assert_eq!(bucket.id, "bucket-123"); + assert_eq!(bucket.name, "test-bucket"); + assert_eq!(bucket.created_at, "2024-01-01T00:00:00Z"); + } + + #[tokio::test] + async fn test_create_bucket_conflict() { + let mut server = Server::new_async().await; + let _m = server + .mock("POST", "/buckets") + .with_status(409) + .with_body("Bucket already exists") + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let result = client.create_bucket("test-bucket").await; + + assert!(result.is_err()); + assert!(matches!(result.unwrap_err(), Error::AlreadyExists(_))); + } + + #[tokio::test] + async fn test_list_buckets() { + let mut server = Server::new_async().await; + let _m = server + .mock("GET", "/buckets") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(r#"{"buckets":[{"id":"bucket-1","name":"bucket1","created_at":"2024-01-01T00:00:00Z"},{"id":"bucket-2","name":"bucket2","created_at":"2024-01-02T00:00:00Z"}]}"#) + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let buckets = client.list_buckets().await.unwrap(); + + assert_eq!(buckets.len(), 2); + assert_eq!(buckets[0].id, "bucket-1"); + assert_eq!(buckets[0].name, "bucket1"); + assert_eq!(buckets[1].id, "bucket-2"); + assert_eq!(buckets[1].name, "bucket2"); + } + + #[tokio::test] + async fn test_delete_bucket() { + let mut server = Server::new_async().await; + let _m = server + .mock("DELETE", "/buckets/test-bucket") + .with_status(204) + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let result = client.delete_bucket("test-bucket").await; + + assert!(result.is_ok()); + } + + #[tokio::test] + async fn test_delete_bucket_not_found() { + let mut server = Server::new_async().await; + let _m = server + .mock("DELETE", "/buckets/test-bucket") + .with_status(404) + .with_body("Bucket not found") + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let result = client.delete_bucket("test-bucket").await; + + assert!(result.is_err()); + assert!(matches!(result.unwrap_err(), Error::NotFound(_))); + } + + #[tokio::test] + async fn test_put_object() { + let mut server = Server::new_async().await; + let _m = server + .mock("PUT", "/buckets/test-bucket/objects/test-key") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(r#"{"key":"test-key","size":13,"content_type":"text/plain","etag":"abc123","last_modified":"2024-01-01T00:00:00Z","metadata":{"key1":"value1"}}"#) + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let data = Bytes::from("Hello, World!"); + let mut metadata = HashMap::new(); + metadata.insert("key1".to_string(), "value1".to_string()); + + let obj = client + .put_object( + "test-bucket", + "test-key", + data, + Some("text/plain"), + Some(metadata), + ) + .await + .unwrap(); + + assert_eq!(obj.key, "test-key"); + assert_eq!(obj.size, 13); + assert_eq!(obj.etag, "abc123"); + } + + #[tokio::test] + async fn test_get_object() { + let mut server = Server::new_async().await; + let _m = server + .mock("GET", "/buckets/test-bucket/objects/test-key") + .with_status(200) + .with_header("content-type", "text/plain") + .with_header("content-length", "13") + .with_header("etag", "abc123") + .with_header("last-modified", "2024-01-01T00:00:00Z") + .with_body("Hello, World!") + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let obj = client.get_object("test-bucket", "test-key").await.unwrap(); + + assert_eq!(obj.metadata.key, "test-key"); + assert_eq!(obj.metadata.size, 13); + assert_eq!(obj.metadata.etag, "abc123"); + assert_eq!(obj.data, Bytes::from("Hello, World!")); + } + + #[tokio::test] + async fn test_get_object_not_found() { + let mut server = Server::new_async().await; + let _m = server + .mock("GET", "/buckets/test-bucket/objects/test-key") + .with_status(404) + .with_body("Object not found") + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let result = client.get_object("test-bucket", "test-key").await; + + assert!(result.is_err()); + assert!(matches!(result.unwrap_err(), Error::NotFound(_))); + } + + #[tokio::test] + async fn test_head_object() { + let mut server = Server::new_async().await; + let _m = server + .mock("HEAD", "/buckets/test-bucket/objects/test-key") + .with_status(200) + .with_header("content-type", "text/plain") + .with_header("content-length", "13") + .with_header("etag", "abc123") + .with_header("last-modified", "2024-01-01T00:00:00Z") + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let obj = client.head_object("test-bucket", "test-key").await.unwrap(); + + assert_eq!(obj.key, "test-key"); + assert_eq!(obj.size, 13); + assert_eq!(obj.etag, "abc123"); + } + + #[tokio::test] + async fn test_delete_object() { + let mut server = Server::new_async().await; + let _m = server + .mock("DELETE", "/buckets/test-bucket/objects/test-key") + .with_status(204) + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let result = client.delete_object("test-bucket", "test-key").await; + + assert!(result.is_ok()); + } + + #[tokio::test] + async fn test_list_objects() { + let mut server = Server::new_async().await; + let _m = server + .mock("GET", "/buckets/test-bucket/objects") + .match_query(mockito::Matcher::AllOf(vec![ + mockito::Matcher::UrlEncoded("prefix".into(), "prefix/".into()), + mockito::Matcher::UrlEncoded("max_keys".into(), "10".into()), + ])) + .with_status(200) + .with_header("content-type", "application/json") + .with_body(r#"{"objects":[{"key":"prefix/obj1","size":100,"etag":"etag1","last_modified":"2024-01-01T00:00:00Z","metadata":{}},{"key":"prefix/obj2","size":200,"etag":"etag2","last_modified":"2024-01-02T00:00:00Z","metadata":{}}]}"#) + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let objects = client + .list_objects("test-bucket", Some("prefix/"), Some(10)) + .await + .unwrap(); + + assert_eq!(objects.len(), 2); + assert_eq!(objects[0].key, "prefix/obj1"); + assert_eq!(objects[1].key, "prefix/obj2"); + } + + #[tokio::test] + async fn test_list_objects_no_params() { + let mut server = Server::new_async().await; + let _m = server + .mock("GET", "/buckets/test-bucket/objects") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(r#"{"objects":[]}"#) + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let objects = client + .list_objects("test-bucket", None, None) + .await + .unwrap(); + + assert_eq!(objects.len(), 0); + } + + #[tokio::test] + async fn test_get_public_url() { + let mut server = Server::new_async().await; + let _m = server + .mock("GET", "/buckets/test-bucket/public-url/test-key") + .match_query(mockito::Matcher::UrlEncoded( + "expiration_secs".into(), + "7200".into(), + )) + .with_status(200) + .with_header("content-type", "application/json") + .with_body( + r#"{"url":"https://example.com/signed-url?signature=abc123","expires_in":7200}"#, + ) + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let response = client + .get_public_url("test-bucket", "test-key", Some(7200), None) + .await + .unwrap(); + + assert_eq!( + response.url, + "https://example.com/signed-url?signature=abc123" + ); + assert_eq!(response.expires_in, 7200); + } + + #[tokio::test] + async fn test_get_public_url_default_expiration() { + let mut server = Server::new_async().await; + let _m = server + .mock("GET", "/buckets/test-bucket/public-url/test-key") + .with_status(200) + .with_header("content-type", "application/json") + .with_body( + r#"{"url":"https://example.com/signed-url?signature=xyz789","expires_in":3600}"#, + ) + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let response = client + .get_public_url("test-bucket", "test-key", None, None) + .await + .unwrap(); + + assert_eq!( + response.url, + "https://example.com/signed-url?signature=xyz789" + ); + assert_eq!(response.expires_in, 3600); + } + + #[tokio::test] + async fn test_get_public_url_not_found() { + let mut server = Server::new_async().await; + let _m = server + .mock("GET", "/buckets/test-bucket/public-url/test-key") + .with_status(404) + .with_body("Object not found") + .create_async() + .await; + + let client = ObjectStoreClient::new(server.url()); + let result = client + .get_public_url("test-bucket", "test-key", None, None) + .await; + + assert!(result.is_err()); + assert!(matches!(result.unwrap_err(), Error::NotFound(_))); + } +} diff --git a/src/systems/object-storage/service/config.example.toml b/src/systems/object-storage/service/config.example.toml new file mode 100644 index 000000000..ff77aacb8 --- /dev/null +++ b/src/systems/object-storage/service/config.example.toml @@ -0,0 +1,33 @@ +# Example configuration file for the object storage service +# Copy this to config.toml and modify as needed + +[server] +# Host to bind to +# Use "127.0.0.1" for local-only access +# Use "0.0.0.0" to accept connections from any interface (required for Docker) +host = "0.0.0.0" +port = 8080 + +[backend] +# Backend type: "local", "s3", "gcs", or "azure" +type = "local" + +# For local backend: +root_path = "/app/data" # Use "./data" for local development +physical_bucket = "object-store-data" + +# For S3 backend: +# type = "s3" +# region = "us-east-1" +# physical_bucket = "my-bucket" +# endpoint = "http://localhost:9000" # Optional, for MinIO or S3-compatible services + +# For GCS backend: +# type = "gcs" +# physical_bucket = "my-gcs-bucket" + +# For Azure backend: +# type = "azure" +# account = "myaccount" +# access_key = "myaccesskey" +# physical_bucket = "mycontainer" diff --git a/src/systems/object-storage/service/control.toml b/src/systems/object-storage/service/control.toml new file mode 100644 index 000000000..2ad73cfba --- /dev/null +++ b/src/systems/object-storage/service/control.toml @@ -0,0 +1,22 @@ +[control] +name = "object-storage" + +[service] +port = 52010 +dockerfile = "src/systems/object-storage/service/Dockerfile" +build_context = "oss" +health = { path = "/health" } + +[test.unit] +command = "cargo test -p object-store --test integration_test -- --test-threads=1" +cwd = "/app/src/systems/object-storage/service" + +[test.e2e] +command = "cargo test -p object-store --test integration_test -- --test-threads=1" +cwd = "/app/src/systems/object-storage/service" +runner = "service" + +[env] +RUST_LOG = "info" +OBJECT_STORE_BACKEND_TYPE = "local" +OBJECT_STORE_BACKEND_ROOT_PATH = "/app/data" diff --git a/src/systems/object-storage/service/object-store-backends/Cargo.toml b/src/systems/object-storage/service/object-store-backends/Cargo.toml new file mode 100644 index 000000000..b4761ea3b --- /dev/null +++ b/src/systems/object-storage/service/object-store-backends/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "object-store-backends" +version.workspace = true +edition.workspace = true +authors.workspace = true +license.workspace = true + +[dependencies] +tokio = { workspace = true } +async-trait = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +anyhow = { workspace = true } +thiserror = { workspace = true } +tracing = { workspace = true } + +# Storage backends +aws-sdk-s3 = { workspace = true } +aws-config = { workspace = true } +aws-smithy-types = { workspace = true } +google-cloud-storage = { workspace = true } +azure_storage = { workspace = true } +azure_storage_blobs = { workspace = true } +azure_core = "0.20" + +sha2 = { workspace = true } +hex = { workspace = true } +chrono = { workspace = true } +futures = "0.3" +time = "0.3" +bytes = "1.5" +tokio-util = { version = "0.7", features = ["io"] } +http-body-util = "0.1" +hyper = "1.0" + +[dev-dependencies] +mockall = { workspace = true } +tempfile = "3.8" diff --git a/src/systems/object-storage/service/object-store-backends/src/azure.rs b/src/systems/object-storage/service/object-store-backends/src/azure.rs new file mode 100644 index 000000000..622392838 --- /dev/null +++ b/src/systems/object-storage/service/object-store-backends/src/azure.rs @@ -0,0 +1,415 @@ +use async_trait::async_trait; +use azure_core::auth::Secret; +use azure_storage::prelude::*; +use azure_storage_blobs::prelude::*; +use bytes::Bytes; +use chrono::{DateTime, Utc}; +use futures::StreamExt; +use sha2::{Digest, Sha256}; +use std::collections::HashMap; +use tracing::{debug, info, warn}; + +use crate::backend::{Backend, ByteStream, ObjectData, ObjectMetadata, PublicUrlPurpose}; +use crate::error::{BackendError, BackendResult}; + +pub struct AzureBackend { + client: ContainerClient, + container_name: String, + account: String, + #[allow(dead_code)] + access_key: String, +} + +impl AzureBackend { + pub fn new(account: String, access_key: String, container_name: String) -> BackendResult { + let storage_credentials = + StorageCredentials::access_key(account.clone(), Secret::new(access_key.clone())); + + let client = ClientBuilder::new(account.clone(), storage_credentials) + .container_client(&container_name); + + info!( + "Initialized Azure Blob Storage backend with container: {}", + container_name + ); + + Ok(Self { + client, + container_name, + account, + access_key, + }) + } + + pub fn new_from_connection_string( + connection_string: String, + container_name: String, + ) -> BackendResult { + let mut account_name = String::new(); + let mut access_key = String::new(); + + for part in connection_string.split(';') { + if let Some(value) = part.strip_prefix("AccountName=") { + account_name = value.to_string(); + } else if let Some(value) = part.strip_prefix("AccountKey=") { + access_key = value.to_string(); + } + } + + if account_name.is_empty() || access_key.is_empty() { + return Err(BackendError::Configuration( + "AccountName or AccountKey not found in connection string".to_string(), + )); + } + + let storage_credentials = + StorageCredentials::access_key(account_name.clone(), Secret::new(access_key.clone())); + + let client = ClientBuilder::new(account_name.clone(), storage_credentials) + .container_client(&container_name); + + info!( + "Initialized Azure Blob Storage backend with container: {} from connection string", + container_name + ); + + Ok(Self { + client, + container_name, + account: account_name, + access_key, + }) + } + + fn calculate_etag(data: &[u8]) -> String { + use sha2::{Digest, Sha256}; + let mut hasher = Sha256::new(); + hasher.update(data); + hex::encode(hasher.finalize()) + } + + fn azure_metadata_to_object_metadata( + name: String, + size: u64, + last_modified: time::OffsetDateTime, + etag: Option, + content_type: Option, + metadata: HashMap, + ) -> ObjectMetadata { + let last_modified_utc = + DateTime::from_timestamp(last_modified.unix_timestamp(), last_modified.nanosecond()) + .unwrap_or_else(Utc::now); + + ObjectMetadata { + key: name.clone(), + size, + content_type, + last_modified: last_modified_utc, + etag: etag.unwrap_or_else(|| { + use sha2::{Digest, Sha256}; + let mut hasher = Sha256::new(); + hasher.update(name.as_bytes()); + hex::encode(hasher.finalize()) + }), + custom_metadata: metadata, + } + } +} + +#[async_trait] +impl Backend for AzureBackend { + async fn init(&self) -> BackendResult<()> { + match self.client.get_properties().await { + Ok(_) => { + info!("Azure container {} is accessible", self.container_name); + Ok(()) + } + Err(e) => { + warn!( + "Failed to access Azure container {}: {:?}", + self.container_name, e + ); + Err(BackendError::Configuration(format!( + "Cannot access Azure container '{}': {}", + self.container_name, e + ))) + } + } + } + + async fn put_object( + &self, + key: &str, + mut stream: ByteStream, + content_type: Option, + custom_metadata: HashMap, + ) -> BackendResult { + let blob_client = self.client.blob_client(key); + + // Collect stream into bytes while computing hash + let mut hasher = Sha256::new(); + let mut data = Vec::new(); + + while let Some(chunk_result) = stream.next().await { + let chunk = chunk_result + .map_err(|e| BackendError::Provider(format!("Failed to read stream: {}", e)))?; + + hasher.update(&chunk); + data.extend_from_slice(&chunk); + } + + let size = data.len(); + let etag = hex::encode(hasher.finalize()); + + let mut request = blob_client.put_block_blob(data); + + if let Some(ct) = content_type.as_ref() { + request = request.content_type(ct.clone()); + } + + let mut metadata_obj = azure_core::request_options::Metadata::new(); + for (k, v) in custom_metadata.iter() { + metadata_obj.insert(k.clone(), v.clone()); + } + request = request.metadata(metadata_obj); + + match request.await { + Ok(_) => { + debug!("Uploaded blob to Azure: {} ({} bytes)", key, size); + Ok(ObjectMetadata { + key: key.to_string(), + size: size as u64, + content_type, + last_modified: Utc::now(), + etag, + custom_metadata, + }) + } + Err(e) => { + warn!("Failed to upload blob to Azure: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to upload blob '{}': {}", + key, e + ))) + } + } + } + + async fn get_object(&self, key: &str) -> BackendResult { + let blob_client = self.client.blob_client(key); + + match blob_client.get_content().await { + Ok(data) => { + let size = data.len(); + debug!("Retrieved blob from Azure: {} ({} bytes)", key, size); + + // Get metadata + let metadata = match self.head_object(key).await { + Ok(meta) => meta, + Err(_) => ObjectMetadata { + key: key.to_string(), + size: size as u64, + content_type: None, + last_modified: Utc::now(), + etag: Self::calculate_etag(&data), + custom_metadata: HashMap::new(), + }, + }; + + // Convert data to stream + let stream: ByteStream = + Box::pin(futures::stream::once(async move { Ok(Bytes::from(data)) })); + + Ok(ObjectData { metadata, stream }) + } + Err(e) => { + let error_msg = format!("{:?}", e); + if error_msg.contains("404") + || error_msg.contains("NotFound") + || error_msg.contains("BlobNotFound") + { + Err(BackendError::NotFound(key.to_string())) + } else { + warn!("Failed to get blob from Azure: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to get blob '{}': {}", + key, e + ))) + } + } + } + } + + async fn head_object(&self, key: &str) -> BackendResult { + let blob_client = self.client.blob_client(key); + + match blob_client.get_properties().await { + Ok(properties) => { + let metadata_map: HashMap = + properties.blob.metadata.clone().unwrap_or_default(); + + let etag_str = format!("{:?}", properties.blob.properties.etag); + + Ok(Self::azure_metadata_to_object_metadata( + key.to_string(), + properties.blob.properties.content_length, + properties.blob.properties.last_modified, + Some(etag_str), + Some(properties.blob.properties.content_type), + metadata_map, + )) + } + Err(e) => { + let error_msg = format!("{:?}", e); + if error_msg.contains("404") + || error_msg.contains("NotFound") + || error_msg.contains("BlobNotFound") + { + Err(BackendError::NotFound(key.to_string())) + } else { + warn!("Failed to get blob properties from Azure: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to get metadata for '{}': {}", + key, e + ))) + } + } + } + } + + async fn delete_object(&self, key: &str) -> BackendResult<()> { + let blob_client = self.client.blob_client(key); + + match blob_client.delete().await { + Ok(_) => { + debug!("Deleted blob from Azure: {}", key); + Ok(()) + } + Err(e) => { + warn!("Failed to delete blob from Azure: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to delete blob '{}': {}", + key, e + ))) + } + } + } + + async fn list_objects( + &self, + prefix: Option<&str>, + max_keys: Option, + ) -> BackendResult> { + let mut request = self.client.list_blobs(); + + if let Some(p) = prefix { + request = request.prefix(p.to_string()); + } + + if let Some(max) = max_keys { + if let Some(max_nz) = std::num::NonZeroU32::new(max as u32) { + request = request.max_results(max_nz); + } + } + + match request.into_stream().next().await { + Some(Ok(response)) => { + let objects: Vec = response + .blobs + .items + .into_iter() + .filter_map(|item| { + use azure_storage_blobs::container::operations::BlobItem; + if let BlobItem::Blob(blob) = item { + let metadata_map: HashMap = + blob.metadata.clone().unwrap_or_default(); + + let etag_str = format!("{:?}", blob.properties.etag); + + Some(Self::azure_metadata_to_object_metadata( + blob.name, + blob.properties.content_length, + blob.properties.last_modified, + Some(etag_str), + Some(blob.properties.content_type), + metadata_map, + )) + } else { + None + } + }) + .collect(); + + debug!( + "Listed {} blobs from Azure with prefix: {:?}", + objects.len(), + prefix + ); + + Ok(objects) + } + Some(Err(e)) => { + let error_msg = format!("{:?}", e); + if error_msg.contains("404") || error_msg.contains("ContainerNotFound") { + Err(BackendError::NotFound(format!( + "container:{}", + self.container_name + ))) + } else { + warn!("Failed to list blobs from Azure: {:?}", e); + Err(BackendError::Provider(format!( + "Failed to list blobs: {}", + e + ))) + } + } + None => Ok(Vec::new()), + } + } + + async fn get_public_url( + &self, + key: &str, + expiration_secs: u64, + purpose: PublicUrlPurpose, + ) -> BackendResult { + use azure_storage::shared_access_signature::service_sas::BlobSasPermissions; + use time::{Duration, OffsetDateTime}; + + let expiry = OffsetDateTime::now_utc() + Duration::seconds(expiration_secs as i64); + + let permissions = match purpose { + PublicUrlPurpose::Retrieve => BlobSasPermissions { + read: true, + ..Default::default() + }, + PublicUrlPurpose::Upload => BlobSasPermissions { + write: true, + create: true, + ..Default::default() + }, + }; + + let sas = self + .client + .shared_access_signature(permissions, expiry) + .await + .map_err(|e| BackendError::Provider(format!("Failed to generate SAS token: {}", e)))?; + + let token = sas + .token() + .map_err(|e| BackendError::Provider(format!("Failed to extract SAS token: {}", e)))?; + + let url = format!( + "https://{}.blob.core.windows.net/{}/{}?{}", + self.account, self.container_name, key, token + ); + + debug!( + "Generated SAS {:?} URL for Azure blob: {} (expires in {} seconds)", + purpose, key, expiration_secs + ); + + Ok(url) + } +} diff --git a/src/systems/object-storage/service/object-store-backends/src/backend.rs b/src/systems/object-storage/service/object-store-backends/src/backend.rs new file mode 100644 index 000000000..a7c805f4e --- /dev/null +++ b/src/systems/object-storage/service/object-store-backends/src/backend.rs @@ -0,0 +1,81 @@ +use async_trait::async_trait; +use bytes::Bytes; +use chrono::{DateTime, Utc}; +use futures::Stream; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::pin::Pin; + +use crate::error::BackendResult; + +pub type ByteStream = Pin> + Send>>; + +#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)] +#[serde(rename_all = "lowercase")] +pub enum PublicUrlPurpose { + #[default] + Retrieve, + Upload, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ObjectMetadata { + pub key: String, + pub size: u64, + pub content_type: Option, + pub etag: String, + pub last_modified: DateTime, + pub custom_metadata: HashMap, +} + +pub struct ObjectData { + pub metadata: ObjectMetadata, + pub stream: ByteStream, +} + +#[async_trait] +pub trait Backend: Send + Sync { + async fn init(&self) -> BackendResult<()>; + + async fn put_object( + &self, + key: &str, + stream: ByteStream, + content_type: Option, + metadata: HashMap, + ) -> BackendResult; + + async fn get_object(&self, key: &str) -> BackendResult; + + async fn head_object(&self, key: &str) -> BackendResult; + + async fn delete_object(&self, key: &str) -> BackendResult<()>; + + async fn list_objects( + &self, + prefix: Option<&str>, + max_keys: Option, + ) -> BackendResult>; + + async fn object_exists(&self, key: &str) -> BackendResult { + match self.head_object(key).await { + Ok(_) => Ok(true), + Err(crate::error::BackendError::NotFound(_)) => Ok(false), + Err(e) => Err(e), + } + } + + async fn get_public_url( + &self, + key: &str, + expiration_secs: u64, + purpose: PublicUrlPurpose, + ) -> BackendResult; +} + +pub fn compute_etag(data: &[u8]) -> String { + use sha2::{Digest, Sha256}; + let mut hasher = Sha256::new(); + hasher.update(data); + hex::encode(hasher.finalize()) +} diff --git a/src/systems/object-storage/service/object-store-backends/src/error.rs b/src/systems/object-storage/service/object-store-backends/src/error.rs new file mode 100644 index 000000000..b45fa8a25 --- /dev/null +++ b/src/systems/object-storage/service/object-store-backends/src/error.rs @@ -0,0 +1,27 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum BackendError { + #[error("Object not found: {0}")] + NotFound(String), + + #[error("IO error: {0}")] + Io(#[from] std::io::Error), + + #[error("Provider error: {0}")] + Provider(String), + + #[error("Serialization error: {0}")] + Serialization(#[from] serde_json::Error), + + #[error("Invalid path: {0}")] + InvalidPath(String), + + #[error("Configuration error: {0}")] + Configuration(String), + + #[error("Internal error: {0}")] + Internal(String), +} + +pub type BackendResult = Result; diff --git a/src/systems/object-storage/service/object-store-backends/src/gcs.rs b/src/systems/object-storage/service/object-store-backends/src/gcs.rs new file mode 100644 index 000000000..12591772c --- /dev/null +++ b/src/systems/object-storage/service/object-store-backends/src/gcs.rs @@ -0,0 +1,389 @@ +use async_trait::async_trait; +use bytes::Bytes; +use chrono::{DateTime, Utc}; +use futures::StreamExt; +use google_cloud_storage::client::{Client, ClientConfig}; +use google_cloud_storage::http::objects::delete::DeleteObjectRequest; +use google_cloud_storage::http::objects::download::Range; +use google_cloud_storage::http::objects::get::GetObjectRequest; +use google_cloud_storage::http::objects::list::ListObjectsRequest; +use google_cloud_storage::http::objects::upload::{Media, UploadObjectRequest, UploadType}; +use sha2::{Digest, Sha256}; +use std::collections::HashMap; +use tracing::{debug, info, warn}; + +use crate::backend::{Backend, ByteStream, ObjectData, ObjectMetadata, PublicUrlPurpose}; +use crate::error::{BackendError, BackendResult}; + +pub struct GcsBackend { + client: Client, + bucket_name: String, +} + +impl GcsBackend { + pub async fn new(bucket_name: String) -> BackendResult { + let config = ClientConfig::default().with_auth().await.map_err(|e| { + BackendError::Configuration(format!("Failed to initialize GCS auth: {}", e)) + })?; + + let client = Client::new(config); + + info!("Initialized GCS backend with bucket: {}", bucket_name); + Ok(Self { + client, + bucket_name, + }) + } + + pub async fn new_with_credentials( + bucket_name: String, + credentials_path: String, + ) -> BackendResult { + unsafe { std::env::set_var("GOOGLE_APPLICATION_CREDENTIALS", &credentials_path) }; + + let config = ClientConfig::default().with_auth().await.map_err(|e| { + BackendError::Configuration(format!("Failed to initialize GCS with credentials: {}", e)) + })?; + + let client = Client::new(config); + + info!( + "Initialized GCS backend with bucket: {} using credentials from: {}", + bucket_name, credentials_path + ); + Ok(Self { + client, + bucket_name, + }) + } + + fn calculate_etag(data: &[u8]) -> String { + use sha2::{Digest, Sha256}; + let mut hasher = Sha256::new(); + hasher.update(data); + hex::encode(hasher.finalize()) + } + + fn gcs_metadata_to_object_metadata( + name: String, + size: i64, + updated: Option, + md5_hash: Option, + content_type: Option, + metadata: HashMap, + ) -> ObjectMetadata { + let last_modified_utc = updated + .and_then(|dt| DateTime::from_timestamp(dt.unix_timestamp(), dt.nanosecond())) + .unwrap_or_else(Utc::now); + + ObjectMetadata { + key: name.clone(), + size: size as u64, + content_type, + last_modified: last_modified_utc, + etag: md5_hash.unwrap_or_else(|| { + use sha2::{Digest, Sha256}; + let mut hasher = Sha256::new(); + hasher.update(name.as_bytes()); + hex::encode(hasher.finalize()) + }), + custom_metadata: metadata, + } + } +} + +#[async_trait] +impl Backend for GcsBackend { + async fn init(&self) -> BackendResult<()> { + match self + .client + .list_objects(&ListObjectsRequest { + bucket: self.bucket_name.clone(), + max_results: Some(1), + ..Default::default() + }) + .await + { + Ok(_) => { + info!("GCS bucket {} is accessible", self.bucket_name); + Ok(()) + } + Err(e) => { + warn!("Failed to access GCS bucket {}: {:?}", self.bucket_name, e); + Err(BackendError::Configuration(format!( + "Cannot access GCS bucket '{}': {}", + self.bucket_name, e + ))) + } + } + } + + async fn put_object( + &self, + key: &str, + mut stream: ByteStream, + content_type: Option, + custom_metadata: HashMap, + ) -> BackendResult { + let key_owned = key.to_string(); + + // Collect stream into bytes while computing hash + let mut hasher = Sha256::new(); + let mut data = Vec::new(); + + while let Some(chunk_result) = stream.next().await { + let chunk = chunk_result + .map_err(|e| BackendError::Provider(format!("Failed to read stream: {}", e)))?; + + hasher.update(&chunk); + data.extend_from_slice(&chunk); + } + + let size = data.len(); + + let upload_type = UploadType::Simple(Media::new(key_owned.clone())); + let request = UploadObjectRequest { + bucket: self.bucket_name.clone(), + ..Default::default() + }; + + match self + .client + .upload_object(&request, data, &upload_type) + .await + { + Ok(object) => { + debug!("Uploaded object to GCS: {} ({} bytes)", key, size); + Ok(Self::gcs_metadata_to_object_metadata( + object.name, + object.size, + object.updated, + object.md5_hash, + content_type, + custom_metadata, + )) + } + Err(e) => { + warn!("Failed to upload object to GCS: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to upload object '{}': {}", + key, e + ))) + } + } + } + + async fn get_object(&self, key: &str) -> BackendResult { + let request = GetObjectRequest { + bucket: self.bucket_name.clone(), + object: key.to_string(), + ..Default::default() + }; + + match self + .client + .download_object(&request, &Range::default()) + .await + { + Ok(data) => { + let size = data.len(); + debug!("Retrieved object from GCS: {} ({} bytes)", key, size); + + // Get metadata + let metadata = match self.head_object(key).await { + Ok(meta) => meta, + Err(_) => ObjectMetadata { + key: key.to_string(), + size: size as u64, + content_type: None, + last_modified: Utc::now(), + etag: Self::calculate_etag(&data), + custom_metadata: HashMap::new(), + }, + }; + + // Convert data to stream + let stream: ByteStream = + Box::pin(futures::stream::once(async move { Ok(Bytes::from(data)) })); + + Ok(ObjectData { metadata, stream }) + } + Err(e) => { + let error_msg = format!("{:?}", e); + if error_msg.contains("404") || error_msg.contains("NotFound") { + Err(BackendError::NotFound(key.to_string())) + } else { + warn!("Failed to get object from GCS: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to get object '{}': {}", + key, e + ))) + } + } + } + } + + async fn head_object(&self, key: &str) -> BackendResult { + let request = GetObjectRequest { + bucket: self.bucket_name.clone(), + object: key.to_string(), + ..Default::default() + }; + + match self.client.get_object(&request).await { + Ok(object) => Ok(Self::gcs_metadata_to_object_metadata( + object.name, + object.size, + object.updated, + object.md5_hash, + object.content_type, + object.metadata.unwrap_or_default(), + )), + Err(e) => { + let error_msg = format!("{:?}", e); + if error_msg.contains("404") || error_msg.contains("NotFound") { + Err(BackendError::NotFound(key.to_string())) + } else { + warn!("Failed to get metadata from GCS: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to get metadata for '{}': {}", + key, e + ))) + } + } + } + } + + async fn delete_object(&self, key: &str) -> BackendResult<()> { + let request = DeleteObjectRequest { + bucket: self.bucket_name.clone(), + object: key.to_string(), + ..Default::default() + }; + + match self.client.delete_object(&request).await { + Ok(_) => { + debug!("Deleted object from GCS: {}", key); + Ok(()) + } + Err(e) => { + warn!("Failed to delete object from GCS: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to delete object '{}': {}", + key, e + ))) + } + } + } + + async fn list_objects( + &self, + prefix: Option<&str>, + max_keys: Option, + ) -> BackendResult> { + let mut request = ListObjectsRequest { + bucket: self.bucket_name.clone(), + ..Default::default() + }; + + if let Some(p) = prefix { + request.prefix = Some(p.to_string()); + } + + if let Some(max) = max_keys { + request.max_results = Some(max as i32); + } + + match self.client.list_objects(&request).await { + Ok(response) => { + let objects: Vec = response + .items + .unwrap_or_default() + .into_iter() + .map(|obj| { + Self::gcs_metadata_to_object_metadata( + obj.name, + obj.size, + obj.updated, + obj.md5_hash, + obj.content_type, + obj.metadata.unwrap_or_default(), + ) + }) + .collect(); + + debug!( + "Listed {} objects from GCS with prefix: {:?}", + objects.len(), + prefix + ); + + Ok(objects) + } + Err(e) => { + let error_msg = format!("{:?}", e); + if error_msg.contains("404") { + Err(BackendError::NotFound(format!( + "bucket:{}", + self.bucket_name + ))) + } else { + warn!("Failed to list objects from GCS: {:?}", e); + Err(BackendError::Provider(format!( + "Failed to list objects: {}", + e + ))) + } + } + } + } + + async fn get_public_url( + &self, + key: &str, + expiration_secs: u64, + purpose: PublicUrlPurpose, + ) -> BackendResult { + let expiration = std::time::Duration::from_secs(expiration_secs); + + use google_cloud_storage::sign::{SignedURLMethod, SignedURLOptions}; + + let method = match purpose { + PublicUrlPurpose::Retrieve => SignedURLMethod::GET, + PublicUrlPurpose::Upload => SignedURLMethod::PUT, + }; + + let url_options = SignedURLOptions { + method, + expires: expiration, + ..Default::default() + }; + + let url_for = self + .client + .signed_url( + &self.bucket_name, + key, + None, // headers + None, // sign_by + url_options, + ) + .await + .map_err(|e| { + warn!( + "Failed to generate signed {:?} URL for GCS object: {}: {:?}", + purpose, key, e + ); + BackendError::Provider(format!( + "Failed to generate signed {:?} URL for '{}': {}", + purpose, key, e + )) + })?; + + debug!( + "Generated signed {:?} URL for GCS object: {} (expires in {} seconds)", + purpose, key, expiration_secs + ); + Ok(url_for) + } +} diff --git a/src/systems/object-storage/service/object-store-backends/src/lib.rs b/src/systems/object-storage/service/object-store-backends/src/lib.rs new file mode 100644 index 000000000..91c952d66 --- /dev/null +++ b/src/systems/object-storage/service/object-store-backends/src/lib.rs @@ -0,0 +1,9 @@ +pub mod azure; +pub mod backend; +pub mod error; +pub mod gcs; +pub mod local; +pub mod s3; + +pub use backend::{Backend, ByteStream, ObjectData, ObjectMetadata, PublicUrlPurpose}; +pub use error::{BackendError, BackendResult}; diff --git a/src/systems/object-storage/service/object-store-backends/src/local.rs b/src/systems/object-storage/service/object-store-backends/src/local.rs new file mode 100644 index 000000000..775fd9232 --- /dev/null +++ b/src/systems/object-storage/service/object-store-backends/src/local.rs @@ -0,0 +1,369 @@ +use async_trait::async_trait; +use chrono::Utc; +use futures::StreamExt; +use sha2::{Digest, Sha256}; +use std::collections::HashMap; +use std::path::{Path, PathBuf}; +use tokio::fs; +use tokio::io::AsyncWriteExt; +use tokio_util::io::ReaderStream; +use tracing::{debug, info}; + +use crate::backend::{Backend, ByteStream, ObjectData, ObjectMetadata, PublicUrlPurpose}; +use crate::error::{BackendError, BackendResult}; + +pub struct LocalBackend { + root_path: PathBuf, + bucket_name: String, +} + +impl LocalBackend { + pub fn new(root_path: PathBuf, bucket_name: String) -> Self { + Self { + root_path, + bucket_name, + } + } + + fn get_full_path(&self, key: &str) -> BackendResult { + if key.contains("..") || key.starts_with('/') { + return Err(BackendError::InvalidPath(format!("Invalid key: {}", key))); + } + + let path = self.root_path.join(&self.bucket_name).join(key); + Ok(path) + } + + fn get_metadata_path(&self, key: &str) -> BackendResult { + let object_path = self.get_full_path(key)?; + Ok(object_path.with_extension("meta.json")) + } + + async fn read_metadata(&self, key: &str) -> BackendResult { + let meta_path = self.get_metadata_path(key)?; + + if !meta_path.exists() { + return Err(BackendError::NotFound(key.to_string())); + } + + let content = fs::read_to_string(&meta_path).await?; + let metadata: ObjectMetadata = serde_json::from_str(&content)?; + Ok(metadata) + } + + async fn write_metadata(&self, metadata: &ObjectMetadata) -> BackendResult<()> { + let meta_path = self.get_metadata_path(&metadata.key)?; + + if let Some(parent) = meta_path.parent() { + fs::create_dir_all(parent).await?; + } + + let content = serde_json::to_string_pretty(metadata)?; + fs::write(&meta_path, content).await?; + Ok(()) + } +} + +#[async_trait] +impl Backend for LocalBackend { + async fn init(&self) -> BackendResult<()> { + let bucket_path = self.root_path.join(&self.bucket_name); + fs::create_dir_all(&bucket_path).await?; + info!("Initialized local backend at {:?}", bucket_path); + Ok(()) + } + + async fn put_object( + &self, + key: &str, + mut stream: ByteStream, + content_type: Option, + custom_metadata: HashMap, + ) -> BackendResult { + debug!("Putting object: {}", key); + + let object_path = self.get_full_path(key)?; + + if let Some(parent) = object_path.parent() { + fs::create_dir_all(parent).await?; + } + + let mut file = fs::File::create(&object_path).await?; + let mut hasher = Sha256::new(); + let mut total_size = 0u64; + + // Stream data to file while computing hash + while let Some(chunk_result) = stream.next().await { + let chunk = chunk_result + .map_err(|e| BackendError::Provider(format!("Failed to read stream: {}", e)))?; + + hasher.update(&chunk); + total_size += chunk.len() as u64; + + file.write_all(&chunk).await?; + } + + file.sync_all().await?; + + let etag = hex::encode(hasher.finalize()); + + let metadata = ObjectMetadata { + key: key.to_string(), + size: total_size, + content_type, + etag: etag.clone(), + last_modified: Utc::now(), + custom_metadata, + }; + + self.write_metadata(&metadata).await?; + + info!( + "Object stored: {} (etag: {}, {} bytes)", + key, etag, total_size + ); + Ok(metadata) + } + + async fn get_object(&self, key: &str) -> BackendResult { + debug!("Getting object: {}", key); + + let object_path = self.get_full_path(key)?; + + if !object_path.exists() { + return Err(BackendError::NotFound(key.to_string())); + } + + let file = fs::File::open(&object_path).await?; + let metadata = self.read_metadata(key).await?; + + // Convert file to stream + let stream: ByteStream = + Box::pin(ReaderStream::new(file).map(|result| result.map_err(std::io::Error::other))); + + Ok(ObjectData { metadata, stream }) + } + + async fn head_object(&self, key: &str) -> BackendResult { + debug!("Getting object metadata: {}", key); + self.read_metadata(key).await + } + + async fn delete_object(&self, key: &str) -> BackendResult<()> { + debug!("Deleting object: {}", key); + + let object_path = self.get_full_path(key)?; + let meta_path = self.get_metadata_path(key)?; + + if !object_path.exists() { + return Err(BackendError::NotFound(key.to_string())); + } + + fs::remove_file(&object_path).await?; + + if meta_path.exists() { + fs::remove_file(&meta_path).await?; + } + + info!("Object deleted: {}", key); + Ok(()) + } + + async fn list_objects( + &self, + prefix: Option<&str>, + max_keys: Option, + ) -> BackendResult> { + debug!("Listing objects with prefix: {:?}", prefix); + + let bucket_path = self.root_path.join(&self.bucket_name); + let mut results = Vec::new(); + + let prefix_str = prefix.unwrap_or(""); + let search_path = if prefix_str.is_empty() { + bucket_path.clone() + } else { + bucket_path.join(prefix_str) + }; + + self.list_recursive( + &bucket_path, + &search_path, + prefix_str, + &mut results, + max_keys, + ) + .await?; + + Ok(results) + } + + async fn get_public_url( + &self, + _key: &str, + _expiration_secs: u64, + _purpose: PublicUrlPurpose, + ) -> BackendResult { + Err(BackendError::Provider( + "Public URL generation is not supported for local backend".to_string(), + )) + } +} + +impl LocalBackend { + fn list_recursive<'a>( + &'a self, + bucket_path: &'a Path, + current_path: &'a Path, + prefix: &'a str, + results: &'a mut Vec, + max_keys: Option, + ) -> std::pin::Pin> + Send + 'a>> { + Box::pin(async move { + if let Some(max) = max_keys { + if results.len() >= max { + return Ok(()); + } + } + + if !current_path.exists() { + return Ok(()); + } + + if current_path.is_file() { + if current_path.extension().and_then(|s| s.to_str()) == Some("json") { + return Ok(()); + } + + if let Ok(relative) = current_path.strip_prefix(bucket_path) { + let key = relative.to_string_lossy().to_string(); + + if key.starts_with(prefix) { + if let Ok(metadata) = self.read_metadata(&key).await { + results.push(metadata); + } + } + } + return Ok(()); + } + + let mut entries = fs::read_dir(current_path).await?; + while let Some(entry) = entries.next_entry().await? { + let path = entry.path(); + + if path.is_dir() { + self.list_recursive(bucket_path, &path, prefix, results, max_keys) + .await?; + } else if !path.to_string_lossy().ends_with(".meta.json") { + if let Some(max) = max_keys { + if results.len() >= max { + break; + } + } + + if let Ok(relative) = path.strip_prefix(bucket_path) { + let key = relative.to_string_lossy().to_string(); + + if key.starts_with(prefix) { + if let Ok(metadata) = self.read_metadata(&key).await { + results.push(metadata); + } + } + } + } + } + + Ok(()) + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use bytes::Bytes; + use tempfile::TempDir; + + #[tokio::test] + async fn test_local_backend_put_get() { + use futures::stream; + + let temp_dir = TempDir::new().unwrap(); + let backend = LocalBackend::new(temp_dir.path().to_path_buf(), "test-bucket".to_string()); + + backend.init().await.unwrap(); + + let data = b"Hello, World!".to_vec(); + let data_clone = data.clone(); + + // Create a stream from the data + let stream: ByteStream = Box::pin(stream::iter(vec![Ok(Bytes::from(data.clone()))])); + + let metadata = backend + .put_object( + "test.txt", + stream, + Some("text/plain".to_string()), + HashMap::new(), + ) + .await + .unwrap(); + + assert_eq!(metadata.key, "test.txt"); + assert_eq!(metadata.size, 13); + + let mut obj = backend.get_object("test.txt").await.unwrap(); + + // Collect stream back to Vec + let mut collected = Vec::new(); + while let Some(chunk) = obj.stream.next().await { + collected.extend_from_slice(&chunk.unwrap()); + } + assert_eq!(collected, data_clone); + } + + #[tokio::test] + async fn test_local_backend_delete() { + use futures::stream; + + let temp_dir = TempDir::new().unwrap(); + let backend = LocalBackend::new(temp_dir.path().to_path_buf(), "test-bucket".to_string()); + + backend.init().await.unwrap(); + + let data = b"Hello, World!".to_vec(); + let stream: ByteStream = Box::pin(stream::iter(vec![Ok(Bytes::from(data))])); + + backend + .put_object( + "test.txt", + stream, + Some("text/plain".to_string()), + HashMap::new(), + ) + .await + .unwrap(); + + backend.delete_object("test.txt").await.unwrap(); + + let result = backend.get_object("test.txt").await; + assert!(matches!(result, Err(BackendError::NotFound(_)))); + } + + #[tokio::test] + async fn test_path_traversal_prevention() { + use futures::stream; + + let temp_dir = TempDir::new().unwrap(); + let backend = LocalBackend::new(temp_dir.path().to_path_buf(), "test-bucket".to_string()); + + backend.init().await.unwrap(); + + let stream: ByteStream = Box::pin(stream::iter(vec![Ok(Bytes::from(vec![1, 2, 3]))])); + + let result = backend + .put_object("../etc/passwd", stream, None, HashMap::new()) + .await; + assert!(matches!(result, Err(BackendError::InvalidPath(_)))); + } +} diff --git a/src/systems/object-storage/service/object-store-backends/src/s3.rs b/src/systems/object-storage/service/object-store-backends/src/s3.rs new file mode 100644 index 000000000..5fd8f84e3 --- /dev/null +++ b/src/systems/object-storage/service/object-store-backends/src/s3.rs @@ -0,0 +1,426 @@ +use async_trait::async_trait; +use aws_config::meta::region::RegionProviderChain; +use aws_config::BehaviorVersion; +use aws_sdk_s3::config::Region; +use aws_sdk_s3::presigning::PresigningConfig; +use aws_sdk_s3::primitives::ByteStream as AwsByteStream; +use aws_sdk_s3::Client; +use chrono::{DateTime, Utc}; +use futures::StreamExt; +use std::collections::HashMap; +use std::time::Duration; +use tokio_util::io::ReaderStream; +use tracing::{debug, info, warn}; + +use crate::backend::{Backend, ByteStream, ObjectData, ObjectMetadata, PublicUrlPurpose}; +use crate::error::{BackendError, BackendResult}; + +pub struct S3Backend { + client: Client, + bucket_name: String, +} + +impl S3Backend { + pub async fn new(bucket_name: String) -> BackendResult { + let config = aws_config::defaults(BehaviorVersion::latest()).load().await; + let client = Client::new(&config); + + info!("Initialized S3 backend with bucket: {}", bucket_name); + Ok(Self { + client, + bucket_name, + }) + } + + pub async fn new_with_config( + bucket_name: String, + region: String, + endpoint: Option, + ) -> BackendResult { + let region_provider = RegionProviderChain::first_try(Region::new(region)); + + let mut config_loader = + aws_config::defaults(BehaviorVersion::latest()).region(region_provider); + + if let Some(endpoint_url) = endpoint { + config_loader = config_loader.endpoint_url(&endpoint_url); + info!( + "Using custom S3 endpoint: {} for bucket: {}", + endpoint_url, bucket_name + ); + } + + let config = config_loader.load().await; + let client = Client::new(&config); + + info!("Initialized S3 backend with bucket: {}", bucket_name); + Ok(Self { + client, + bucket_name, + }) + } + + fn s3_metadata_to_object_metadata( + key: String, + size: i64, + last_modified: Option>, + etag: Option, + content_type: Option, + metadata: HashMap, + ) -> ObjectMetadata { + ObjectMetadata { + key: key.clone(), + size: size as u64, + content_type, + etag: etag.unwrap_or_else(|| { + use sha2::{Digest, Sha256}; + let mut hasher = Sha256::new(); + hasher.update(key.as_bytes()); + hex::encode(hasher.finalize()) + }), + last_modified: last_modified.unwrap_or_else(Utc::now), + custom_metadata: metadata, + } + } +} + +#[async_trait] +impl Backend for S3Backend { + async fn init(&self) -> BackendResult<()> { + match self + .client + .head_bucket() + .bucket(&self.bucket_name) + .send() + .await + { + Ok(_) => { + info!("S3 bucket {} is accessible", self.bucket_name); + Ok(()) + } + Err(e) => { + warn!("Failed to access S3 bucket {}: {:?}", self.bucket_name, e); + Err(BackendError::Configuration(format!( + "Cannot access S3 bucket '{}': {}", + self.bucket_name, e + ))) + } + } + } + + async fn put_object( + &self, + key: &str, + mut stream: ByteStream, + content_type: Option, + custom_metadata: HashMap, + ) -> BackendResult { + use sha2::{Digest, Sha256}; + + // Collect stream into bytes while computing hash + let mut hasher = Sha256::new(); + let mut data = Vec::new(); + + while let Some(chunk_result) = stream.next().await { + let chunk = chunk_result + .map_err(|e| BackendError::Provider(format!("Failed to read stream: {}", e)))?; + + hasher.update(&chunk); + data.extend_from_slice(&chunk); + } + + let size = data.len(); + let etag = hex::encode(hasher.finalize()); + + // Convert to AWS ByteStream + let body = AwsByteStream::from(data); + + let mut request = self + .client + .put_object() + .bucket(&self.bucket_name) + .key(key) + .body(body); + + if let Some(ct) = content_type.as_ref() { + request = request.content_type(ct); + } + + for (k, v) in custom_metadata.iter() { + request = request.metadata(k.clone(), v.clone()); + } + + match request.send().await { + Ok(output) => { + debug!("Uploaded object to S3: {} ({} bytes)", key, size); + Ok(ObjectMetadata { + key: key.to_string(), + size: size as u64, + content_type, + last_modified: Utc::now(), + etag: output.e_tag().map(|s| s.to_string()).unwrap_or(etag), + custom_metadata, + }) + } + Err(e) => { + warn!("Failed to upload object to S3: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to upload object '{}': {}", + key, e + ))) + } + } + } + + async fn get_object(&self, key: &str) -> BackendResult { + match self + .client + .get_object() + .bucket(&self.bucket_name) + .key(key) + .send() + .await + { + Ok(output) => { + let content_type = output.content_type().map(|s| s.to_string()); + let etag = output.e_tag().map(|s| s.to_string()); + let size = output.content_length().unwrap_or(0) as u64; + + let metadata_map = output + .metadata() + .map(|m| m.iter().map(|(k, v)| (k.clone(), v.clone())).collect()) + .unwrap_or_default(); + + let last_modified = output + .last_modified() + .and_then(|dt| DateTime::parse_from_rfc3339(&dt.to_string()).ok()) + .map(|dt| dt.with_timezone(&Utc)); + + debug!("Retrieved object from S3: {} ({} bytes)", key, size); + + // Convert AWS ByteStream to our ByteStream via AsyncRead + let async_read = output.body.into_async_read(); + let stream: ByteStream = Box::pin( + ReaderStream::new(async_read) + .map(|result| result.map_err(std::io::Error::other)), + ); + + Ok(ObjectData { + metadata: Self::s3_metadata_to_object_metadata( + key.to_string(), + size as i64, + last_modified, + etag, + content_type, + metadata_map, + ), + stream, + }) + } + Err(e) => { + let error_msg = format!("{:?}", e); + if error_msg.contains("NoSuchKey") || error_msg.contains("NotFound") { + Err(BackendError::NotFound(key.to_string())) + } else { + warn!("Failed to get object from S3: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to get object '{}': {}", + key, e + ))) + } + } + } + } + + async fn head_object(&self, key: &str) -> BackendResult { + match self + .client + .head_object() + .bucket(&self.bucket_name) + .key(key) + .send() + .await + { + Ok(output) => { + let size = output.content_length().unwrap_or(0); + let content_type = output.content_type().map(|s| s.to_string()); + let etag = output.e_tag().map(|s| s.to_string()); + + let metadata = output + .metadata() + .map(|m| m.iter().map(|(k, v)| (k.clone(), v.clone())).collect()) + .unwrap_or_default(); + + let last_modified = output + .last_modified() + .and_then(|dt| DateTime::parse_from_rfc3339(&dt.to_string()).ok()) + .map(|dt| dt.with_timezone(&Utc)); + + Ok(Self::s3_metadata_to_object_metadata( + key.to_string(), + size, + last_modified, + etag, + content_type, + metadata, + )) + } + Err(e) => { + let error_msg = format!("{:?}", e); + if error_msg.contains("NotFound") { + Err(BackendError::NotFound(key.to_string())) + } else { + Err(BackendError::Provider(format!( + "Failed to get metadata for '{}': {}", + key, e + ))) + } + } + } + } + + async fn delete_object(&self, key: &str) -> BackendResult<()> { + match self + .client + .delete_object() + .bucket(&self.bucket_name) + .key(key) + .send() + .await + { + Ok(_) => { + debug!("Deleted object from S3: {}", key); + Ok(()) + } + Err(e) => { + warn!("Failed to delete object from S3: {}: {:?}", key, e); + Err(BackendError::Provider(format!( + "Failed to delete object '{}': {}", + key, e + ))) + } + } + } + + async fn list_objects( + &self, + prefix: Option<&str>, + max_keys: Option, + ) -> BackendResult> { + let mut request = self.client.list_objects_v2().bucket(&self.bucket_name); + + if let Some(p) = prefix { + request = request.prefix(p); + } + + if let Some(max) = max_keys { + request = request.max_keys(max as i32); + } + + match request.send().await { + Ok(output) => { + let objects = output + .contents() + .iter() + .filter_map(|obj| { + let key = obj.key()?.to_string(); + let size = obj.size().unwrap_or(0); + let etag = obj.e_tag().map(|s| s.to_string()); + + let last_modified = obj + .last_modified() + .and_then(|dt| DateTime::parse_from_rfc3339(&dt.to_string()).ok()) + .map(|dt| dt.with_timezone(&Utc)); + + Some(Self::s3_metadata_to_object_metadata( + key, + size, + last_modified, + etag, + None, + HashMap::new(), + )) + }) + .collect(); + + debug!( + "Listed {} objects from S3 with prefix: {:?}", + output.key_count().unwrap_or(0), + prefix + ); + + Ok(objects) + } + Err(e) => { + let error_msg = format!("{:?}", e); + if error_msg.contains("NoSuchBucket") { + Err(BackendError::NotFound(format!( + "bucket:{}", + self.bucket_name + ))) + } else { + warn!("Failed to list objects from S3: {:?}", e); + Err(BackendError::Provider(format!( + "Failed to list objects: {}", + e + ))) + } + } + } + } + + async fn get_public_url( + &self, + key: &str, + expiration_secs: u64, + purpose: PublicUrlPurpose, + ) -> BackendResult { + let presigning_config = PresigningConfig::expires_in(Duration::from_secs(expiration_secs)) + .map_err(|e| { + BackendError::Provider(format!("Failed to create presigning config: {}", e)) + })?; + + let presigned_request = match purpose { + PublicUrlPurpose::Retrieve => self + .client + .get_object() + .bucket(&self.bucket_name) + .key(key) + .presigned(presigning_config) + .await + .map_err(|e| { + warn!( + "Failed to generate presigned GET URL for S3 object: {}: {:?}", + key, e + ); + BackendError::Provider(format!( + "Failed to generate presigned GET URL for '{}': {}", + key, e + )) + })?, + PublicUrlPurpose::Upload => self + .client + .put_object() + .bucket(&self.bucket_name) + .key(key) + .presigned(presigning_config) + .await + .map_err(|e| { + warn!( + "Failed to generate presigned PUT URL for S3 object: {}: {:?}", + key, e + ); + BackendError::Provider(format!( + "Failed to generate presigned PUT URL for '{}': {}", + key, e + )) + })?, + }; + + debug!( + "Generated presigned {:?} URL for S3 object: {} (expires in {} seconds)", + purpose, key, expiration_secs + ); + Ok(presigned_request.uri().to_string()) + } +} diff --git a/src/systems/object-storage/service/object-store/Cargo.toml b/src/systems/object-storage/service/object-store/Cargo.toml new file mode 100644 index 000000000..99f78e289 --- /dev/null +++ b/src/systems/object-storage/service/object-store/Cargo.toml @@ -0,0 +1,41 @@ +[package] +name = "object-store" +version.workspace = true +edition.workspace = true +authors.workspace = true +license.workspace = true + +[[bin]] +name = "object-store-service" +path = "src/main.rs" + +[dependencies] +object-store-backends = { path = "../object-store-backends" } + +tokio = { workspace = true } +async-trait = { workspace = true } +axum = { workspace = true } +tower = { workspace = true } +tower-http = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +anyhow = { workspace = true } +thiserror = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } +uuid = { workspace = true } +chrono = { workspace = true } +mime_guess = { workspace = true } +futures = "0.3" +bytes = "1.5" + +# Configuration +config = "0.14" + +# HTTP client for health checks +reqwest = "0.11" + +[dev-dependencies] +tempfile = "3.8" +mockall = { workspace = true } +futures = "0.3" diff --git a/src/systems/object-storage/service/object-store/src/api.rs b/src/systems/object-storage/service/object-store/src/api.rs new file mode 100644 index 000000000..c80f8927a --- /dev/null +++ b/src/systems/object-storage/service/object-store/src/api.rs @@ -0,0 +1,341 @@ +use axum::body::Body; +use axum::extract::{Path, Query, State}; +use axum::http::{HeaderMap, StatusCode}; +use axum::response::{IntoResponse, Response}; +use axum::Json; +use futures::StreamExt; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::sync::Arc; + +use crate::error::ServiceResult; +use crate::metadata::Bucket; +use crate::service::ObjectStoreService; + +pub type SharedService = Arc; + +#[derive(Debug, Serialize, Deserialize)] +pub struct CreateBucketRequest { + pub name: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct BucketResponse { + pub id: String, + pub name: String, + pub created_at: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ListBucketsResponse { + pub buckets: Vec, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ObjectMetadataResponse { + pub key: String, + pub size: u64, + pub content_type: Option, + pub etag: String, + pub last_modified: String, + pub metadata: HashMap, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ListObjectsResponse { + pub objects: Vec, +} + +#[derive(Debug, Deserialize)] +pub struct ListObjectsQuery { + pub prefix: Option, + pub max_keys: Option, +} + +#[derive(Debug, Deserialize)] +pub struct GetPublicUrlQuery { + pub expiration_secs: Option, + pub purpose: Option, +} + +#[derive(Debug, Serialize)] +pub struct PublicUrlResponse { + pub url: String, + pub expires_in: u64, +} + +impl From for BucketResponse { + fn from(bucket: Bucket) -> Self { + Self { + id: bucket.id, + name: bucket.name, + created_at: bucket.created_at, + } + } +} + +impl From for ObjectMetadataResponse { + fn from(metadata: object_store_backends::ObjectMetadata) -> Self { + Self { + key: metadata.key, + size: metadata.size, + content_type: metadata.content_type, + etag: metadata.etag, + last_modified: metadata.last_modified.to_rfc3339(), + metadata: metadata.custom_metadata, + } + } +} + +pub async fn health_check() -> impl IntoResponse { + Json(serde_json::json!({ + "status": "healthy", + "service": "object-store" + })) +} + +pub async fn create_bucket( + State(service): State, + Json(payload): Json, +) -> ServiceResult> { + let bucket = service.create_bucket(&payload.name).await?; + Ok(Json(bucket.into())) +} + +pub async fn upsert_bucket( + State(service): State, + Json(payload): Json, +) -> ServiceResult> { + let bucket = service.upsert_bucket(&payload.name).await?; + Ok(Json(bucket.into())) +} + +pub async fn list_buckets( + State(service): State, +) -> ServiceResult> { + let buckets = service.list_buckets().await?; + let response = ListBucketsResponse { + buckets: buckets.into_iter().map(|b| b.into()).collect(), + }; + Ok(Json(response)) +} + +pub async fn get_bucket_by_id( + State(service): State, + Path(id): Path, +) -> ServiceResult> { + let bucket = service.get_bucket_by_id(&id).await?; + Ok(Json(bucket.into())) +} + +pub async fn delete_bucket( + State(service): State, + Path(bucket): Path, +) -> ServiceResult { + service.delete_bucket(&bucket).await?; + Ok(StatusCode::NO_CONTENT) +} + +pub async fn put_object( + State(service): State, + Path((bucket, key)): Path<(String, String)>, + headers: HeaderMap, + body: Body, +) -> ServiceResult> { + // Extract content type from headers + let content_type = headers + .get("content-type") + .and_then(|v| v.to_str().ok()) + .map(|s| s.to_string()) + .or_else(|| { + // Try to guess content type from file extension + mime_guess::from_path(&key).first().map(|m| m.to_string()) + }); + + // Extract custom metadata from headers (x-amz-meta-* pattern) + let mut metadata = HashMap::new(); + for (header_key, value) in headers.iter() { + if let Some(meta_key) = header_key.as_str().strip_prefix("x-object-meta-") { + if let Ok(meta_value) = value.to_str() { + metadata.insert(meta_key.to_string(), meta_value.to_string()); + } + } + } + + let stream: object_store_backends::ByteStream = Box::pin( + body.into_data_stream() + .map(|result| result.map_err(std::io::Error::other)), + ); + + let obj_metadata = service + .put_object(&bucket, &key, stream, content_type, metadata) + .await?; + + Ok(Json(obj_metadata.into())) +} + +pub async fn get_object( + State(service): State, + Path((bucket, key)): Path<(String, String)>, +) -> ServiceResult { + let obj_data = service.get_object(&bucket, &key).await?; + + let mut headers = HeaderMap::new(); + + if let Some(ct) = obj_data.metadata.content_type { + if let Ok(header_value) = ct.parse() { + headers.insert("content-type", header_value); + } + } + + headers.insert( + "etag", + obj_data + .metadata + .etag + .parse() + .unwrap_or_else(|_| "unknown".parse().unwrap()), + ); + + headers.insert( + "last-modified", + obj_data + .metadata + .last_modified + .to_rfc2822() + .parse() + .unwrap_or_else(|_| "unknown".parse().unwrap()), + ); + + headers.insert( + "content-length", + obj_data + .metadata + .size + .to_string() + .parse() + .unwrap_or_else(|_| "0".parse().unwrap()), + ); + + // Add custom metadata as x-object-meta-* headers + for (key, value) in obj_data.metadata.custom_metadata.iter() { + let header_name = format!("x-object-meta-{}", key); + if let Ok(header_value) = value.parse() { + if let Ok(header_name) = header_name.parse::() { + headers.insert(header_name, header_value); + } + } + } + + let body = Body::from_stream(obj_data.stream); + + Ok((headers, body).into_response()) +} + +pub async fn get_object_info( + State(service): State, + Path((bucket, key)): Path<(String, String)>, +) -> ServiceResult> { + let metadata = service.head_object(&bucket, &key).await?; + Ok(Json(metadata.into())) +} + +pub async fn head_object( + State(service): State, + Path((bucket, key)): Path<(String, String)>, +) -> ServiceResult { + let metadata = service.head_object(&bucket, &key).await?; + + let mut headers = HeaderMap::new(); + + if let Some(ct) = metadata.content_type { + if let Ok(header_value) = ct.parse() { + headers.insert("content-type", header_value); + } + } + + headers.insert( + "etag", + metadata + .etag + .parse() + .unwrap_or_else(|_| "unknown".parse().unwrap()), + ); + + headers.insert( + "last-modified", + metadata + .last_modified + .to_rfc2822() + .parse() + .unwrap_or_else(|_| "unknown".parse().unwrap()), + ); + + headers.insert( + "content-length", + metadata + .size + .to_string() + .parse() + .unwrap_or_else(|_| "0".parse().unwrap()), + ); + + // Add custom metadata as x-object-meta-* headers + for (key, value) in metadata.custom_metadata.iter() { + let header_name = format!("x-object-meta-{}", key); + if let Ok(header_value) = value.parse() { + if let Ok(header_name) = header_name.parse::() { + headers.insert(header_name, header_value); + } + } + } + + Ok((StatusCode::OK, headers).into_response()) +} + +pub async fn delete_object( + State(service): State, + Path((bucket, key)): Path<(String, String)>, +) -> ServiceResult { + service.delete_object(&bucket, &key).await?; + Ok(StatusCode::NO_CONTENT) +} + +pub async fn list_objects( + State(service): State, + Path(bucket): Path, + Query(params): Query, +) -> ServiceResult> { + let objects = service + .list_objects(&bucket, params.prefix.as_deref(), params.max_keys) + .await?; + + let response = ListObjectsResponse { + objects: objects.into_iter().map(|o| o.into()).collect(), + }; + + Ok(Json(response)) +} + +pub async fn get_public_url( + State(service): State, + Path((bucket, key)): Path<(String, String)>, + Query(params): Query, +) -> ServiceResult> { + // Default expiration is 1 hour (3600 seconds) + let expiration_secs = params.expiration_secs.unwrap_or(3600); + + // Default purpose is retrieve + let purpose = params + .purpose + .unwrap_or(object_store_backends::PublicUrlPurpose::Retrieve); + + let url = service + .get_public_url(&bucket, &key, expiration_secs, purpose) + .await?; + + Ok(Json(PublicUrlResponse { + url, + expires_in: expiration_secs, + })) +} diff --git a/src/systems/object-storage/service/object-store/src/config.rs b/src/systems/object-storage/service/object-store/src/config.rs new file mode 100644 index 000000000..15bc21688 --- /dev/null +++ b/src/systems/object-storage/service/object-store/src/config.rs @@ -0,0 +1,85 @@ +use serde::{Deserialize, Serialize}; +use std::path::PathBuf; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + pub server: ServerConfig, + pub backend: BackendConfig, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ServerConfig { + #[serde(default = "default_host")] + pub host: String, + #[serde(default = "default_port")] + pub port: u16, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "type", rename_all = "lowercase")] +pub enum BackendConfig { + Local { + root_path: PathBuf, + #[serde(default = "default_physical_bucket")] + physical_bucket: String, + }, + S3 { + region: String, + physical_bucket: String, + endpoint: Option, + }, + Gcs { + physical_bucket: String, + }, + Azure { + account: String, + access_key: String, + physical_bucket: String, + }, +} + +fn default_host() -> String { + "127.0.0.1".to_string() +} + +fn default_port() -> u16 { + 8080 +} + +fn default_physical_bucket() -> String { + "object-store-data".to_string() +} + +impl Default for Config { + fn default() -> Self { + Self { + server: ServerConfig { + host: default_host(), + port: default_port(), + }, + backend: BackendConfig::Local { + root_path: PathBuf::from("./data"), + physical_bucket: default_physical_bucket(), + }, + } + } +} + +impl Config { + pub fn from_file(path: &str) -> Result { + let settings = config::Config::builder() + .add_source(config::File::with_name(path)) + .add_source(config::Environment::with_prefix("OBJECT_STORE").separator("__")) + .build()?; + + settings.try_deserialize() + } + + pub fn from_env() -> Result { + let settings = config::Config::builder() + .add_source(config::Environment::with_prefix("OBJECT_STORE").separator("__")) + .build()?; + + settings.try_deserialize() + } +} diff --git a/src/systems/object-storage/service/object-store/src/error.rs b/src/systems/object-storage/service/object-store/src/error.rs new file mode 100644 index 000000000..6a17f6c87 --- /dev/null +++ b/src/systems/object-storage/service/object-store/src/error.rs @@ -0,0 +1,71 @@ +use axum::http::StatusCode; +use axum::response::{IntoResponse, Response}; +use axum::Json; +use serde_json::json; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum ServiceError { + #[error("Backend error: {0}")] + Backend(#[from] object_store_backends::BackendError), + + #[error("Bucket not found: {0}")] + BucketNotFound(String), + + #[error("Bucket already exists: {0}")] + BucketAlreadyExists(String), + + #[error("Object not found: {0}")] + ObjectNotFound(String), + + #[error("Invalid bucket name: {0}")] + InvalidBucketName(String), + + #[error("Invalid object key: {0}")] + InvalidObjectKey(String), + + #[error("Database error: {0}")] + Database(String), + + #[error("Configuration error: {0}")] + Configuration(String), + + #[error("Internal error: {0}")] + Internal(String), + + #[error("Lock acquisition error: {0}")] + LockAcquisition(String), +} + +impl From for ServiceError { + fn from(err: serde_json::Error) -> Self { + ServiceError::Internal(format!("JSON error: {}", err)) + } +} + +impl IntoResponse for ServiceError { + fn into_response(self) -> Response { + let (status, error_message) = match self { + ServiceError::BucketNotFound(_) | ServiceError::ObjectNotFound(_) => { + (StatusCode::NOT_FOUND, self.to_string()) + } + ServiceError::BucketAlreadyExists(_) => (StatusCode::CONFLICT, self.to_string()), + ServiceError::InvalidBucketName(_) | ServiceError::InvalidObjectKey(_) => { + (StatusCode::BAD_REQUEST, self.to_string()) + } + ServiceError::Backend(object_store_backends::BackendError::NotFound(key)) => { + (StatusCode::NOT_FOUND, format!("Object not found: {}", key)) + } + ServiceError::Backend(_) => (StatusCode::INTERNAL_SERVER_ERROR, self.to_string()), + _ => (StatusCode::INTERNAL_SERVER_ERROR, self.to_string()), + }; + + let body = Json(json!({ + "error": error_message, + })); + + (status, body).into_response() + } +} + +pub type ServiceResult = Result; diff --git a/src/systems/object-storage/service/object-store/src/lib.rs b/src/systems/object-storage/service/object-store/src/lib.rs new file mode 100644 index 000000000..becd0c71c --- /dev/null +++ b/src/systems/object-storage/service/object-store/src/lib.rs @@ -0,0 +1,10 @@ +pub mod api; +pub mod config; +pub mod error; +pub mod metadata; +pub mod router; +pub mod service; + +pub use config::Config; +pub use error::{ServiceError, ServiceResult}; +pub use service::ObjectStoreService; diff --git a/src/systems/object-storage/service/object-store/src/main.rs b/src/systems/object-storage/service/object-store/src/main.rs new file mode 100644 index 000000000..76325ac3e --- /dev/null +++ b/src/systems/object-storage/service/object-store/src/main.rs @@ -0,0 +1,91 @@ +use object_store::{Config, ObjectStoreService}; +use object_store_backends::{ + azure::AzureBackend, gcs::GcsBackend, local::LocalBackend, s3::S3Backend, Backend, +}; +use std::sync::Arc; +use tracing::info; +use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; + +use object_store::metadata::MetadataStore; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + tracing_subscriber::registry() + .with( + tracing_subscriber::EnvFilter::try_from_default_env() + .unwrap_or_else(|_| "object_store=debug,tower_http=debug".into()), + ) + .with(tracing_subscriber::fmt::layer()) + .init(); + + let config = if let Ok(config_path) = std::env::var("CONFIG_PATH") { + Config::from_file(&config_path)? + } else { + Config::from_env().unwrap_or_else(|_| Config::default()) + }; + + info!("Starting object storage service with config: {:?}", config); + + let backend: Arc = match config.backend { + object_store::config::BackendConfig::Local { + root_path, + physical_bucket, + } => { + info!("Using local backend at {:?}", root_path); + Arc::new(LocalBackend::new(root_path, physical_bucket)) + } + object_store::config::BackendConfig::S3 { + region, + physical_bucket, + endpoint, + } => { + info!( + "Using S3 backend with bucket: {}, region: {}, endpoint: {:?}", + physical_bucket, region, endpoint + ); + Arc::new(S3Backend::new_with_config(physical_bucket, region, endpoint).await?) + } + object_store::config::BackendConfig::Gcs { physical_bucket } => { + info!("Using GCS backend with bucket: {}", physical_bucket); + Arc::new(GcsBackend::new(physical_bucket).await?) + } + object_store::config::BackendConfig::Azure { + account, + access_key, + physical_bucket, + } => { + info!( + "Using Azure backend with account: {}, container: {}", + account, physical_bucket + ); + Arc::new(AzureBackend::new(account, access_key, physical_bucket)?) + } + }; + + backend.init().await?; + + let metadata = Arc::new(MetadataStore::new(backend.clone()).await?); + let service = Arc::new(ObjectStoreService::new(backend, metadata.clone())); + + let metadata_clone = metadata.clone(); + tokio::spawn(async move { + let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(60)); + loop { + interval.tick().await; + if let Err(e) = metadata_clone.cleanup_expired_locks().await { + tracing::error!("Failed to cleanup expired locks: {}", e); + } + } + }); + + let app = object_store::router::create_router(service); + + let addr = format!("{}:{}", config.server.host, config.server.port); + let listener = tokio::net::TcpListener::bind(&addr).await?; + + info!("Object storage service listening on {}", addr); + + axum::serve(listener, app).await?; + + Ok(()) +} diff --git a/src/systems/object-storage/service/object-store/src/metadata.rs b/src/systems/object-storage/service/object-store/src/metadata.rs new file mode 100644 index 000000000..c51f9d57f --- /dev/null +++ b/src/systems/object-storage/service/object-store/src/metadata.rs @@ -0,0 +1,536 @@ +use bytes::Bytes; +use chrono::{DateTime, Utc}; +use futures::StreamExt; +use object_store_backends::{Backend, BackendError}; +use serde::{Deserialize, Serialize}; +use std::collections::hash_map::DefaultHasher; +use std::collections::HashMap; +use std::hash::{Hash, Hasher}; +use std::sync::Arc; +use tokio::sync::RwLock; +use tracing::{debug, info, warn}; + +use crate::error::{ServiceError, ServiceResult}; + +const BUCKETS_PREFIX: &str = ".metadata/buckets"; +const LOCKS_PREFIX: &str = ".metadata/locks"; +const CACHE_TTL_SECONDS: i64 = 60; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Bucket { + pub id: String, + pub name: String, + pub created_at: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct Lock { + resource: String, + owner: String, + acquired_at: DateTime, + expires_at: DateTime, +} + +#[derive(Debug, Clone)] +struct BucketCache { + buckets: HashMap, + last_refresh: DateTime, +} + +impl BucketCache { + fn new() -> Self { + Self { + buckets: HashMap::new(), + last_refresh: Utc::now() - chrono::Duration::seconds(CACHE_TTL_SECONDS + 1), + } + } + + fn is_expired(&self) -> bool { + let age = Utc::now() - self.last_refresh; + age.num_seconds() > CACHE_TTL_SECONDS + } + + fn update(&mut self, buckets: Vec) { + self.buckets.clear(); + for bucket in buckets { + self.buckets.insert(bucket.name.clone(), bucket); + } + self.last_refresh = Utc::now(); + } + + fn get(&self, name: &str) -> Option<&Bucket> { + self.buckets.get(name) + } + + fn insert(&mut self, bucket: Bucket) { + self.buckets.insert(bucket.name.clone(), bucket); + } + + fn remove(&mut self, name: &str) -> Option { + self.buckets.remove(name) + } + + fn all_buckets(&self) -> Vec { + self.buckets.values().cloned().collect() + } +} + +pub struct MetadataStore { + backend: Arc, + cache: Arc>, +} + +impl MetadataStore { + pub async fn new(backend: Arc) -> ServiceResult { + let store = Self { + backend, + cache: Arc::new(RwLock::new(BucketCache::new())), + }; + + store.refresh_cache().await?; + + info!("Initialized metadata store (folder-based with caching)"); + Ok(store) + } + + fn bucket_key(name: &str) -> String { + format!("{}/{}.json", BUCKETS_PREFIX, name) + } + + fn generate_bucket_id(name: &str) -> String { + let mut hasher = DefaultHasher::new(); + name.hash(&mut hasher); + let hash = hasher.finish(); + + format!("bucket-{:016x}", hash) + } + + async fn load_buckets_from_backend(&self) -> ServiceResult> { + match self.backend.list_objects(Some(BUCKETS_PREFIX), None).await { + Ok(objects) => { + let mut buckets = Vec::new(); + let mut errors = 0; + + for obj in objects { + match self.backend.get_object(&obj.key).await { + Ok(mut obj_data) => { + // Collect stream to bytes + let mut data = Vec::new(); + while let Some(chunk) = obj_data.stream.next().await { + if let Ok(bytes) = chunk { + data.extend_from_slice(&bytes); + } + } + + match serde_json::from_slice::(&data) { + Ok(bucket) => buckets.push(bucket), + Err(e) => { + warn!("Failed to parse bucket {}: {}", obj.key, e); + errors += 1; + } + } + } + Err(e) => { + warn!("Failed to read bucket object {}: {:?}", obj.key, e); + errors += 1; + } + } + } + + if errors > 0 { + warn!("Loaded {} buckets with {} errors", buckets.len(), errors); + } + + if errors > 0 && buckets.is_empty() { + return Err(ServiceError::Internal(format!( + "Failed to load any buckets ({} errors)", + errors + ))); + } + + Ok(buckets) + } + Err(BackendError::NotFound(_)) => { + // No buckets yet + Ok(Vec::new()) + } + Err(e) => Err(ServiceError::Backend(e)), + } + } + + async fn refresh_cache(&self) -> ServiceResult<()> { + let buckets = self.load_buckets_from_backend().await?; + let mut cache = self.cache.write().await; + cache.update(buckets); + debug!("Refreshed bucket cache ({} buckets)", cache.buckets.len()); + Ok(()) + } + + async fn ensure_cache_fresh(&self) -> ServiceResult<()> { + let cache = self.cache.read().await; + if cache.is_expired() { + drop(cache); // Release read lock + self.refresh_cache().await?; + } + Ok(()) + } + + async fn load_bucket_from_backend(&self, name: &str) -> ServiceResult> { + let key = Self::bucket_key(name); + match self.backend.get_object(&key).await { + Ok(mut obj_data) => { + // Collect stream to bytes + let mut data = Vec::new(); + while let Some(chunk) = obj_data.stream.next().await { + let chunk = chunk.map_err(|e| ServiceError::Internal(e.to_string()))?; + data.extend_from_slice(&chunk); + } + + let bucket: Bucket = serde_json::from_slice(&data)?; + Ok(Some(bucket)) + } + Err(BackendError::NotFound(_)) => Ok(None), + Err(e) => Err(ServiceError::Backend(e)), + } + } + + async fn save_bucket(&self, bucket: &Bucket) -> ServiceResult<()> { + let key = Self::bucket_key(&bucket.name); + let data = serde_json::to_vec(bucket)?; + + // Convert Vec to stream + let stream: object_store_backends::ByteStream = + Box::pin(futures::stream::once(async move { Ok(Bytes::from(data)) })); + + self.backend + .put_object( + &key, + stream, + Some("application/json".to_string()), + HashMap::new(), + ) + .await?; + + Ok(()) + } + + async fn delete_bucket_object(&self, name: &str) -> ServiceResult<()> { + let key = Self::bucket_key(name); + self.backend.delete_object(&key).await?; + Ok(()) + } + + pub async fn create_bucket(&self, name: &str) -> ServiceResult { + if !is_valid_bucket_name(name) { + return Err(ServiceError::InvalidBucketName(format!( + "Invalid bucket name: {}", + name + ))); + } + + let bucket = Bucket { + id: Self::generate_bucket_id(name), + name: name.to_string(), + created_at: Utc::now().to_rfc3339(), + }; + + { + let cache = self.cache.read().await; + if cache.get(name).is_some() { + return Err(ServiceError::BucketAlreadyExists(name.to_string())); + } + } + + if let Some(_existing) = self.load_bucket_from_backend(name).await? { + let mut cache = self.cache.write().await; + if let Some(existing) = self.load_bucket_from_backend(name).await? { + cache.insert(existing); + } + + return Err(ServiceError::BucketAlreadyExists(name.to_string())); + } + + self.save_bucket(&bucket).await?; + + { + let mut cache = self.cache.write().await; + cache.insert(bucket.clone()); + } + + info!("Bucket created: {} (id: {})", name, bucket.id); + Ok(bucket) + } + + pub async fn get_bucket(&self, name: &str) -> ServiceResult { + // Try cache first + { + let cache = self.cache.read().await; + if let Some(bucket) = cache.get(name) { + return Ok(bucket.clone()); + } + } + + // Not in cache - try direct backend lookup + debug!("Bucket {} not in cache, checking backend", name); + if let Some(bucket) = self.load_bucket_from_backend(name).await? { + // Update cache with discovered bucket + let mut cache = self.cache.write().await; + cache.insert(bucket.clone()); + return Ok(bucket); + } + + // Still not found - refresh entire cache and try again + debug!("Bucket {} not found, refreshing cache", name); + self.refresh_cache().await?; + + let cache = self.cache.read().await; + cache + .get(name) + .cloned() + .ok_or_else(|| ServiceError::BucketNotFound(name.to_string())) + } + + pub async fn get_bucket_by_id(&self, id: &str) -> ServiceResult { + // Ensure cache is fresh + self.ensure_cache_fresh().await?; + + // Search cache for bucket by ID + { + let cache = self.cache.read().await; + for bucket in cache.all_buckets() { + if bucket.id == id { + return Ok(bucket); + } + } + } + + // Not found in cache - refresh and try again + self.refresh_cache().await?; + + let cache = self.cache.read().await; + for bucket in cache.all_buckets() { + if bucket.id == id { + return Ok(bucket); + } + } + + Err(ServiceError::BucketNotFound(format!("id: {}", id))) + } + + pub async fn list_buckets(&self) -> ServiceResult> { + self.ensure_cache_fresh().await?; + + let cache = self.cache.read().await; + let mut buckets = cache.all_buckets(); + buckets.sort_by(|a, b| b.created_at.cmp(&a.created_at)); + Ok(buckets) + } + + pub async fn delete_bucket(&self, name: &str) -> ServiceResult<()> { + self.get_bucket(name).await?; + + self.delete_bucket_object(name).await?; + + { + let mut cache = self.cache.write().await; + cache.remove(name); + } + + info!("Bucket deleted: {}", name); + Ok(()) + } + + pub async fn force_refresh(&self) -> ServiceResult<()> { + self.refresh_cache().await + } + + pub async fn try_acquire_lock( + &self, + resource: &str, + owner: &str, + ttl_seconds: i64, + ) -> ServiceResult { + let lock_key = format!("{}/{}", LOCKS_PREFIX, resource); + let now = Utc::now(); + let expires_at = now + chrono::Duration::seconds(ttl_seconds); + + match self.backend.get_object(&lock_key).await { + Ok(mut obj_data) => { + // Collect stream to bytes + let mut data = Vec::new(); + while let Some(chunk) = obj_data.stream.next().await { + let chunk = chunk.map_err(|e| ServiceError::Internal(e.to_string()))?; + data.extend_from_slice(&chunk); + } + + let existing_lock: Lock = serde_json::from_slice(&data)?; + + if existing_lock.expires_at > now { + debug!("Lock {} is held by {}", resource, existing_lock.owner); + return Ok(false); + } + + debug!("Lock {} expired, acquiring", resource); + } + Err(BackendError::NotFound(_)) => { + // No lock exists + debug!("No lock found for {}, acquiring", resource); + } + Err(e) => return Err(ServiceError::Backend(e)), + } + + let lock = Lock { + resource: resource.to_string(), + owner: owner.to_string(), + acquired_at: now, + expires_at, + }; + + let data = serde_json::to_vec(&lock)?; + // Convert Vec to stream + let stream: object_store_backends::ByteStream = + Box::pin(futures::stream::once(async move { Ok(Bytes::from(data)) })); + + self.backend + .put_object( + &lock_key, + stream, + Some("application/json".to_string()), + HashMap::new(), + ) + .await?; + + debug!("Lock acquired for resource: {}", resource); + Ok(true) + } + + pub async fn release_lock(&self, resource: &str, owner: &str) -> ServiceResult<()> { + let lock_key = format!("{}/{}", LOCKS_PREFIX, resource); + + match self.backend.get_object(&lock_key).await { + Ok(mut obj_data) => { + // Collect stream to bytes + let mut data = Vec::new(); + while let Some(chunk) = obj_data.stream.next().await { + let chunk = chunk.map_err(|e| ServiceError::Internal(e.to_string()))?; + data.extend_from_slice(&chunk); + } + + let existing_lock: Lock = serde_json::from_slice(&data)?; + if existing_lock.owner != owner { + return Err(ServiceError::LockAcquisition(format!( + "Cannot release lock owned by {}", + existing_lock.owner + ))); + } + } + Err(BackendError::NotFound(_)) => { + // Lock doesn't exist, nothing to release + return Ok(()); + } + Err(e) => return Err(ServiceError::Backend(e)), + } + + self.backend.delete_object(&lock_key).await?; + debug!("Lock released for resource: {}", resource); + Ok(()) + } + + pub async fn cleanup_expired_locks(&self) -> ServiceResult { + let now = Utc::now(); + let mut cleaned = 0u64; + + match self.backend.list_objects(Some(LOCKS_PREFIX), None).await { + Ok(objects) => { + for obj in objects { + // Try to read lock and check expiration + if let Ok(mut obj_data) = self.backend.get_object(&obj.key).await { + // Collect stream to bytes + let mut data = Vec::new(); + while let Some(chunk) = obj_data.stream.next().await { + if let Ok(bytes) = chunk { + data.extend_from_slice(&bytes); + } + } + + if let Ok(lock) = serde_json::from_slice::(&data) { + if lock.expires_at < now { + // Lock expired, delete it + if self.backend.delete_object(&obj.key).await.is_ok() { + cleaned += 1; + debug!("Cleaned up expired lock: {}", lock.resource); + } + } + } + } + } + } + Err(BackendError::NotFound(_)) => { + // No locks directory yet + } + Err(e) => return Err(ServiceError::Backend(e)), + } + + if cleaned > 0 { + info!("Cleaned up {} expired locks", cleaned); + } + + Ok(cleaned) + } +} + +fn is_valid_bucket_name(name: &str) -> bool { + if name.len() < 3 || name.len() > 63 { + return false; + } + + let bytes = name.as_bytes(); + let first = bytes[0]; + let last = bytes[bytes.len() - 1]; + + if !first.is_ascii_lowercase() && !first.is_ascii_digit() { + return false; + } + + if !last.is_ascii_lowercase() && !last.is_ascii_digit() { + return false; + } + + name.chars() + .all(|c| c.is_ascii_lowercase() || c.is_ascii_digit() || c == '-') +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_valid_bucket_names() { + assert!(is_valid_bucket_name("my-bucket")); + assert!(is_valid_bucket_name("bucket123")); + assert!(is_valid_bucket_name("abc")); + assert!(is_valid_bucket_name("my-bucket-123")); + } + + #[test] + fn test_invalid_bucket_names() { + assert!(!is_valid_bucket_name("ab")); // Too short + assert!(!is_valid_bucket_name("My-Bucket")); // Uppercase + assert!(!is_valid_bucket_name("-bucket")); // Starts with hyphen + assert!(!is_valid_bucket_name("bucket-")); // Ends with hyphen + assert!(!is_valid_bucket_name("bucket_name")); // Underscore + } + + #[test] + fn test_deterministic_bucket_id() { + let id1 = MetadataStore::generate_bucket_id("my-bucket"); + let id2 = MetadataStore::generate_bucket_id("my-bucket"); + assert_eq!(id1, id2, "Same bucket name should generate same ID"); + + let id3 = MetadataStore::generate_bucket_id("other-bucket"); + assert_ne!( + id1, id3, + "Different bucket names should generate different IDs" + ); + } +} diff --git a/src/systems/object-storage/service/object-store/src/router.rs b/src/systems/object-storage/service/object-store/src/router.rs new file mode 100644 index 000000000..049aff88d --- /dev/null +++ b/src/systems/object-storage/service/object-store/src/router.rs @@ -0,0 +1,36 @@ +use axum::routing::{delete, get, head, post, put}; +use axum::Router; +use std::sync::Arc; +use std::time::Duration; +use tower::ServiceBuilder; +use tower_http::cors::CorsLayer; +use tower_http::timeout::TimeoutLayer; +use tower_http::trace::TraceLayer; + +use crate::api::*; +use crate::service::ObjectStoreService; + +pub fn create_router(service: Arc) -> Router { + Router::new() + .route("/health", get(health_check)) + .route("/ping", get(health_check)) + .route("/buckets", post(create_bucket)) + .route("/buckets", put(upsert_bucket)) + .route("/buckets", get(list_buckets)) + .route("/buckets/:bucket", get(get_bucket_by_id)) + .route("/buckets/:bucket", delete(delete_bucket)) + .route("/buckets/:bucket/objects/*key", put(put_object)) + .route("/buckets/:bucket/objects/*key", get(get_object)) + .route("/buckets/:bucket/objects/*key", head(head_object)) + .route("/buckets/:bucket/objects/*key", delete(delete_object)) + .route("/buckets/:bucket/objects", get(list_objects)) + .route("/buckets/:bucket/object-info/*key", get(get_object_info)) + .route("/buckets/:bucket/public-url/*key", get(get_public_url)) + .layer( + ServiceBuilder::new() + .layer(TraceLayer::new_for_http()) + .layer(CorsLayer::permissive()) + .layer(TimeoutLayer::new(Duration::from_secs(60))), + ) + .with_state(service) +} diff --git a/src/systems/object-storage/service/object-store/src/service.rs b/src/systems/object-storage/service/object-store/src/service.rs new file mode 100644 index 000000000..1b19b63b9 --- /dev/null +++ b/src/systems/object-storage/service/object-store/src/service.rs @@ -0,0 +1,255 @@ +use bytes::Bytes; +use object_store_backends::{Backend, ByteStream, ObjectData, ObjectMetadata, PublicUrlPurpose}; +use std::collections::HashMap; +use std::sync::Arc; +use tracing::{debug, info}; + +use crate::error::{ServiceError, ServiceResult}; +use crate::metadata::{Bucket, MetadataStore}; + +pub struct ObjectStoreService { + backend: Arc, + metadata: Arc, +} + +impl ObjectStoreService { + pub fn new(backend: Arc, metadata: Arc) -> Self { + Self { backend, metadata } + } + + pub async fn init(&self) -> ServiceResult<()> { + self.backend.init().await?; + info!("Object store service initialized"); + Ok(()) + } + + pub async fn create_bucket(&self, name: &str) -> ServiceResult { + let bucket = self.metadata.create_bucket(name).await?; + + let bucket_marker = format!("{}/.bucket", name); + + // Create empty stream for bucket marker + let stream: ByteStream = Box::pin(futures::stream::once(async { Ok(Bytes::new()) })); + + self.backend + .put_object(&bucket_marker, stream, None, HashMap::new()) + .await?; + + info!("Created bucket: {}", name); + Ok(bucket) + } + + pub async fn upsert_bucket(&self, name: &str) -> ServiceResult { + // Try to get existing bucket first + if let Ok(bucket) = self.metadata.get_bucket(name).await { + debug!("Bucket {} already exists, returning existing", name); + return Ok(bucket); + } + + // Bucket doesn't exist, create it + self.create_bucket(name).await + } + + pub async fn list_buckets(&self) -> ServiceResult> { + self.metadata.list_buckets().await + } + + pub async fn get_bucket_by_id(&self, id: &str) -> ServiceResult { + self.metadata.get_bucket_by_id(id).await + } + + pub async fn delete_bucket(&self, name: &str) -> ServiceResult<()> { + self.metadata.get_bucket(name).await?; + + // List all objects in the bucket to see if it's empty + let objects = self.list_objects(name, None, None).await?; + if !objects.is_empty() { + return Err(ServiceError::Internal(format!( + "Bucket {} is not empty", + name + ))); + } + + // Delete the bucket marker + let bucket_marker = format!("{}/.bucket", name); + let _ = self.backend.delete_object(&bucket_marker).await; + + // Delete from metadata + self.metadata.delete_bucket(name).await?; + + info!("Deleted bucket: {}", name); + Ok(()) + } + + pub async fn put_object( + &self, + bucket: &str, + key: &str, + stream: ByteStream, + content_type: Option, + metadata: HashMap, + ) -> ServiceResult { + self.metadata.get_bucket(bucket).await?; + + validate_object_key(key)?; + + let full_key = format!("{}/{}", bucket, key); + + let obj_metadata = self + .backend + .put_object(&full_key, stream, content_type, metadata) + .await?; + + debug!("Put object: {}/{}", bucket, key); + Ok(obj_metadata) + } + + pub async fn get_object(&self, bucket: &str, key: &str) -> ServiceResult { + self.metadata.get_bucket(bucket).await?; + + validate_object_key(key)?; + + let full_key = format!("{}/{}", bucket, key); + + let obj_data = self.backend.get_object(&full_key).await?; + + debug!("Got object: {}/{}", bucket, key); + Ok(obj_data) + } + + pub async fn head_object(&self, bucket: &str, key: &str) -> ServiceResult { + self.metadata.get_bucket(bucket).await?; + + validate_object_key(key)?; + + let full_key = format!("{}/{}", bucket, key); + + let metadata = self.backend.head_object(&full_key).await?; + + debug!("Got object metadata: {}/{}", bucket, key); + Ok(metadata) + } + + pub async fn delete_object(&self, bucket: &str, key: &str) -> ServiceResult<()> { + self.metadata.get_bucket(bucket).await?; + + validate_object_key(key)?; + + let full_key = format!("{}/{}", bucket, key); + + self.backend.delete_object(&full_key).await?; + + info!("Deleted object: {}/{}", bucket, key); + Ok(()) + } + + pub async fn list_objects( + &self, + bucket: &str, + prefix: Option<&str>, + max_keys: Option, + ) -> ServiceResult> { + self.metadata.get_bucket(bucket).await?; + + let full_prefix = if let Some(p) = prefix { + format!("{}/{}", bucket, p) + } else { + format!("{}/", bucket) + }; + + let objects = self + .backend + .list_objects(Some(&full_prefix), max_keys) + .await?; + + let bucket_prefix = format!("{}/", bucket); + let filtered: Vec = objects + .into_iter() + .filter(|obj| !obj.key.ends_with("/.bucket")) + .map(|mut obj| { + if let Some(stripped) = obj.key.strip_prefix(&bucket_prefix) { + obj.key = stripped.to_string(); + } + obj + }) + .collect(); + + debug!("Listed {} objects in bucket: {}", filtered.len(), bucket); + Ok(filtered) + } + + pub async fn object_exists(&self, bucket: &str, key: &str) -> ServiceResult { + self.metadata.get_bucket(bucket).await?; + + validate_object_key(key)?; + + let full_key = format!("{}/{}", bucket, key); + + let exists = self.backend.object_exists(&full_key).await?; + + Ok(exists) + } + + pub fn metadata(&self) -> Arc { + self.metadata.clone() + } + + pub async fn get_public_url( + &self, + bucket: &str, + key: &str, + expiration_secs: u64, + purpose: PublicUrlPurpose, + ) -> ServiceResult { + self.metadata.get_bucket(bucket).await?; + + validate_object_key(key)?; + + let full_key = format!("{}/{}", bucket, key); + + let url = self + .backend + .get_public_url(&full_key, expiration_secs, purpose) + .await?; + + Ok(url) + } +} + +fn validate_object_key(key: &str) -> ServiceResult<()> { + if key.is_empty() { + return Err(ServiceError::InvalidObjectKey( + "Key cannot be empty".to_string(), + )); + } + + if key.contains("..") || key.starts_with('/') { + return Err(ServiceError::InvalidObjectKey(format!( + "Invalid key: {}", + key + ))); + } + + if key == ".bucket" { + return Err(ServiceError::InvalidObjectKey( + ".bucket is a reserved name".to_string(), + )); + } + + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_validate_object_key() { + assert!(validate_object_key("valid/key.txt").is_ok()); + assert!(validate_object_key("another-valid-key").is_ok()); + assert!(validate_object_key("").is_err()); + assert!(validate_object_key("../etc/passwd").is_err()); + assert!(validate_object_key("/etc/passwd").is_err()); + assert!(validate_object_key(".bucket").is_err()); + } +} diff --git a/src/systems/object-storage/service/object-store/tests/integration_test.rs b/src/systems/object-storage/service/object-store/tests/integration_test.rs new file mode 100644 index 000000000..8f4ea5223 --- /dev/null +++ b/src/systems/object-storage/service/object-store/tests/integration_test.rs @@ -0,0 +1,421 @@ +use axum::body::Body; +use axum::http::{Request, StatusCode}; +use bytes::Bytes; +use futures::stream; +use object_store::metadata::MetadataStore; +use object_store::service::ObjectStoreService; +use object_store_backends::{local::LocalBackend, Backend}; +use serde_json::json; +use std::sync::Arc; +use tempfile::TempDir; +use tower::ServiceExt as TowerServiceExt; + +async fn setup_test_service() -> (Arc, TempDir) { + let temp_dir = TempDir::new().unwrap(); + let backend = Arc::new(LocalBackend::new( + temp_dir.path().to_path_buf(), + "test-physical-bucket".to_string(), + )); + + backend.init().await.unwrap(); + + let metadata = Arc::new(MetadataStore::new(backend.clone()).await.unwrap()); + + let service = Arc::new(ObjectStoreService::new(backend, metadata)); + + (service, temp_dir) +} + +#[tokio::test] +async fn test_health_check() { + let (service, _temp_dir) = setup_test_service().await; + let app = object_store::router::create_router(service); + + let response = app + .oneshot( + Request::builder() + .uri("/health") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); +} + +#[tokio::test] +async fn test_create_and_list_buckets() { + let (service, _temp_dir) = setup_test_service().await; + let app = object_store::router::create_router(service); + + // Create bucket + let response = app + .clone() + .oneshot( + Request::builder() + .method("POST") + .uri("/buckets") + .header("content-type", "application/json") + .body(Body::from( + json!({ + "name": "test-bucket" + }) + .to_string(), + )) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + + // List buckets + let response = app + .oneshot( + Request::builder() + .uri("/buckets") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + + let body = axum::body::to_bytes(response.into_body(), usize::MAX) + .await + .unwrap(); + let json: serde_json::Value = serde_json::from_slice(&body).unwrap(); + + assert_eq!(json["buckets"].as_array().unwrap().len(), 1); + assert_eq!(json["buckets"][0]["name"], "test-bucket"); +} + +#[tokio::test] +async fn test_put_and_get_object() { + let (service, _temp_dir) = setup_test_service().await; + let app = object_store::router::create_router(service.clone()); + + // Create bucket + service.create_bucket("test-bucket").await.unwrap(); + + // Put object + let data = b"Hello, World!"; + let response = app + .clone() + .oneshot( + Request::builder() + .method("PUT") + .uri("/buckets/test-bucket/objects/test.txt") + .header("content-type", "text/plain") + .body(Body::from(data.to_vec())) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + + // Get object + let response = app + .oneshot( + Request::builder() + .uri("/buckets/test-bucket/objects/test.txt") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + + let body = axum::body::to_bytes(response.into_body(), usize::MAX) + .await + .unwrap(); + assert_eq!(&body[..], data); +} + +#[tokio::test] +async fn test_delete_object() { + let (service, _temp_dir) = setup_test_service().await; + let app = object_store::router::create_router(service.clone()); + + // Create bucket and put object + service.create_bucket("test-bucket").await.unwrap(); + let data = b"Hello".to_vec(); + let stream: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data)) })); + service + .put_object( + "test-bucket", + "test.txt", + stream, + Some("text/plain".to_string()), + Default::default(), + ) + .await + .unwrap(); + + // Delete object + let response = app + .clone() + .oneshot( + Request::builder() + .method("DELETE") + .uri("/buckets/test-bucket/objects/test.txt") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::NO_CONTENT); + + // Verify object is deleted + let response = app + .oneshot( + Request::builder() + .uri("/buckets/test-bucket/objects/test.txt") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::NOT_FOUND); +} + +#[tokio::test] +async fn test_list_objects() { + let (service, _temp_dir) = setup_test_service().await; + let app = object_store::router::create_router(service.clone()); + + // Create bucket and put multiple objects + service.create_bucket("test-bucket").await.unwrap(); + + let data1 = b"Data1".to_vec(); + let stream1: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data1)) })); + service + .put_object( + "test-bucket", + "file1.txt", + stream1, + None, + Default::default(), + ) + .await + .unwrap(); + + let data2 = b"Data2".to_vec(); + let stream2: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data2)) })); + service + .put_object( + "test-bucket", + "file2.txt", + stream2, + None, + Default::default(), + ) + .await + .unwrap(); + + let data3 = b"Data3".to_vec(); + let stream3: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data3)) })); + service + .put_object( + "test-bucket", + "subdir/file3.txt", + stream3, + None, + Default::default(), + ) + .await + .unwrap(); + + // List all objects + let response = app + .clone() + .oneshot( + Request::builder() + .uri("/buckets/test-bucket/objects") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + + let body = axum::body::to_bytes(response.into_body(), usize::MAX) + .await + .unwrap(); + let json: serde_json::Value = serde_json::from_slice(&body).unwrap(); + + assert_eq!(json["objects"].as_array().unwrap().len(), 3); + + // List with prefix + let response = app + .oneshot( + Request::builder() + .uri("/buckets/test-bucket/objects?prefix=subdir/") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + + let body = axum::body::to_bytes(response.into_body(), usize::MAX) + .await + .unwrap(); + let json: serde_json::Value = serde_json::from_slice(&body).unwrap(); + + assert_eq!(json["objects"].as_array().unwrap().len(), 1); +} + +#[tokio::test] +async fn test_head_object() { + let (service, _temp_dir) = setup_test_service().await; + let app = object_store::router::create_router(service.clone()); + + // Create bucket and put object + service.create_bucket("test-bucket").await.unwrap(); + let data = b"Hello, World!".to_vec(); + let stream: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data)) })); + service + .put_object( + "test-bucket", + "test.txt", + stream, + Some("text/plain".to_string()), + Default::default(), + ) + .await + .unwrap(); + + // HEAD request + let response = app + .oneshot( + Request::builder() + .method("HEAD") + .uri("/buckets/test-bucket/objects/test.txt") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + assert_eq!(response.headers().get("content-length").unwrap(), "13"); + assert_eq!( + response.headers().get("content-type").unwrap(), + "text/plain" + ); +} + +#[tokio::test] +async fn test_invalid_bucket_name() { + let (service, _temp_dir) = setup_test_service().await; + + // Test invalid bucket names + let result = service.create_bucket("Invalid-Name").await; + assert!(result.is_err()); + + let result = service.create_bucket("ab").await; + assert!(result.is_err()); + + let result = service.create_bucket("-invalid").await; + assert!(result.is_err()); +} + +#[tokio::test] +async fn test_bucket_already_exists() { + let (service, _temp_dir) = setup_test_service().await; + + service.create_bucket("test-bucket").await.unwrap(); + let result = service.create_bucket("test-bucket").await; + assert!(result.is_err()); +} + +#[tokio::test] +async fn test_object_not_found() { + let (service, _temp_dir) = setup_test_service().await; + let app = object_store::router::create_router(service.clone()); + + service.create_bucket("test-bucket").await.unwrap(); + + let response = app + .oneshot( + Request::builder() + .uri("/buckets/test-bucket/objects/nonexistent.txt") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::NOT_FOUND); +} + +#[tokio::test] +async fn test_path_traversal_protection() { + let (service, _temp_dir) = setup_test_service().await; + + service.create_bucket("test-bucket").await.unwrap(); + + let data = b"malicious".to_vec(); + let stream: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data)) })); + + let result = service + .put_object( + "test-bucket", + "../etc/passwd", + stream, + None, + Default::default(), + ) + .await; + + assert!(result.is_err()); +} + +#[tokio::test] +async fn test_concurrent_bucket_creation() { + let (service, _temp_dir) = setup_test_service().await; + + // Test concurrent creation of DIFFERENT buckets - should all succeed now! + let handles: Vec<_> = (0..10) + .map(|i| { + let service = service.clone(); + tokio::spawn(async move { + let name = format!("concurrent-{}", i); + service.create_bucket(&name).await + }) + }) + .collect(); + + let results: Vec<_> = futures::future::join_all(handles) + .await + .into_iter() + .map(|r| r.unwrap()) + .collect(); + + // All should succeed since they're different buckets and we use folder-based storage + let success_count = results.iter().filter(|r| r.is_ok()).count(); + assert_eq!(success_count, 10, "All 10 bucket creations should succeed"); + + // Verify all buckets exist + let buckets = service.list_buckets().await.unwrap(); + assert_eq!(buckets.len(), 10, "Should have 10 buckets"); + + // Try creating duplicate - should fail + let result = service.create_bucket("concurrent-0").await; + assert!(result.is_err(), "Duplicate bucket creation should fail"); +} diff --git a/src/systems/object-storage/service/object-store/tests/load_test.rs b/src/systems/object-storage/service/object-store/tests/load_test.rs new file mode 100644 index 000000000..3457da057 --- /dev/null +++ b/src/systems/object-storage/service/object-store/tests/load_test.rs @@ -0,0 +1,355 @@ +use bytes::Bytes; +use futures::{stream, StreamExt}; +use object_store::metadata::MetadataStore; +use object_store::service::ObjectStoreService; +use object_store_backends::{local::LocalBackend, Backend}; +use std::sync::Arc; +use std::time::Instant; +use tempfile::TempDir; + +async fn setup_test_service() -> (Arc, TempDir) { + let temp_dir = TempDir::new().unwrap(); + let backend = Arc::new(LocalBackend::new( + temp_dir.path().to_path_buf(), + "test-physical-bucket".to_string(), + )); + + backend.init().await.unwrap(); + + let metadata = Arc::new(MetadataStore::new(backend.clone()).await.unwrap()); + + let service = Arc::new(ObjectStoreService::new(backend, metadata)); + + (service, temp_dir) +} + +#[tokio::test] +#[ignore] // Run with: cargo test --test load_test -- --ignored +async fn test_concurrent_writes() { + let (service, _temp_dir) = setup_test_service().await; + + // Create bucket + service.create_bucket("load-test-bucket").await.unwrap(); + + let start = Instant::now(); + let num_operations = 100; + + // Spawn concurrent write operations + let handles: Vec<_> = (0..num_operations) + .map(|i| { + let service = service.clone(); + tokio::spawn(async move { + let key = format!("file-{}.txt", i); + let data = format!("Data for file {}", i).into_bytes(); + let stream: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data)) })); + + service + .put_object( + "load-test-bucket", + &key, + stream, + Some("text/plain".to_string()), + Default::default(), + ) + .await + }) + }) + .collect(); + + let results = futures::future::join_all(handles).await; + + let duration = start.elapsed(); + let success_count = results + .iter() + .filter(|r| r.as_ref().unwrap().is_ok()) + .count(); + + println!( + "Concurrent writes: {} operations in {:?} ({:.2} ops/sec)", + success_count, + duration, + success_count as f64 / duration.as_secs_f64() + ); + + assert_eq!(success_count, num_operations); + println!("✓ All {} writes succeeded", num_operations); +} + +#[tokio::test] +#[ignore] +async fn test_concurrent_reads() { + let (service, _temp_dir) = setup_test_service().await; + + // Create bucket and populate with data + service.create_bucket("load-test-bucket").await.unwrap(); + + let num_files = 50; + for i in 0..num_files { + let key = format!("file-{}.txt", i); + let data = format!("Data for file {}", i).into_bytes(); + let stream: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data)) })); + service + .put_object( + "load-test-bucket", + &key, + stream, + Some("text/plain".to_string()), + Default::default(), + ) + .await + .unwrap(); + } + + let start = Instant::now(); + let num_reads = 200; + + // Spawn concurrent read operations + let handles: Vec<_> = (0..num_reads) + .map(|i| { + let service = service.clone(); + tokio::spawn(async move { + let key = format!("file-{}.txt", i % num_files); + service.get_object("load-test-bucket", &key).await + }) + }) + .collect(); + + let results = futures::future::join_all(handles).await; + + let duration = start.elapsed(); + let success_count = results + .iter() + .filter(|r| r.as_ref().unwrap().is_ok()) + .count(); + + println!( + "Concurrent reads: {} operations in {:?} ({:.2} ops/sec)", + success_count, + duration, + success_count as f64 / duration.as_secs_f64() + ); + + assert_eq!(success_count, num_reads); + println!("✓ All {} reads succeeded", num_reads); +} + +#[tokio::test] +#[ignore] +async fn test_mixed_operations() { + let (service, _temp_dir) = setup_test_service().await; + + // Create bucket + service.create_bucket("load-test-bucket").await.unwrap(); + + let start = Instant::now(); + let num_operations = 150; + + // Mix of writes, reads, and deletes + let handles: Vec<_> = (0..num_operations) + .map(|i| { + let service = service.clone(); + tokio::spawn(async move { + match i % 3 { + 0 => { + // Write + let key = format!("file-{}.txt", i); + let data = format!("Data {}", i).into_bytes(); + let stream: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data)) })); + service + .put_object( + "load-test-bucket", + &key, + stream, + Some("text/plain".to_string()), + Default::default(), + ) + .await + .map(|_| ()) + } + 1 => { + // Read (if exists) + let prev_i = if i > 0 { i - 1 } else { 0 }; + let key = format!("file-{}.txt", prev_i); + match service.get_object("load-test-bucket", &key).await { + Ok(_) => Ok(()), + Err(object_store::error::ServiceError::ObjectNotFound(_)) => Ok(()), + Err(object_store::error::ServiceError::Backend( + object_store_backends::BackendError::NotFound(_), + )) => Ok(()), + Err(e) => Err(e), + } + } + _ => { + // List + service + .list_objects("load-test-bucket", None, Some(10)) + .await + .map(|_| ()) + } + } + }) + }) + .collect(); + + let results = futures::future::join_all(handles).await; + + let duration = start.elapsed(); + let success_count = results + .iter() + .filter(|r| r.as_ref().unwrap().is_ok()) + .count(); + + println!( + "Mixed operations: {} operations in {:?} ({:.2} ops/sec)", + success_count, + duration, + success_count as f64 / duration.as_secs_f64() + ); + + println!( + "✓ {} of {} operations succeeded", + success_count, num_operations + ); + assert!(success_count > num_operations * 9 / 10); // At least 90% success +} + +#[tokio::test] +#[ignore] +async fn test_large_file_handling() { + let (service, _temp_dir) = setup_test_service().await; + + service.create_bucket("load-test-bucket").await.unwrap(); + + let sizes = [ + 1024, // 1 KB + 1024 * 1024, // 1 MB + 5 * 1024 * 1024, // 5 MB + ]; + + for (i, size) in sizes.iter().enumerate() { + let start = Instant::now(); + let data = vec![0u8; *size]; + let key = format!("large-file-{}.bin", i); + + // Write + let expected_size = data.len(); + let stream: object_store_backends::ByteStream = + Box::pin(stream::once(async move { Ok(Bytes::from(data)) })); + service + .put_object( + "load-test-bucket", + &key, + stream, + Some("application/octet-stream".to_string()), + Default::default(), + ) + .await + .unwrap(); + + let write_duration = start.elapsed(); + + // Read + let read_start = Instant::now(); + let mut retrieved = service.get_object("load-test-bucket", &key).await.unwrap(); + let read_duration = read_start.elapsed(); + + // Collect stream to verify size + let mut collected_data = Vec::new(); + while let Some(chunk) = retrieved.stream.next().await { + let chunk = chunk.unwrap(); + collected_data.extend_from_slice(&chunk); + } + + assert_eq!(collected_data.len(), expected_size); + + println!( + "✓ {:.2} MB file: write {:?}, read {:?}", + *size as f64 / 1024.0 / 1024.0, + write_duration, + read_duration + ); + } +} + +#[tokio::test] +#[ignore] +async fn test_distributed_locking() { + let (service, _temp_dir) = setup_test_service().await; + + let resource = "test-resource"; + let num_attempts = 50; + let metadata = service.metadata(); + + let handles: Vec<_> = (0..num_attempts) + .map(|i| { + let metadata = metadata.clone(); + let resource = resource.to_string(); + let owner = format!("worker-{}", i); + tokio::spawn(async move { metadata.try_acquire_lock(&resource, &owner, 5).await }) + }) + .collect(); + + let results = futures::future::join_all(handles).await; + + let acquired_count = results + .iter() + .filter(|r| r.as_ref().unwrap().as_ref().unwrap() == &true) + .count(); + + println!( + "Lock acquisition: {} of {} attempts succeeded", + acquired_count, num_attempts + ); + + // With concurrent attempts, typically only one should succeed initially + // Others might succeed as locks expire or get released + assert!(acquired_count >= 1); + println!("✓ Distributed locking working correctly"); +} + +#[tokio::test] +#[ignore] +async fn test_stress_bucket_operations() { + let (service, _temp_dir) = setup_test_service().await; + + let num_buckets = 20; + let start = Instant::now(); + + // Create buckets sequentially (to avoid lock contention with object-storage backed metadata) + // In production, bucket creation is a rare operation + let mut create_count = 0; + for i in 0..num_buckets { + let name = format!("stress-bucket-{}", i); + if service.create_bucket(&name).await.is_ok() { + create_count += 1; + } + } + + // List buckets multiple times concurrently + let list_handles: Vec<_> = (0..50) + .map(|_| { + let service = service.clone(); + tokio::spawn(async move { service.list_buckets().await }) + }) + .collect(); + + let list_results = futures::future::join_all(list_handles).await; + let list_count = list_results + .iter() + .filter(|r| r.as_ref().unwrap().is_ok()) + .count(); + + let duration = start.elapsed(); + + println!( + "Stress test: {} buckets created, {} list operations in {:?}", + create_count, list_count, duration + ); + + assert_eq!(create_count, num_buckets); + assert_eq!(list_count, 50); + println!("✓ Stress test passed"); +} diff --git a/src/systems/origin/apps/service/package.json b/src/systems/origin/apps/service/package.json index c6ca32abb..9ebaa9fd4 100644 --- a/src/systems/origin/apps/service/package.json +++ b/src/systems/origin/apps/service/package.json @@ -70,7 +70,7 @@ "jszip": "^3.10.1", "long": "^5.3.2", "nice-grpc": "^2.1.12", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "pg": "^8.18.0", "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", diff --git a/src/systems/origin/apps/service/src/storage.ts b/src/systems/origin/apps/service/src/storage.ts index f651f7d70..040d70725 100644 --- a/src/systems/origin/apps/service/src/storage.ts +++ b/src/systems/origin/apps/service/src/storage.ts @@ -1,5 +1,5 @@ import { delay } from '@lowerdeck/delay'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; export let storage = new ObjectStorageClient(env.storage.OBJECT_STORAGE_URL, 1000 * 60 * 10); diff --git a/src/systems/relay/scripts/prepare-docker-build.sh b/src/systems/relay/scripts/prepare-docker-build.sh new file mode 100755 index 000000000..980edbe24 --- /dev/null +++ b/src/systems/relay/scripts/prepare-docker-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu + +cd /app +bun install --linker=hoisted diff --git a/src/systems/relay/service/.dockerignore b/src/systems/relay/service/.dockerignore new file mode 100644 index 000000000..1a2871578 --- /dev/null +++ b/src/systems/relay/service/.dockerignore @@ -0,0 +1,14 @@ +node_modules +.git +.gitignore +*.md +.env +.env.* +!.env.example +.DS_Store +dist +build +coverage +.vscode +.idea +*.log diff --git a/src/systems/relay/service/.env.example b/src/systems/relay/service/.env.example new file mode 100644 index 000000000..8407763ac --- /dev/null +++ b/src/systems/relay/service/.env.example @@ -0,0 +1,13 @@ +# Service Configuration +DATABASE_URL=postgresql://relay:relay@localhost:25432/relay +REDIS_URL=redis://localhost:26379/0 +OBJECT_STORAGE_URL=http://localhost:25010 +LOGS_BUCKET_NAME=relay-logs + +# Object storage overrides (optional) +OBJECT_STORAGE_BACKEND_TYPE=local +OBJECT_STORAGE_BACKEND_ROOT_PATH=/app/data +OBJECT_STORAGE_AWS_REGION=us-east-1 +OBJECT_STORAGE_AWS_S3_BUCKET=relay-local +OBJECT_STORAGE_AWS_ACCESS_KEY_ID=test +OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY=test diff --git a/src/systems/relay/service/.gitignore b/src/systems/relay/service/.gitignore new file mode 100644 index 000000000..17498908a --- /dev/null +++ b/src/systems/relay/service/.gitignore @@ -0,0 +1,148 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.* +!.env.example + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Sveltekit cache directory +.svelte-kit/ + +# vitepress build output +**/.vitepress/dist + +# vitepress cache directory +**/.vitepress/cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# Firebase cache directory +.firebase/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v3 +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +# Vite logs files +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +prisma/generated +# Test coverage +coverage/ +.vitest/ + +# Test artifacts +tests/e2e/webhook-receiver/node_modules/ +tests/e2e/webhook-receiver/package-lock.json diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile new file mode 100644 index 000000000..8f31ff8be --- /dev/null +++ b/src/systems/relay/service/Dockerfile @@ -0,0 +1,40 @@ +# Build stage +FROM oven/bun:1 AS builder + +WORKDIR /app + +ARG SENTRY_AUTH_TOKEN +ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} + +COPY . . + +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* +RUN sh ./src/systems/relay/scripts/prepare-docker-build.sh + +WORKDIR /app/src/systems/relay/service +RUN bun prisma generate +RUN bun run server:build + +FROM builder AS workspace + +WORKDIR /app/src/systems/relay/service +CMD ["sleep", "infinity"] + +# Production stage +FROM oven/bun:1-alpine AS runner + +WORKDIR /app + +RUN apk add --no-cache curl + +COPY --from=builder /app/src/systems/relay/service/dist /app/dist +COPY --from=builder /app/src/systems/relay/service/prisma /app/prisma +COPY --from=builder /app/src/systems/relay/service/prisma.config.ts /app/prisma.config.ts +COPY --from=builder /app/node_modules /app/node_modules + +EXPOSE 52110 + +HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:52110/metorial-relay && curl -f http://localhost:12121/ || exit 1 + +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/relay/service/control.toml b/src/systems/relay/service/control.toml new file mode 100644 index 000000000..935e868a7 --- /dev/null +++ b/src/systems/relay/service/control.toml @@ -0,0 +1,38 @@ +[control] +name = "relay" + +[service] +port = 52110 +dockerfile = "src/systems/relay/service/Dockerfile" +build_context = "oss" +health = { cmd = "bun -e \"fetch('http://localhost:12121/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } + +[test.unit] +command = "bun run test:unit" + +[test.e2e] +command = "bun run test:e2e" +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] +cwd = "/app/src/systems/relay/service" +runner = "service" + +[[databases]] +adapter = "postgres" +name = "relay-test" + +[env] +DATABASE_URL = "$db.relay-test.url" +REDIS_URL = "redis://$deps.redis.6379/0" + +[[deps]] +name = "postgres" +preset = "postgres" + +[deps.env] +POSTGRES_USER = "relay" +POSTGRES_PASSWORD = "relay" +POSTGRES_DB = "relay" + +[[deps]] +name = "redis" +preset = "redis" diff --git a/src/systems/relay/service/dev.Dockerfile b/src/systems/relay/service/dev.Dockerfile new file mode 100644 index 000000000..f0cbae190 --- /dev/null +++ b/src/systems/relay/service/dev.Dockerfile @@ -0,0 +1,15 @@ +FROM oven/bun:1 + +WORKDIR /app/service + +# Copy package files +COPY package.json bun.lock* ./ + +# Install dependencies +RUN bun install + +# Copy source code +COPY . . + +# Run in dev mode with hot reloading +CMD ["sh", "-c", "bun prisma generate && bun prisma db push --accept-data-loss && bun --watch src/server.ts"] diff --git a/src/systems/relay/service/docker-compose.dev.yml b/src/systems/relay/service/docker-compose.dev.yml new file mode 100644 index 000000000..35eca5e4a --- /dev/null +++ b/src/systems/relay/service/docker-compose.dev.yml @@ -0,0 +1,110 @@ +services: + postgres: + profiles: ['infra'] + image: postgres:16-alpine + container_name: relay-postgres + restart: unless-stopped + environment: + POSTGRES_USER: relay + POSTGRES_PASSWORD: relay + POSTGRES_DB: relay + volumes: + - postgres_data:/var/lib/postgresql/data + - ./init-test-db.sh:/docker-entrypoint-initdb.d/init-test-db.sh + ports: + - '25432:5432' + networks: + - relay-network + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U relay'] + interval: 5s + timeout: 5s + retries: 10 + + redis: + profiles: ['infra'] + image: redis:7-alpine + container_name: relay-redis + restart: unless-stopped + ports: + - '26379:6379' + networks: + - relay-network + healthcheck: + test: ['CMD', 'redis-cli', 'ping'] + interval: 5s + timeout: 5s + retries: 10 + + object-storage: + profiles: ['infra'] + image: ghcr.io/metorial/object-storage:latest + container_name: relay-object-storage + restart: unless-stopped + volumes: + - object-store-data:/app/data + environment: + RUST_LOG: info + OBJECT_STORE__SERVER__HOST: 0.0.0.0 + OBJECT_STORE__SERVER__PORT: 52010 + OBJECT_STORE__BACKEND__TYPE: ${OBJECT_STORAGE_BACKEND_TYPE:-local} + OBJECT_STORE__BACKEND__ROOT_PATH: ${OBJECT_STORAGE_BACKEND_ROOT_PATH:-/app/data} + OBJECT_STORE__BACKEND__REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} + OBJECT_STORE__BACKEND__PHYSICAL_BUCKET: ${OBJECT_STORAGE_AWS_S3_BUCKET:-relay-local} + AWS_ACCESS_KEY_ID: ${OBJECT_STORAGE_AWS_ACCESS_KEY_ID:-test} + AWS_SECRET_ACCESS_KEY: ${OBJECT_STORAGE_AWS_SECRET_ACCESS_KEY:-test} + AWS_REGION: ${OBJECT_STORAGE_AWS_REGION:-us-east-1} + ports: + - '25010:52010' + networks: + - relay-network + healthcheck: + test: ['CMD-SHELL', 'curl -f http://localhost:52010/health || exit 1'] + interval: 5s + timeout: 5s + retries: 10 + + relay: + profiles: ['service'] + build: + context: . + dockerfile: dev.Dockerfile + container_name: relay-service + restart: unless-stopped + ports: + - '52110:52110' + environment: + DATABASE_URL: ${DATABASE_URL} + REDIS_URL: ${REDIS_URL} + volumes: + - ./src:/app/service/src:ro + - ./package.json:/app/service/package.json:ro + - ./tsconfig.json:/app/service/tsconfig.json:ro + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + object-storage: + condition: service_healthy + healthcheck: + test: + [ + 'CMD-SHELL', + 'bun -e "fetch(''http://localhost:52110/'').then(()=>process.exit(0)).catch(()=>process.exit(1))"' + ] + interval: 5s + timeout: 5s + retries: 10 + networks: + - relay-network + +volumes: + postgres_data: + driver: local + object-store-data: + driver: local + +networks: + relay-network: + driver: bridge diff --git a/src/systems/relay/service/init-test-db.sh b/src/systems/relay/service/init-test-db.sh new file mode 100755 index 000000000..2bcbbd1fe --- /dev/null +++ b/src/systems/relay/service/init-test-db.sh @@ -0,0 +1,15 @@ +#!/bin/sh +set -e + +# Create databases for CI/local-compose services if they don't exist +dbs="relay-test" +for db in $dbs; do + exists=$(psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ + -tAc "SELECT 1 FROM pg_database WHERE datname='${db}'") + if [ "$exists" != "1" ]; then + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" \ + -c "CREATE DATABASE \"${db}\";" + fi +done + +echo "Database initialization complete" diff --git a/src/systems/relay/service/package.json b/src/systems/relay/service/package.json new file mode 100644 index 000000000..f707f14fe --- /dev/null +++ b/src/systems/relay/service/package.json @@ -0,0 +1,73 @@ +{ + "name": "@metorial/relay", + "module": "index.ts", + "type": "commonjs", + "private": true, + "scripts": { + "start": "bun run server:start", + "dev": "bun --watch ./src/server.ts", + "server:build": "ncc build ./src/server.ts -o ./dist --source-map", + "server:start": "bun ./dist/index.js", + "infra:up": "docker compose -p relay -f ./docker-compose.dev.yml --profile infra up -d --pull always", + "infra:down": "docker compose -p relay -f ./docker-compose.dev.yml --profile infra down", + "infra:logs": "docker compose -p relay -f ./docker-compose.dev.yml --profile infra logs -f", + "db:generate": "bun prisma generate", + "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --accept-data-loss'", + "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", + "db:push": "bun run db:push:dev && bun run db:push:test", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", + "test:watch": "bunx vitest watch", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", + "@types/bun": "latest", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "vitest": "4.0.17" + }, + "peerDependencies": { + "typescript": "^5" + }, + "dependencies": { + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@aws-sdk/client-ses": "^3.985.0", + "@lowerdeck/api-mux": "^1.0.1", + "@lowerdeck/cache": "^1.0.0", + "@lowerdeck/canonicalize": "^1.0.4", + "@lowerdeck/cron": "^1.0.4", + "@lowerdeck/encryption": "^1.0.6", + "@lowerdeck/env": "^1.0.4", + "@lowerdeck/error": "^1.0.8", + "@lowerdeck/hash": "^1.0.4", + "@lowerdeck/id": "^1.0.5", + "@lowerdeck/once": "^1.0.4", + "@lowerdeck/pagination": "^1.0.4", + "@lowerdeck/queue": "^1.0.4", + "@lowerdeck/rpc-client": "^1.0.2", + "@lowerdeck/rpc-server": "^1.0.4", + "@lowerdeck/sentry": "^1.0.2", + "@lowerdeck/service": "^1.0.3", + "@lowerdeck/slugify": "^1.0.4", + "@lowerdeck/snowflake": "^1.0.2", + "@lowerdeck/validation": "^1.0.4", + "@metorial-services/forge-client": "^1.0.3", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@sentry/bun": "^10.38.0", + "@types/nodemailer": "^7.0.9", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "ipaddr.js": "^2.3.0", + "jszip": "^3.10.1", + "nodemailer": "^8.0.1", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "yaml": "^2.8.2" + } +} diff --git a/src/systems/relay/service/prisma.config.ts b/src/systems/relay/service/prisma.config.ts new file mode 100644 index 000000000..c6868c295 --- /dev/null +++ b/src/systems/relay/service/prisma.config.ts @@ -0,0 +1,26 @@ +import 'dotenv/config'; +import { defineConfig } from 'prisma/config'; + +let databaseUrl = process.env.DATABASE_URL; + +if ( + !databaseUrl && + process.env.DATABASE_USERNAME && + process.env.DATABASE_PASSWORD && + process.env.DATABASE_HOST && + process.env.DATABASE_PORT && + process.env.DATABASE_NAME +) { + databaseUrl = `postgres://${process.env.DATABASE_USERNAME}:${process.env.DATABASE_PASSWORD}@${process.env.DATABASE_HOST}:${process.env.DATABASE_PORT}/${process.env.DATABASE_NAME}?schema=public&sslmode=no-verify&connection_limit=20`; +} + +export default defineConfig({ + schema: 'prisma/schema.prisma', + migrations: { + path: 'prisma/migrations' + }, + datasource: { + url: databaseUrl, + shadowDatabaseUrl: process.env['SHADOW_DATABASE_URL'] + } +}); diff --git a/src/systems/relay/service/prisma/migrations/20260209135950_init/migration.sql b/src/systems/relay/service/prisma/migrations/20260209135950_init/migration.sql new file mode 100644 index 000000000..339e4e57c --- /dev/null +++ b/src/systems/relay/service/prisma/migrations/20260209135950_init/migration.sql @@ -0,0 +1,107 @@ +-- CreateEnum +CREATE TYPE "EmailIdentityType" AS ENUM ('email'); + +-- CreateEnum +CREATE TYPE "OutgoingEmailDestinationStatus" AS ENUM ('pending', 'sent', 'retry', 'failed'); + +-- CreateEnum +CREATE TYPE "OutgoingEmailSendStatus" AS ENUM ('success', 'failed'); + +-- CreateTable +CREATE TABLE "Sender" ( + "oid" INTEGER NOT NULL, + "id" TEXT NOT NULL, + "identifier" TEXT NOT NULL, + "name" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Sender_pkey" PRIMARY KEY ("oid") +); + +-- CreateTable +CREATE TABLE "EmailIdentity" ( + "oid" INTEGER NOT NULL, + "id" TEXT NOT NULL, + "type" "EmailIdentityType" NOT NULL, + "slug" TEXT NOT NULL, + "fromName" TEXT NOT NULL, + "fromEmail" TEXT NOT NULL, + "subjectMarker" TEXT, + "senderOid" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "EmailIdentity_pkey" PRIMARY KEY ("oid") +); + +-- CreateTable +CREATE TABLE "OutgoingEmail" ( + "oid" BIGINT NOT NULL, + "id" TEXT NOT NULL, + "numberOfDestinations" INTEGER NOT NULL, + "numberOfDestinationsCompleted" INTEGER NOT NULL, + "identityId" INTEGER NOT NULL, + "values" JSONB NOT NULL, + "subject" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "OutgoingEmail_pkey" PRIMARY KEY ("oid") +); + +-- CreateTable +CREATE TABLE "OutgoingEmailDestination" ( + "id" BIGINT NOT NULL, + "status" "OutgoingEmailDestinationStatus" NOT NULL, + "emailId" BIGINT NOT NULL, + "destination" TEXT NOT NULL, + + CONSTRAINT "OutgoingEmailDestination_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "OutgoingEmailContent" ( + "emailId" BIGINT NOT NULL, + "html" TEXT NOT NULL, + "text" TEXT NOT NULL, + "subject" TEXT NOT NULL, + + CONSTRAINT "OutgoingEmailContent_pkey" PRIMARY KEY ("emailId") +); + +-- CreateTable +CREATE TABLE "OutgoingEmailSend" ( + "id" BIGINT NOT NULL, + "status" "OutgoingEmailSendStatus" NOT NULL, + "destinationId" BIGINT NOT NULL, + "result" JSONB NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "OutgoingEmailSend_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Sender_id_key" ON "Sender"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Sender_identifier_key" ON "Sender"("identifier"); + +-- CreateIndex +CREATE UNIQUE INDEX "EmailIdentity_id_key" ON "EmailIdentity"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "EmailIdentity_senderOid_slug_key" ON "EmailIdentity"("senderOid", "slug"); + +-- AddForeignKey +ALTER TABLE "EmailIdentity" ADD CONSTRAINT "EmailIdentity_senderOid_fkey" FOREIGN KEY ("senderOid") REFERENCES "Sender"("oid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "OutgoingEmail" ADD CONSTRAINT "OutgoingEmail_identityId_fkey" FOREIGN KEY ("identityId") REFERENCES "EmailIdentity"("oid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "OutgoingEmailDestination" ADD CONSTRAINT "OutgoingEmailDestination_emailId_fkey" FOREIGN KEY ("emailId") REFERENCES "OutgoingEmail"("oid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "OutgoingEmailContent" ADD CONSTRAINT "OutgoingEmailContent_emailId_fkey" FOREIGN KEY ("emailId") REFERENCES "OutgoingEmail"("oid") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "OutgoingEmailSend" ADD CONSTRAINT "OutgoingEmailSend_destinationId_fkey" FOREIGN KEY ("destinationId") REFERENCES "OutgoingEmailDestination"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/systems/relay/service/prisma/migrations/migration_lock.toml b/src/systems/relay/service/prisma/migrations/migration_lock.toml new file mode 100644 index 000000000..044d57cdb --- /dev/null +++ b/src/systems/relay/service/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "postgresql" diff --git a/src/systems/relay/service/prisma/schema.prisma b/src/systems/relay/service/prisma/schema.prisma new file mode 100644 index 000000000..cc221ad36 --- /dev/null +++ b/src/systems/relay/service/prisma/schema.prisma @@ -0,0 +1,121 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +generator client { + provider = "prisma-client" + output = "./generated" +} + +datasource db { + provider = "postgresql" +} + +generator json { + provider = "prisma-json-types-generator" +} + +model Sender { + oid Int @id + id String @unique + + identifier String @unique + name String + + createdAt DateTime @default(now()) + + emailIdentities EmailIdentity[] +} + +enum EmailIdentityType { + email +} + +model EmailIdentity { + oid Int @id + id String @unique + + type EmailIdentityType + + slug String + fromName String + fromEmail String + subjectMarker String? + + senderOid Int + sender Sender @relation(fields: [senderOid], references: [oid], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + OutgoingEmail OutgoingEmail[] + + @@unique([senderOid, slug]) +} + +model OutgoingEmail { + oid BigInt @id + id String + + numberOfDestinations Int + numberOfDestinationsCompleted Int + + identityId Int + identity EmailIdentity @relation(fields: [identityId], references: [oid], onDelete: Cascade) + + values Json + + subject String + + createdAt DateTime @default(now()) + + content OutgoingEmailContent? + destinations OutgoingEmailDestination[] +} + +enum OutgoingEmailDestinationStatus { + pending + sent + retry + failed +} + +model OutgoingEmailDestination { + id BigInt @id + status OutgoingEmailDestinationStatus + + emailId BigInt + email OutgoingEmail @relation(fields: [emailId], references: [oid], onDelete: Cascade) + + destination String + + OutgoingEmailSend OutgoingEmailSend[] +} + +model OutgoingEmailContent { + emailId BigInt @id + email OutgoingEmail @relation(fields: [emailId], references: [oid], onDelete: Cascade) + + html String + text String + subject String +} + +enum OutgoingEmailSendStatus { + success + failed +} + +model OutgoingEmailSend { + id BigInt @id + status OutgoingEmailSendStatus + + destinationId BigInt + destination OutgoingEmailDestination @relation(fields: [destinationId], references: [id], onDelete: Cascade) + + result Json + + createdAt DateTime @default(now()) +} diff --git a/src/systems/relay/service/src/controllers/_app.ts b/src/systems/relay/service/src/controllers/_app.ts new file mode 100644 index 000000000..5cc51480b --- /dev/null +++ b/src/systems/relay/service/src/controllers/_app.ts @@ -0,0 +1,3 @@ +import { Group } from '@lowerdeck/rpc-server'; + +export let app = new Group(); diff --git a/src/systems/relay/service/src/controllers/email.ts b/src/systems/relay/service/src/controllers/email.ts new file mode 100644 index 000000000..218cfd092 --- /dev/null +++ b/src/systems/relay/service/src/controllers/email.ts @@ -0,0 +1,41 @@ +import { v } from '@lowerdeck/validation'; +import { emailService } from '../services'; +import { app } from './_app'; +import { senderApp } from './sender'; + +export let emailController = app.controller({ + send: senderApp + .handler() + .input( + v.object({ + senderId: v.string(), + emailIdentityId: v.string(), + + type: v.optional(v.enumOf(['email'])), + to: v.array(v.string()), + template: v.record(v.any()), + content: v.object({ + subject: v.string(), + html: v.string(), + text: v.string() + }) + }) + ) + .do(async ctx => { + let emailIdentity = await emailService.getIdentityById({ + id: ctx.input.emailIdentityId, + sender: ctx.sender + }); + + let email = await emailService.sendEmail({ + identity: emailIdentity, + + type: ctx.input.type || 'email', + to: ctx.input.to, + template: ctx.input.template, + content: ctx.input.content + }); + + return { id: email.id }; + }) +}); diff --git a/src/systems/relay/service/src/controllers/emailIdentity.ts b/src/systems/relay/service/src/controllers/emailIdentity.ts new file mode 100644 index 000000000..8ce0e8b0d --- /dev/null +++ b/src/systems/relay/service/src/controllers/emailIdentity.ts @@ -0,0 +1,49 @@ +import { v } from '@lowerdeck/validation'; +import { emailIdentityPresenter } from '../presenters'; +import { emailService } from '../services'; +import { app } from './_app'; +import { senderApp } from './sender'; + +export let emailIdentityApp = senderApp.use(async ctx => { + let emailIdentityId = ctx.body.emailIdentityId; + if (!emailIdentityId) throw new Error('Tenant ID is required'); + + let emailIdentity = await emailService.getIdentityById({ + id: emailIdentityId, + sender: ctx.sender + }); + + return { emailIdentity }; +}); + +export let emailIdentityController = app.controller({ + upsert: senderApp + .handler() + .input( + v.object({ + senderId: v.string(), + + name: v.string(), + email: v.string() + }) + ) + .do(async ctx => { + let emailIdentity = await emailService.ensureCustomIdentity({ + sender: ctx.sender, + email: ctx.input.email, + name: ctx.input.name + }); + + return emailIdentityPresenter(emailIdentity); + }), + + get: emailIdentityApp + .handler() + .input( + v.object({ + senderId: v.string(), + emailIdentityId: v.string() + }) + ) + .do(async ctx => emailIdentityPresenter(ctx.emailIdentity)) +}); diff --git a/src/systems/relay/service/src/controllers/index.ts b/src/systems/relay/service/src/controllers/index.ts new file mode 100644 index 000000000..9f4b59b28 --- /dev/null +++ b/src/systems/relay/service/src/controllers/index.ts @@ -0,0 +1,17 @@ +import { apiMux } from '@lowerdeck/api-mux'; +import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { app } from './_app'; +import { emailController } from './email'; +import { emailIdentityController } from './emailIdentity'; +import { senderController } from './sender'; + +export let rootController = app.controller({ + emailIdentity: emailIdentityController, + sender: senderController, + email: emailController +}); + +export let RelayRPC = createServer({})(rootController); +export let RelayApi = apiMux([{ endpoint: rpcMux({ path: '/metorial-relay' }, [RelayRPC]) }]); + +export type RelayClient = InferClient; diff --git a/src/systems/relay/service/src/controllers/sender.ts b/src/systems/relay/service/src/controllers/sender.ts new file mode 100644 index 000000000..670fbaacb --- /dev/null +++ b/src/systems/relay/service/src/controllers/sender.ts @@ -0,0 +1,42 @@ +import { v } from '@lowerdeck/validation'; +import { senderPresenter } from '../presenters/sender'; +import { senderService } from '../services'; +import { app } from './_app'; + +export let senderApp = app.use(async ctx => { + let senderId = ctx.body.senderId; + if (!senderId) throw new Error('Sender ID is required'); + + let sender = await senderService.getSenderById({ id: senderId }); + + return { sender }; +}); + +export let senderController = app.controller({ + upsert: app + .handler() + .input( + v.object({ + name: v.string(), + identifier: v.string() + }) + ) + .do(async ctx => { + let sender = await senderService.upsertSender({ + input: { + name: ctx.input.name, + identifier: ctx.input.identifier + } + }); + return senderPresenter(sender); + }), + + get: senderApp + .handler() + .input( + v.object({ + senderId: v.string() + }) + ) + .do(async ctx => senderPresenter(ctx.sender)) +}); diff --git a/src/systems/relay/service/src/controllers/tests/sender.e2e.test.ts b/src/systems/relay/service/src/controllers/tests/sender.e2e.test.ts new file mode 100644 index 000000000..0c53776a4 --- /dev/null +++ b/src/systems/relay/service/src/controllers/tests/sender.e2e.test.ts @@ -0,0 +1,25 @@ +import { beforeEach, describe, expect, it } from 'vitest'; +import { cleanDatabase } from '../../test/setup'; +import { relayClient } from '../../test/client'; + +describe('relay sender.e2e', () => { + beforeEach(async () => { + await cleanDatabase(); + }); + + it('upserts and fetches a sender', async () => { + let created = await relayClient.sender.upsert({ + identifier: 'metorial', + name: 'Metorial' + }); + + expect(created).toMatchObject({ + id: expect.any(String), + identifier: 'metorial', + name: 'Metorial' + }); + + let fetched = await relayClient.sender.get({ senderId: created.id }); + expect(fetched.name).toBe('Metorial'); + }); +}); diff --git a/src/systems/relay/service/src/cron/cleanup.ts b/src/systems/relay/service/src/cron/cleanup.ts new file mode 100644 index 000000000..ee764d71c --- /dev/null +++ b/src/systems/relay/service/src/cron/cleanup.ts @@ -0,0 +1,24 @@ +import { createCron } from '@lowerdeck/cron'; +import { subDays } from 'date-fns'; +import { db } from '../db'; +import { env } from '../env'; + +export let cleanupCron = createCron( + { + name: 'fed/email/cleanup', + cron: '0 0 * * *', + redisUrl: env.service.REDIS_URL + }, + async () => { + let now = new Date(); + let oneMonthAgo = subDays(now, 30); + + await db.outgoingEmail.deleteMany({ + where: { + createdAt: { + lt: oneMonthAgo + } + } + }); + } +); diff --git a/src/systems/relay/service/src/db.ts b/src/systems/relay/service/src/db.ts new file mode 100644 index 000000000..070c4004e --- /dev/null +++ b/src/systems/relay/service/src/db.ts @@ -0,0 +1,12 @@ +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '../prisma/generated/client'; + +let adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }); + +export let db = new PrismaClient({ adapter }); + +declare global { + namespace PrismaJson { + type Headers = [string, string][]; + } +} diff --git a/src/systems/relay/service/src/endpoints.ts b/src/systems/relay/service/src/endpoints.ts new file mode 100644 index 000000000..b0b168441 --- /dev/null +++ b/src/systems/relay/service/src/endpoints.ts @@ -0,0 +1,30 @@ +import { RedisClient } from 'bun'; +import { RelayApi } from './controllers'; +import { db } from './db'; + +let server = Bun.serve({ + fetch: RelayApi, + port: 52110 +}); + +console.log(`Service running on http://localhost:${server.port}`); + +let redis = new RedisClient(process.env.REDIS_URL?.replace('rediss://', 'redis://'), { + tls: process.env.REDIS_URL?.startsWith('rediss://') +}); + +Bun.serve({ + fetch: async _ => { + try { + await db.emailIdentity.count(); + + await redis.ping(); + + return new Response('OK'); + } catch (e) { + console.error('Health check failed', e); + return new Response('Service Unavailable', { status: 503 }); + } + }, + port: 12121 +}); diff --git a/src/systems/relay/service/src/env.ts b/src/systems/relay/service/src/env.ts new file mode 100644 index 000000000..00fcd924c --- /dev/null +++ b/src/systems/relay/service/src/env.ts @@ -0,0 +1,21 @@ +import { createValidatedEnv } from '@lowerdeck/env'; +import { v } from '@lowerdeck/validation'; + +export let env = createValidatedEnv({ + service: { + REDIS_URL: v.string(), + DATABASE_URL: v.string() + }, + + email: { + EMAIL_HOST: v.optional(v.string()), + EMAIL_PORT: v.optional(v.number()), + EMAIL_SECURE: v.optional(v.boolean()), + EMAIL_USER: v.optional(v.string()), + EMAIL_PASSWORD: v.optional(v.string()), + + EMAIL_SES_ACCESS_KEY_ID: v.optional(v.string()), + EMAIL_SES_SECRET_ACCESS_KEY: v.optional(v.string()), + EMAIL_SES_REGION: v.optional(v.string()) + } +}); diff --git a/src/systems/relay/service/src/id.ts b/src/systems/relay/service/src/id.ts new file mode 100644 index 000000000..0aea2af05 --- /dev/null +++ b/src/systems/relay/service/src/id.ts @@ -0,0 +1,39 @@ +import { createIdGenerator, idType } from '@lowerdeck/id'; +import { Snowflake } from '@lowerdeck/snowflake'; + +export let ID = createIdGenerator({ + emailIdentity: idType.sorted('eid'), + outgoingEmail: idType.sorted('oe'), + outgoingEmailDestination: idType.sorted('oed'), + outgoingEmailSend: idType.sorted('oes'), + sender: idType.sorted('es') +}); + +let workerIdBits = 12; +let workerIdMask = (1 << workerIdBits) - 1; + +let workerId = (() => { + let array = new Uint16Array(1); + crypto.getRandomValues(array); + return array[0]! & workerIdMask; +})(); + +export let snowflake = new Snowflake({ + workerId, + datacenterId: 0, + workerIdBits: workerIdBits, + datacenterIdBits: 0, + sequenceBits: 9, + epoch: new Date('2025-06-01T00:00:00Z') +}); + +export let getId = [0]>(model: K) => ({ + oid: snowflake.nextId(), + id: ID.generateIdSync(model) +}); + +export let get4ByteIntId = (): number => { + let buffer = new Int32Array(1); + crypto.getRandomValues(buffer); + return buffer[0]!; +}; diff --git a/src/systems/relay/service/src/init.ts b/src/systems/relay/service/src/init.ts new file mode 100644 index 000000000..5ace028e6 --- /dev/null +++ b/src/systems/relay/service/src/init.ts @@ -0,0 +1,34 @@ +if (!process.env.DATABASE_URL) { + if ( + !process.env.DATABASE_USERNAME || + !process.env.DATABASE_PASSWORD || + !process.env.DATABASE_HOST || + !process.env.DATABASE_PORT || + !process.env.DATABASE_NAME + ) { + throw new Error('DATABASE_URL is not set and database component env vars are missing'); + } + + process.env.DATABASE_URL = `postgres://${process.env.DATABASE_USERNAME}:${process.env.DATABASE_PASSWORD}@${process.env.DATABASE_HOST}:${process.env.DATABASE_PORT}/${process.env.DATABASE_NAME}?schema=public&sslmode=no-verify&connection_limit=20`; +} + +if (!process.env.REDIS_URL) { + if (!process.env.REDIS_AUTH_TOKEN || !process.env.REDIS_HOST || !process.env.REDIS_PORT) { + throw new Error('REDIS_URL is not set and redis component env vars are missing'); + } + + process.env.REDIS_URL = `${ + process.env.REDIS_TLS == 'true' ? 'rediss' : 'redis' + }://:${process.env.REDIS_AUTH_TOKEN}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/0`; +} else { + // Ensure Redis URL includes an explicit DB index. + try { + const url = new URL(process.env.REDIS_URL); + if (url.pathname === '' || url.pathname === '/') { + url.pathname = '/0'; + process.env.REDIS_URL = url.toString(); + } + } catch { + // If parsing fails, leave REDIS_URL as-is. + } +} diff --git a/src/systems/relay/service/src/instrument.ts b/src/systems/relay/service/src/instrument.ts new file mode 100644 index 000000000..f1f173b93 --- /dev/null +++ b/src/systems/relay/service/src/instrument.ts @@ -0,0 +1,36 @@ +import { setSentry } from '@lowerdeck/sentry'; +import * as Sentry from '@sentry/bun'; + +declare global { + // eslint-disable-next-line no-var + var sentryInitialized: boolean | undefined; +} + +if ( + process.env.METORIAL_ENV !== 'development' && + !global.sentryInitialized && + process.env.SENTRY_DSN +) { + global.sentryInitialized = true; + + Sentry.init({ + dsn: process.env.SENTRY_DSN, + + sendDefaultPii: true, + + environment: process.env.METORIAL_ENV, + + beforeSend(event) { + // Optional: add allocation ID to all events here as fallback + if (!event.tags) event.tags = {}; + event.tags.allocationId = process.env.NOMAD_ALLOC_ID || 'unknown'; + return event; + }, + + ignoreErrors: ['The client is closed'] + }); + + setSentry(Sentry as any); + + console.log('Sentry initialized for Bun'); +} diff --git a/src/systems/relay/service/src/lib/send.ts b/src/systems/relay/service/src/lib/send.ts new file mode 100644 index 000000000..26b54adc6 --- /dev/null +++ b/src/systems/relay/service/src/lib/send.ts @@ -0,0 +1,98 @@ +import { GetSendQuotaCommand, SendEmailCommand, SESClient } from '@aws-sdk/client-ses'; +import nodemailer from 'nodemailer'; +import type { EmailIdentity } from '../../prisma/generated/browser'; +import { env } from '../env'; + +let transport = env.email.EMAIL_SES_REGION + ? { + type: 'ses' as const, + client: new SESClient( + env.email.EMAIL_SES_ACCESS_KEY_ID + ? { + region: env.email.EMAIL_SES_REGION!, + credentials: { + accessKeyId: env.email.EMAIL_SES_ACCESS_KEY_ID!, + secretAccessKey: env.email.EMAIL_SES_SECRET_ACCESS_KEY! + } + } + : { + region: env.email.EMAIL_SES_REGION + } + ) + } + : { + type: 'smtp' as const, + client: nodemailer.createTransport({ + host: env.email.EMAIL_HOST, + port: env.email.EMAIL_PORT, + secure: env.email.EMAIL_SECURE, + auth: { + user: env.email.EMAIL_USER, + pass: env.email.EMAIL_PASSWORD + } + }) + }; + +export let checkSesAccess = async () => { + if (transport.type !== 'ses') return; + + await transport.client.send(new GetSendQuotaCommand({})); + console.log('SES access verified'); +}; + +export let send = async (opts: { + to: string; + subject: string; + html: string; + text: string; + identity: EmailIdentity; +}) => { + if (process.env.METORIAL_ENV == 'staging') { + opts.subject = `[STAGING] ${opts.subject}`; + } else if (process.env.METORIAL_ENV == 'development') { + opts.subject = `[DEV] ${opts.subject}`; + } + + if (transport.type == 'ses') { + let result = await transport.client.send( + new SendEmailCommand({ + Destination: { + ToAddresses: [opts.to] + }, + Message: { + Body: { + Html: { + Charset: 'UTF-8', + Data: opts.html + }, + Text: { + Charset: 'UTF-8', + Data: opts.text + } + }, + Subject: { + Charset: 'UTF-8', + Data: `${opts.identity.subjectMarker || ''}${opts.subject}` + } + }, + Source: `${opts.identity.fromName} <${opts.identity.fromEmail}>` + }) + ); + + return result; + } + + let result = await transport.client.sendMail({ + from: `${opts.identity.fromName} <${opts.identity.fromEmail}>`, + to: opts.to, + subject: `${opts.identity.subjectMarker || ''}${opts.subject}`, + html: opts.html, + text: opts.text + }); + + return { + messageId: result.messageId, + response: result.response, + rejected: result.rejected + }; +}; diff --git a/src/systems/relay/service/src/presenters/emailIdentity.ts b/src/systems/relay/service/src/presenters/emailIdentity.ts new file mode 100644 index 000000000..63a2c32e6 --- /dev/null +++ b/src/systems/relay/service/src/presenters/emailIdentity.ts @@ -0,0 +1,20 @@ +import type { EmailIdentity, Sender } from '../../prisma/generated/client'; + +export let emailIdentityPresenter = ( + emailIdentity: EmailIdentity & { + sender: Sender; + } +) => ({ + object: 'relay#email_identity', + + id: emailIdentity.id, + + type: emailIdentity.type, + + slug: emailIdentity.slug, + fromName: emailIdentity.fromName, + fromEmail: emailIdentity.fromEmail, + senderOid: emailIdentity.senderOid, + + createdAt: emailIdentity.createdAt +}); diff --git a/src/systems/relay/service/src/presenters/index.ts b/src/systems/relay/service/src/presenters/index.ts new file mode 100644 index 000000000..f26ae7401 --- /dev/null +++ b/src/systems/relay/service/src/presenters/index.ts @@ -0,0 +1,2 @@ +export * from './emailIdentity'; +export * from './sender'; diff --git a/src/systems/relay/service/src/presenters/sender.ts b/src/systems/relay/service/src/presenters/sender.ts new file mode 100644 index 000000000..860791700 --- /dev/null +++ b/src/systems/relay/service/src/presenters/sender.ts @@ -0,0 +1,11 @@ +import type { Sender } from '../../prisma/generated/client'; + +export let senderPresenter = (sender: Sender) => ({ + object: 'relay#sender', + + id: sender.id, + identifier: sender.identifier, + name: sender.name, + + createdAt: sender.createdAt +}); diff --git a/src/systems/relay/service/src/queue/sendEmail.ts b/src/systems/relay/service/src/queue/sendEmail.ts new file mode 100644 index 000000000..e3a18cc31 --- /dev/null +++ b/src/systems/relay/service/src/queue/sendEmail.ts @@ -0,0 +1,36 @@ +import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { db } from '../db'; +import { env } from '../env'; +import { sendEmailSingleQueue } from './sendEmailSingle'; + +export let sendEmailQueue = createQueue<{ emailId: string }>({ + name: 'fed/email/send_email', + redisUrl: env.service.REDIS_URL, + jobOpts: { + attempts: 10 + }, + workerOpts: { + limiter: { + duration: 60 * 1000, + max: 50 + } + } +}); + +export let sendEmailQueueProcessor = sendEmailQueue.process(async data => { + let email = await db.outgoingEmail.findFirst({ + where: { + id: data.emailId + }, + include: { + destinations: true + } + }); + if (!email) throw new QueueRetryError(); + + await sendEmailSingleQueue.addMany( + email.destinations.map(d => ({ + destinationId: d.id + })) + ); +}); diff --git a/src/systems/relay/service/src/queue/sendEmailSingle.ts b/src/systems/relay/service/src/queue/sendEmailSingle.ts new file mode 100644 index 000000000..9c9ab3412 --- /dev/null +++ b/src/systems/relay/service/src/queue/sendEmailSingle.ts @@ -0,0 +1,124 @@ +import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { getSentry } from '@lowerdeck/sentry'; +import type { + OutgoingEmailDestination, + OutgoingEmailSendStatus +} from '../../prisma/generated/client'; +import { db } from '../db'; +import { env } from '../env'; +import { snowflake } from '../id'; +import { send } from '../lib/send'; + +let Sentry = getSentry(); + +export let sendEmailSingleQueue = createQueue<{ destinationId: bigint }>({ + name: 'fed/email/send_email_single', + redisUrl: env.service.REDIS_URL, + jobOpts: { + attempts: 10, + backoff: { + type: 'exponential', + delay: 1000 + } + }, + workerOpts: { + limiter: { + duration: 60 * 1000, + max: 50 + } + } +}); + +export let sendEmailSingleQueueProcessor = sendEmailSingleQueue.process(async data => { + let destination = await db.outgoingEmailDestination.findFirst({ + where: { + id: data.destinationId, + status: { + in: ['pending', 'retry'] + } + }, + include: { + email: { + include: { + content: true, + identity: true + } + } + } + }); + let email = destination?.email; + if (!destination || !email?.content) throw new QueueRetryError(); + + let sendRes: any; + let status: OutgoingEmailSendStatus = 'success'; + + try { + sendRes = await send({ + to: destination.destination, + subject: email.content.subject, + html: email.content.html.replaceAll('EMAIL_ID', email.id), + text: email.content.text.replaceAll('EMAIL_ID', email.id), + identity: email.identity + }); + } catch (err) { + Sentry.captureException(err); + status = 'failed'; + sendRes = JSON.stringify(err); + } + + await db.outgoingEmailSend.create({ + data: { + id: snowflake.nextId(), + destinationId: destination.id, + status, + result: sendRes + } + }); + + let sendCount = await db.outgoingEmailSend.count({ + where: { destinationId: destination.id } + }); + + let updatedDest: OutgoingEmailDestination; + + if (sendCount > 5 && status == 'failed') { + updatedDest = await db.outgoingEmailDestination.update({ + where: { id: destination.id }, + data: { status: 'failed' } + }); + } else if (status == 'failed') { + updatedDest = await db.outgoingEmailDestination.update({ + where: { id: destination.id }, + data: { status: 'retry' } + }); + + await sendEmailSingleQueue.add( + { destinationId: destination.id }, + { delay: 1000 * 60 * 5 } + ); + } else { + updatedDest = await db.outgoingEmailDestination.update({ + where: { id: destination.id }, + data: { status: 'sent' } + }); + } + + if (updatedDest.status != 'retry') { + let email = await db.outgoingEmail.update({ + where: { oid: destination.emailId }, + data: { + numberOfDestinationsCompleted: { + increment: 1 + } + } + }); + + // Get rid of the email content if all destinations have been sent + // This is to save space in the database + if (email.numberOfDestinations >= email.numberOfDestinationsCompleted) { + await db.outgoingEmailContent.deleteMany({ + where: { emailId: email.oid } + }); + } + } +}); diff --git a/src/systems/relay/service/src/server.ts b/src/systems/relay/service/src/server.ts new file mode 100644 index 000000000..8bb9918bf --- /dev/null +++ b/src/systems/relay/service/src/server.ts @@ -0,0 +1,21 @@ +import { createRequire } from 'module'; + +// Provide CommonJS `require` in ESM runtime for bundled deps. +const require = createRequire(import.meta.url); +// eslint-disable-next-line @typescript-eslint/no-explicit-any +(globalThis as any).require = require; + +async function main() { + await import('./init'); + await import('./instrument'); + await import('./endpoints'); + await import('./worker'); + + let { checkSesAccess } = await import('./lib/send'); + await checkSesAccess(); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/src/systems/relay/service/src/services/email.test.ts b/src/systems/relay/service/src/services/email.test.ts new file mode 100644 index 000000000..b833e014d --- /dev/null +++ b/src/systems/relay/service/src/services/email.test.ts @@ -0,0 +1,24 @@ +import { describe, expect, it } from 'vitest'; + +// normalizeTemplate is module-private; exercise via exported email service behavior indirectly. +// This unit test validates template normalization logic copied for coverage of plain objects. +let normalizeTemplate = (template: any): any => { + if (template === null || template === undefined) return template; + if (typeof template !== 'object') return template; + if (Array.isArray(template)) return template.map(normalizeTemplate); + let newObj: Record = {}; + for (let [key, value] of Object.entries(template)) { + newObj[key] = normalizeTemplate(value); + } + return newObj; +}; + +describe('normalizeTemplate', () => { + it('recursively clones plain objects', () => { + let input = { a: 1, b: { c: [2, { d: 3 }] } }; + let output = normalizeTemplate(input); + expect(output).toEqual(input); + expect(output).not.toBe(input); + expect(output.b).not.toBe(input.b); + }); +}); diff --git a/src/systems/relay/service/src/services/email.ts b/src/systems/relay/service/src/services/email.ts new file mode 100644 index 000000000..527c3e8da --- /dev/null +++ b/src/systems/relay/service/src/services/email.ts @@ -0,0 +1,135 @@ +import { createLocallyCachedFunction } from '@lowerdeck/cache'; +import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { Service } from '@lowerdeck/service'; +import type { EmailIdentity } from '../../prisma/generated/browser'; +import type { Sender } from '../../prisma/generated/client'; +import { db } from '../db'; +import { get4ByteIntId, ID, snowflake } from '../id'; +import { sendEmailQueue } from '../queue/sendEmail'; + +let normalizeTemplate = (template: any): any => { + if ( + typeof template == 'string' || + typeof template == 'number' || + typeof template == 'boolean' + ) + return template; + if (typeof template != 'object' || template === null) return undefined; + + if (Array.isArray(template)) return template.map(normalizeTemplate); + + let newObj: any = {}; + for (let key in template) { + let value = template[key]; + if (typeof value == 'string' || typeof value == 'number' || typeof value == 'boolean') { + newObj[key] = value; + } else { + newObj[key] = normalizeTemplate(value); + } + } + return newObj; +}; + +let getIdentity = createLocallyCachedFunction({ + getHash: (d: { sender: Sender; id: string }) => d.id + '-' + d.sender.oid, + ttlSeconds: 60, + provider: async (d: { sender: Sender; id: string }) => + await db.emailIdentity.findFirst({ + where: { + id: d.id, + senderOid: d.sender.oid + }, + include: { + sender: true + } + }) +}); + +class EmailService { + async ensureCustomIdentity(d: { sender: Sender; email: string; name: string }) { + return await db.emailIdentity.upsert({ + where: { + senderOid_slug: { + slug: d.email, + senderOid: d.sender.oid + } + }, + create: { + oid: get4ByteIntId(), + id: ID.generateIdSync('emailIdentity'), + type: 'email', + slug: d.email, + fromName: d.name, + fromEmail: d.email, + senderOid: d.sender.oid + }, + update: { + fromName: d.name, + fromEmail: d.email + }, + include: { + sender: true + } + }); + } + + async getIdentityById(d: { sender: Sender; id: string }) { + let identity = await getIdentity(d); + if (!identity) throw new ServiceError(notFoundError('email')); + return identity; + } + + async sendEmail(d: { + type: 'email'; + to: string[]; + template: any; + content: { + subject: string; + html: string; + text: string; + }; + identity: EmailIdentity; + }) { + let email = await db.outgoingEmail.create({ + data: { + oid: get4ByteIntId(), + id: ID.generateIdSync('outgoingEmail'), + + numberOfDestinations: d.to.length, + numberOfDestinationsCompleted: 0, + + values: normalizeTemplate(d.template), + + subject: d.content.subject, + + identityId: d.identity.oid + } + }); + + await db.outgoingEmailContent.createMany({ + data: { + subject: d.content.subject, + html: d.content.html, + text: d.content.text, + emailId: email.oid + } + }); + + await db.outgoingEmailDestination.createMany({ + data: d.to.map(t => ({ + id: snowflake.nextId(), + status: 'pending', + destination: t, + emailId: email.oid + })) + }); + + setTimeout(async () => { + await sendEmailQueue.add({ emailId: email.id }); + }, 1000); + + return email; + } +} + +export let emailService = Service.create('emailService', () => new EmailService()).build(); diff --git a/src/systems/relay/service/src/services/index.ts b/src/systems/relay/service/src/services/index.ts new file mode 100644 index 000000000..9efa5a5c4 --- /dev/null +++ b/src/systems/relay/service/src/services/index.ts @@ -0,0 +1,2 @@ +export * from './email'; +export * from './sender'; diff --git a/src/systems/relay/service/src/services/sender.ts b/src/systems/relay/service/src/services/sender.ts new file mode 100644 index 000000000..5ec65cb80 --- /dev/null +++ b/src/systems/relay/service/src/services/sender.ts @@ -0,0 +1,49 @@ +import { createLocallyCachedFunction } from '@lowerdeck/cache'; +import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { Service } from '@lowerdeck/service'; +import { db } from '../db'; +import { get4ByteIntId, ID } from '../id'; + +let include = {}; + +let getSenderByIdCached = createLocallyCachedFunction({ + getHash: (d: { id: string }) => d.id, + ttlSeconds: 60, + provider: async (d: { id: string }) => + db.sender.findFirst({ + where: { OR: [{ id: d.id }, { identifier: d.id }] }, + include + }) +}); + +class senderServiceImpl { + async upsertSender(d: { + input: { + name: string; + identifier: string; + }; + }) { + return await db.sender.upsert({ + where: { identifier: d.input.identifier }, + update: { name: d.input.name }, + create: { + oid: get4ByteIntId(), + id: await ID.generateId('sender'), + name: d.input.name, + identifier: d.input.identifier + }, + include + }); + } + + async getSenderById(d: { id: string }) { + let sender = await getSenderByIdCached(d); + if (!sender) throw new ServiceError(notFoundError('sender')); + return sender; + } +} + +export let senderService = Service.create( + 'senderService', + () => new senderServiceImpl() +).build(); diff --git a/src/systems/relay/service/src/test/client.ts b/src/systems/relay/service/src/test/client.ts new file mode 100644 index 000000000..dfed17039 --- /dev/null +++ b/src/systems/relay/service/src/test/client.ts @@ -0,0 +1,29 @@ +import { createClient } from '@lowerdeck/rpc-client'; +import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { app } from '../controllers/_app'; +import { senderController } from '../controllers/sender'; + +type ClientOptsLike = Parameters[0]; + +let testRootController = app.controller({ sender: senderController }); +export type RelayTestClient = InferClient; + +let fetchRouter = createFetchRouter(); +let testRpc = createServer({})(testRootController); +let relayRpc = rpcMux({ path: '/metorial-relay' }, [testRpc]); + +let defaultEndpoint = 'http://relay.test/metorial-relay'; + +export let createTestRelayClient = (opts: Partial = {}) => { + let endpoint = opts.endpoint ?? defaultEndpoint; + fetchRouter.registerRoute(endpoint, request => relayRpc.fetch(request)); + fetchRouter.install(); + + return createClient({ + ...opts, + endpoint + } as ClientOptsLike); +}; + +export let relayClient = createTestRelayClient(); diff --git a/src/systems/relay/service/src/test/setup.ts b/src/systems/relay/service/src/test/setup.ts new file mode 100644 index 000000000..778775874 --- /dev/null +++ b/src/systems/relay/service/src/test/setup.ts @@ -0,0 +1,18 @@ +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '../../prisma/generated/client'; +import { afterAll } from 'vitest'; +import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; + +setupTestGlobals({ nodeEnv: 'test' }); + +let db = await setupPrismaTestDb({ + guard: 'relay-test', + prismaClientFactory: url => new PrismaClient({ adapter: new PrismaPg({ connectionString: url }) }) +}); + +afterAll(async () => { + await db.disconnect(); +}); + +export let testDb: PrismaClient = db.client; +export let cleanDatabase = db.clean; diff --git a/src/systems/relay/service/src/worker.ts b/src/systems/relay/service/src/worker.ts new file mode 100644 index 000000000..feec11690 --- /dev/null +++ b/src/systems/relay/service/src/worker.ts @@ -0,0 +1,10 @@ +import { runQueueProcessors } from '@lowerdeck/queue'; +import { cleanupCron } from './cron/cleanup'; +import { sendEmailQueueProcessor } from './queue/sendEmail'; +import { sendEmailSingleQueueProcessor } from './queue/sendEmailSingle'; + +await runQueueProcessors([ + sendEmailSingleQueueProcessor, + sendEmailQueueProcessor, + cleanupCron +]); diff --git a/src/systems/relay/service/tsconfig.json b/src/systems/relay/service/tsconfig.json new file mode 100644 index 000000000..a3f24add6 --- /dev/null +++ b/src/systems/relay/service/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": false, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + }, + "exclude": [ + "node_modules", + "tests/e2e", + "tests/helpers" + ] +} diff --git a/src/systems/relay/service/vitest.config.ts b/src/systems/relay/service/vitest.config.ts new file mode 100644 index 000000000..0ef5d4c67 --- /dev/null +++ b/src/systems/relay/service/vitest.config.ts @@ -0,0 +1,46 @@ +import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { resolve } from 'path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig(({ mode }) => { + const env = loadTestEnv(mode || 'test', process.cwd(), ''); + + const config = createVitestConfig({ + test: { + pool: 'forks', + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + }, + exclude: ['**/node_modules/**', '**/dist/**', '**/e2e/**'], + coverage: { + provider: 'v8', + reporter: ['text', 'json', 'html'], + exclude: [ + 'node_modules/**', + 'dist/**', + '**/*.d.ts', + '**/*.config.ts', + '**/prisma/**', + 'tests/**', + 'src/test/**', + 'src/**/tests/**', + 'src/server.ts', + 'src/worker.ts', + 'src/db.ts', + 'src/storage.ts', + 'src/env.ts', + 'src/id.ts' + ] + } + } + }); + + return withAliases(config, { + '@metorial-platform-systems/relay-client': resolve( + __dirname, + '../../_clients/relay/src/index.ts' + ) + }); +}); diff --git a/src/systems/relay/service/vitest.e2e.config.ts b/src/systems/relay/service/vitest.e2e.config.ts new file mode 100644 index 000000000..4e74c38dd --- /dev/null +++ b/src/systems/relay/service/vitest.e2e.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + return createVitestConfig({ + test: { + pool: 'forks', + fileParallelism: false, + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); +}); diff --git a/src/systems/relay/service/vitest.unit.config.ts b/src/systems/relay/service/vitest.unit.config.ts new file mode 100644 index 000000000..f6e4bae1e --- /dev/null +++ b/src/systems/relay/service/vitest.unit.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); diff --git a/src/systems/shuttle/service/package.json b/src/systems/shuttle/service/package.json index febc70181..f3e99e829 100644 --- a/src/systems/shuttle/service/package.json +++ b/src/systems/shuttle/service/package.json @@ -83,7 +83,7 @@ "ipaddr.js": "^2.3.0", "jsonata": "^2.1.0", "jszip": "^3.10.1", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "p-queue": "^9.1.0", "pg": "^8.16.3", "prisma": "^7.2.0", diff --git a/src/systems/shuttle/service/src/storage.ts b/src/systems/shuttle/service/src/storage.ts index a81283059..1d33bc336 100644 --- a/src/systems/shuttle/service/src/storage.ts +++ b/src/systems/shuttle/service/src/storage.ts @@ -1,5 +1,5 @@ import { delay } from '@lowerdeck/delay'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { db } from './db'; import { env } from './env'; diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index 68cd86027..8469348e7 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -66,7 +66,7 @@ "date-fns": "^4.1.0", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2" diff --git a/src/systems/signal/service/src/storage.ts b/src/systems/signal/service/src/storage.ts index 7aab33135..a73b7b31f 100644 --- a/src/systems/signal/service/src/storage.ts +++ b/src/systems/signal/service/src/storage.ts @@ -1,5 +1,5 @@ import { delay } from '@lowerdeck/delay'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; export let storage = new ObjectStorageClient(env.storage.OBJECT_STORAGE_URL, 1000 * 60 * 10); diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index 31d9824ae..dcc81c4bc 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -96,7 +96,7 @@ "hono": "^4.11.3", "jszip": "^3.10.1", "lodash": "4.17.21", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "p-queue": "^9.0.1", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", diff --git a/src/systems/slates/apps/hub/src/services/slateSessionToolCall.ts b/src/systems/slates/apps/hub/src/services/slateSessionToolCall.ts index 43838aa2e..fe5c3ad25 100644 --- a/src/systems/slates/apps/hub/src/services/slateSessionToolCall.ts +++ b/src/systems/slates/apps/hub/src/services/slateSessionToolCall.ts @@ -3,7 +3,7 @@ import { Paginator } from '@lowerdeck/pagination'; import { Service } from '@lowerdeck/service'; import type { SlatesParticipant } from '@slates/proto'; import { addDays, differenceInMinutes } from 'date-fns'; -import { PublicUrlPurpose } from 'object-storage-client'; +import { PublicUrlPurpose } from '@metorial-platform-systems/object-storage-client'; import type { SlateInvocation, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/slates/apps/hub/src/storage.ts b/src/systems/slates/apps/hub/src/storage.ts index 76dcb01b0..6214a7da3 100644 --- a/src/systems/slates/apps/hub/src/storage.ts +++ b/src/systems/slates/apps/hub/src/storage.ts @@ -1,5 +1,5 @@ import { delay } from '@lowerdeck/delay'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { db } from './db'; import { env } from './env'; diff --git a/src/systems/slates/apps/registry/package.json b/src/systems/slates/apps/registry/package.json index af2f87db2..1e199b416 100644 --- a/src/systems/slates/apps/registry/package.json +++ b/src/systems/slates/apps/registry/package.json @@ -5,7 +5,7 @@ "private": true, "scripts": { "start": "bun run server:start", - "check-types": "tsc --noEmit -p tsconfig.json", + "check-types": "tsc --noEmit -p tsconfig.server.json", "server:build": "bun run check-types && ncc build ./src/server.ts -o ./dist --source-map --transpile-only && bun run sentry:sourcemaps:if-token", "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-slates-registry ./dist && sentry-cli sourcemaps upload --org metorial --project mte-slates-registry ./dist", "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", @@ -21,7 +21,7 @@ "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts", "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", - "typecheck": "tsc --noEmit && bun run admin:typecheck", + "typecheck": "bun run check-types && bun run admin:typecheck", "admin:typecheck": "tsc --noEmit --project admin/tsconfig.json" }, "devDependencies": { @@ -85,7 +85,7 @@ "hono": "^4.11.3", "jszip": "^3.10.1", "lodash-es": "^4.17.22", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", diff --git a/src/systems/slates/apps/registry/src/storage.ts b/src/systems/slates/apps/registry/src/storage.ts index 90ab203d7..8b8da30bb 100644 --- a/src/systems/slates/apps/registry/src/storage.ts +++ b/src/systems/slates/apps/registry/src/storage.ts @@ -1,5 +1,5 @@ import { delay } from '@lowerdeck/delay'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; export let storage = new ObjectStorageClient(env.storage.OBJECT_STORAGE_URL); diff --git a/src/systems/slates/apps/registry/tsconfig.server.json b/src/systems/slates/apps/registry/tsconfig.server.json new file mode 100644 index 000000000..0cfb96e66 --- /dev/null +++ b/src/systems/slates/apps/registry/tsconfig.server.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": [ + "src/**/*.test.ts", + "src/**/*.test.tsx", + "src/**/*.spec.ts", + "src/**/*.spec.tsx", + "src/**/tests/**/*", + "src/test/**/*" + ] +} diff --git a/src/systems/slates/clients/registry-internal/dts-bundle-generator.config.json b/src/systems/slates/clients/registry-internal/dts-bundle-generator.config.json index 3ef3c06ca..51547a10f 100644 --- a/src/systems/slates/clients/registry-internal/dts-bundle-generator.config.json +++ b/src/systems/slates/clients/registry-internal/dts-bundle-generator.config.json @@ -12,7 +12,7 @@ "@lowerdeck/rpc-client", "@lowerdeck/rpc-server", "@lowerdeck/validation", - "object-storage-client" + "@metorial-platform-systems/object-storage-client" ] } } diff --git a/src/systems/slates/clients/registry/dts-bundle-generator.config.json b/src/systems/slates/clients/registry/dts-bundle-generator.config.json index 3ef3c06ca..51547a10f 100644 --- a/src/systems/slates/clients/registry/dts-bundle-generator.config.json +++ b/src/systems/slates/clients/registry/dts-bundle-generator.config.json @@ -12,7 +12,7 @@ "@lowerdeck/rpc-client", "@lowerdeck/rpc-server", "@lowerdeck/validation", - "object-storage-client" + "@metorial-platform-systems/object-storage-client" ] } } diff --git a/src/systems/subspace/modules/search/package.json b/src/systems/subspace/modules/search/package.json index 71311c879..da8bdd0ce 100644 --- a/src/systems/subspace/modules/search/package.json +++ b/src/systems/subspace/modules/search/package.json @@ -17,6 +17,6 @@ "@lowerdeck/env": "^1.0.6", "@lowerdeck/programmable-promise": "^1.0.6", "@lowerdeck/validation": "^1.0.10", - "@metorial-services/voyager-client": "^1.0.1" + "@metorial-platform-systems/voyager-client": "workspace:*" } } diff --git a/src/systems/subspace/modules/search/src/index.ts b/src/systems/subspace/modules/search/src/index.ts index 06477774a..9992059b5 100644 --- a/src/systems/subspace/modules/search/src/index.ts +++ b/src/systems/subspace/modules/search/src/index.ts @@ -1,6 +1,6 @@ import { delay } from '@lowerdeck/delay'; import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; -import { createVoyagerClient } from '@metorial-services/voyager-client'; +import { createVoyagerClient } from '@metorial-platform-systems/voyager-client'; import { env } from './env'; let getIndexName = (suffix?: string) => diff --git a/src/systems/subspace/packages/connection-utils/package.json b/src/systems/subspace/packages/connection-utils/package.json index 2bfaf04a2..854535495 100644 --- a/src/systems/subspace/packages/connection-utils/package.json +++ b/src/systems/subspace/packages/connection-utils/package.json @@ -20,7 +20,7 @@ "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@modelcontextprotocol/sdk": "^1.25.2", - "object-storage-client": "^0.2.5", + "@metorial-platform-systems/object-storage-client": "workspace:*", "zod": "^4.3.5" } } diff --git a/src/systems/subspace/packages/connection-utils/src/storage.ts b/src/systems/subspace/packages/connection-utils/src/storage.ts index 350215483..c5539e1ad 100644 --- a/src/systems/subspace/packages/connection-utils/src/storage.ts +++ b/src/systems/subspace/packages/connection-utils/src/storage.ts @@ -1,6 +1,6 @@ import { delay } from '@lowerdeck/delay'; import { db } from '@metorial-subspace/db'; -import { ObjectStorageClient } from 'object-storage-client'; +import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; export let storage = new ObjectStorageClient(env.storage.OBJECT_STORAGE_URL); diff --git a/src/systems/voyager/scripts/prepare-docker-build.sh b/src/systems/voyager/scripts/prepare-docker-build.sh new file mode 100755 index 000000000..980edbe24 --- /dev/null +++ b/src/systems/voyager/scripts/prepare-docker-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu + +cd /app +bun install --linker=hoisted diff --git a/src/systems/voyager/service/.dockerignore b/src/systems/voyager/service/.dockerignore new file mode 100644 index 000000000..1a2871578 --- /dev/null +++ b/src/systems/voyager/service/.dockerignore @@ -0,0 +1,14 @@ +node_modules +.git +.gitignore +*.md +.env +.env.* +!.env.example +.DS_Store +dist +build +coverage +.vscode +.idea +*.log diff --git a/src/systems/voyager/service/.env.example b/src/systems/voyager/service/.env.example new file mode 100644 index 000000000..8add84b10 --- /dev/null +++ b/src/systems/voyager/service/.env.example @@ -0,0 +1,5 @@ +# Service Configuration +DATABASE_URL=postgresql://forge:forge@postgres:5432/forge +REDIS_URL=redis://redis:6379 + +OBJECT_STORAGE_URL= diff --git a/src/systems/voyager/service/.gitignore b/src/systems/voyager/service/.gitignore new file mode 100644 index 000000000..17498908a --- /dev/null +++ b/src/systems/voyager/service/.gitignore @@ -0,0 +1,148 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.* +!.env.example + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Sveltekit cache directory +.svelte-kit/ + +# vitepress build output +**/.vitepress/dist + +# vitepress cache directory +**/.vitepress/cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# Firebase cache directory +.firebase/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v3 +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +# Vite logs files +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +prisma/generated +# Test coverage +coverage/ +.vitest/ + +# Test artifacts +tests/e2e/webhook-receiver/node_modules/ +tests/e2e/webhook-receiver/package-lock.json diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile new file mode 100644 index 000000000..43fce40d6 --- /dev/null +++ b/src/systems/voyager/service/Dockerfile @@ -0,0 +1,40 @@ +# Build stage +FROM oven/bun:1 AS builder + +WORKDIR /app + +ARG SENTRY_AUTH_TOKEN +ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} + +COPY . . + +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* +RUN sh ./src/systems/voyager/scripts/prepare-docker-build.sh + +WORKDIR /app/src/systems/voyager/service +RUN bun prisma generate +RUN bun run server:build + +FROM builder AS workspace + +WORKDIR /app/src/systems/voyager/service +CMD ["sleep", "infinity"] + +# Production stage +FROM oven/bun:1-alpine AS runner + +WORKDIR /app + +RUN apk add --no-cache curl + +COPY --from=builder /app/src/systems/voyager/service/dist /app/dist +COPY --from=builder /app/src/systems/voyager/service/prisma /app/prisma +COPY --from=builder /app/src/systems/voyager/service/prisma.config.ts /app/prisma.config.ts +COPY --from=builder /app/node_modules /app/node_modules + +EXPOSE 52060 + +HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:52060/metorial-voyager && curl -f http://localhost:12121/ || exit 1 + +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/voyager/service/control.toml b/src/systems/voyager/service/control.toml new file mode 100644 index 000000000..ac84e9bb2 --- /dev/null +++ b/src/systems/voyager/service/control.toml @@ -0,0 +1,43 @@ +[control] +name = "voyager" + +[service] +port = 52060 +dockerfile = "src/systems/voyager/service/Dockerfile" +build_context = "oss" +health = { cmd = "bun -e \"fetch('http://localhost:12121/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } + +[test.unit] +command = "bun run test:unit" + +[test.e2e] +command = "bun run test:e2e" +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] +cwd = "/app/src/systems/voyager/service" +runner = "service" + +[[databases]] +adapter = "postgres" +name = "voyager-test" + +[[databases]] +adapter = "postgres" +name = "voyager-search" + +[env] +DATABASE_URL = "$db.voyager-test.url" +SEARCH_DATABASE_URL = "$db.voyager-search.url" +REDIS_URL = "redis://$deps.redis.6379/0" + +[[deps]] +name = "postgres" +preset = "postgres" + +[deps.env] +POSTGRES_USER = "voyager" +POSTGRES_PASSWORD = "voyager" +POSTGRES_DB = "voyager" + +[[deps]] +name = "redis" +preset = "redis" diff --git a/src/systems/voyager/service/dev.Dockerfile b/src/systems/voyager/service/dev.Dockerfile new file mode 100644 index 000000000..5dd84d362 --- /dev/null +++ b/src/systems/voyager/service/dev.Dockerfile @@ -0,0 +1,18 @@ +FROM oven/bun:1 + +WORKDIR /app + +# Copy package files +COPY package.json bun.lock* ./ + +# Install dependencies +RUN bun install + +# Copy source code +COPY . . + +# Expose port +EXPOSE 51001 + +# Run in dev mode with hot reloading +CMD ["sh", "-c", "bun prisma db push && bun --watch src/server.ts"] diff --git a/src/systems/voyager/service/docker-compose.dev.yml b/src/systems/voyager/service/docker-compose.dev.yml new file mode 100644 index 000000000..1377b22d8 --- /dev/null +++ b/src/systems/voyager/service/docker-compose.dev.yml @@ -0,0 +1,54 @@ +version: '3.8' + +services: + postgres: + image: postgres:16-alpine + container_name: voyager-postgres + restart: unless-stopped + ports: + - "25432:5432" + environment: + POSTGRES_USER: voyager + POSTGRES_PASSWORD: voyager + POSTGRES_DB: voyager + volumes: + - postgres_data2:/var/lib/postgresql/data + networks: + - voyager-network + + redis: + image: redis:7-alpine + container_name: voyager-redis + restart: unless-stopped + networks: + - voyager-network + + voyager: + build: + context: . + dockerfile: dev.Dockerfile + container_name: voyager-service + restart: unless-stopped + ports: + - "52060:52060" + environment: + DATABASE_URL: postgresql://voyager:voyager@postgres:5432/voyager + SEARCH_DATABASE_URL: postgresql://voyager:voyager@postgres:5432/voyager-search + REDIS_URL: redis://redis:6379/0 + volumes: + - ./src:/app/src:ro + - ./package.json:/app/package.json:ro + - ./tsconfig.json:/app/tsconfig.json:ro + depends_on: + - postgres + - redis + networks: + - voyager-network + +volumes: + postgres_data2: + driver: local + +networks: + voyager-network: + driver: bridge diff --git a/src/systems/voyager/service/package.json b/src/systems/voyager/service/package.json new file mode 100644 index 000000000..81f65ba48 --- /dev/null +++ b/src/systems/voyager/service/package.json @@ -0,0 +1,77 @@ +{ + "name": "@metorial/voyager", + "module": "index.ts", + "type": "commonjs", + "private": true, + "scripts": { + "start": "bun run server:start", + "server:build": "ncc build ./src/server.ts -o ./dist --source-map --transpile-only && bun run sentry:sourcemaps:if-token", + "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-voyager ./dist && sentry-cli sourcemaps upload --org metorial --project mte-voyager ./dist", + "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", + "server:start": "bun ./dist/index.js", + "dev": "docker compose -p voyager -f ./docker-compose.dev.yml up --pull always --build voyager", + "prisma:generate": "bun run db:generate", + "prisma:push": "bun run db:push:dev", + "db:generate": "bun prisma generate", + "db:push:dev": "sh -c 'set -a; . .env; set +a; bun prisma db push --accept-data-loss'", + "db:push:test": "sh -c 'set -a; . .env.test; set +a; bun prisma db push --accept-data-loss'", + "db:push": "bun run db:push:dev && bun run db:push:test", + "test": "bun run test:unit && bun run test:e2e", + "test:unit": "bunx vitest run --config vitest.unit.config.ts", + "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", + "test:watch": "bunx vitest watch", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@lowerdeck/testing-tools": "^1.0.1", + "@types/bun": "latest", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "vitest": "4.0.17" + }, + "peerDependencies": { + "typescript": "^5" + }, + "dependencies": { + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@lowerdeck/api-mux": "^1.0.2", + "@lowerdeck/cache": "^1.0.1", + "@lowerdeck/canonicalize": "^1.0.4", + "@lowerdeck/cron": "^1.0.7", + "@lowerdeck/encryption": "^1.0.7", + "@lowerdeck/env": "^1.0.4", + "@lowerdeck/error": "^1.1.0", + "@lowerdeck/hash": "^1.0.4", + "@lowerdeck/id": "^1.0.6", + "@lowerdeck/once": "^1.0.4", + "@lowerdeck/pagination": "^1.0.5", + "@lowerdeck/queue": "^1.0.7", + "@lowerdeck/rpc-client": "^1.1.0", + "@lowerdeck/rpc-server": "^1.0.7", + "@lowerdeck/sentry": "^1.0.2", + "@lowerdeck/service": "^1.0.3", + "@lowerdeck/slugify": "^1.0.5", + "@lowerdeck/validation": "^1.0.4", + "@metorial-services/forge-client": "^1.0.3", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", + "@types/pg": "^8.16.0", + "algoliasearch": "^5.48.1", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "drizzle-orm": "^0.45.1", + "ipaddr.js": "^2.3.0", + "jszip": "^3.10.1", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "pg": "^8.16.3", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "snowflake-uuid": "^1.0.0", + "yaml": "^2.8.2" + } +} diff --git a/src/systems/voyager/service/prisma.config.ts b/src/systems/voyager/service/prisma.config.ts new file mode 100644 index 000000000..c6868c295 --- /dev/null +++ b/src/systems/voyager/service/prisma.config.ts @@ -0,0 +1,26 @@ +import 'dotenv/config'; +import { defineConfig } from 'prisma/config'; + +let databaseUrl = process.env.DATABASE_URL; + +if ( + !databaseUrl && + process.env.DATABASE_USERNAME && + process.env.DATABASE_PASSWORD && + process.env.DATABASE_HOST && + process.env.DATABASE_PORT && + process.env.DATABASE_NAME +) { + databaseUrl = `postgres://${process.env.DATABASE_USERNAME}:${process.env.DATABASE_PASSWORD}@${process.env.DATABASE_HOST}:${process.env.DATABASE_PORT}/${process.env.DATABASE_NAME}?schema=public&sslmode=no-verify&connection_limit=20`; +} + +export default defineConfig({ + schema: 'prisma/schema.prisma', + migrations: { + path: 'prisma/migrations' + }, + datasource: { + url: databaseUrl, + shadowDatabaseUrl: process.env['SHADOW_DATABASE_URL'] + } +}); diff --git a/src/systems/voyager/service/prisma/migrations/20260208195500_init/migration.sql b/src/systems/voyager/service/prisma/migrations/20260208195500_init/migration.sql new file mode 100644 index 000000000..6c4d49cc3 --- /dev/null +++ b/src/systems/voyager/service/prisma/migrations/20260208195500_init/migration.sql @@ -0,0 +1,108 @@ +-- CreateSchema +CREATE SCHEMA IF NOT EXISTS "public"; + +-- CreateTable +CREATE TABLE "Tenant" ( + "oid" BIGINT NOT NULL, + "id" TEXT NOT NULL, + "identifier" TEXT NOT NULL, + "name" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Tenant_pkey" PRIMARY KEY ("oid") +); + +-- CreateTable +CREATE TABLE "Source" ( + "oid" BIGINT NOT NULL, + "id" TEXT NOT NULL, + "identifier" TEXT NOT NULL, + "name" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Source_pkey" PRIMARY KEY ("oid") +); + +-- CreateTable +CREATE TABLE "Backend" ( + "oid" BIGINT NOT NULL, + "id" TEXT NOT NULL, + "isDefault" BOOLEAN NOT NULL, + "identifier" TEXT NOT NULL, + "name" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Backend_pkey" PRIMARY KEY ("oid") +); + +-- CreateTable +CREATE TABLE "Index" ( + "oid" BIGINT NOT NULL, + "id" TEXT NOT NULL, + "identifier" TEXT NOT NULL, + "name" TEXT NOT NULL, + "sourceOid" BIGINT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Index_pkey" PRIMARY KEY ("oid") +); + +-- CreateTable +CREATE TABLE "Record" ( + "oid" BIGINT NOT NULL, + "id" TEXT NOT NULL, + "indexOid" BIGINT NOT NULL, + "tenantOids" BIGINT[], + "isTenantSpecific" BOOLEAN NOT NULL, + "documentId" TEXT NOT NULL, + "body" JSONB NOT NULL, + "fields" JSONB NOT NULL, + "metadata" JSONB NOT NULL, + "hash" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Record_pkey" PRIMARY KEY ("oid") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_id_key" ON "Tenant"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_identifier_key" ON "Tenant"("identifier"); + +-- CreateIndex +CREATE UNIQUE INDEX "Source_id_key" ON "Source"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Source_identifier_key" ON "Source"("identifier"); + +-- CreateIndex +CREATE UNIQUE INDEX "Backend_id_key" ON "Backend"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Backend_identifier_key" ON "Backend"("identifier"); + +-- CreateIndex +CREATE UNIQUE INDEX "Index_id_key" ON "Index"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Index_sourceOid_identifier_key" ON "Index"("sourceOid", "identifier"); + +-- CreateIndex +CREATE UNIQUE INDEX "Record_id_key" ON "Record"("id"); + +-- CreateIndex +CREATE INDEX "Record_tenantOids_idx" ON "Record"("tenantOids"); + +-- CreateIndex +CREATE INDEX "Record_isTenantSpecific_idx" ON "Record"("isTenantSpecific"); + +-- CreateIndex +CREATE UNIQUE INDEX "Record_indexOid_documentId_key" ON "Record"("indexOid", "documentId"); + +-- AddForeignKey +ALTER TABLE "Index" ADD CONSTRAINT "Index_sourceOid_fkey" FOREIGN KEY ("sourceOid") REFERENCES "Source"("oid") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Record" ADD CONSTRAINT "Record_indexOid_fkey" FOREIGN KEY ("indexOid") REFERENCES "Index"("oid") ON DELETE RESTRICT ON UPDATE CASCADE; + diff --git a/src/systems/voyager/service/prisma/migrations/migration_lock.toml b/src/systems/voyager/service/prisma/migrations/migration_lock.toml new file mode 100644 index 000000000..2fe25d87c --- /dev/null +++ b/src/systems/voyager/service/prisma/migrations/migration_lock.toml @@ -0,0 +1 @@ +provider = "postgresql" diff --git a/src/systems/voyager/service/prisma/schema.prisma b/src/systems/voyager/service/prisma/schema.prisma new file mode 100644 index 000000000..e5ccb2764 --- /dev/null +++ b/src/systems/voyager/service/prisma/schema.prisma @@ -0,0 +1,91 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +generator client { + provider = "prisma-client" + output = "./generated" +} + +datasource db { + provider = "postgresql" +} + +generator json { + provider = "prisma-json-types-generator" +} + +model Tenant { + oid BigInt @id + id String @unique + + identifier String @unique + + createdAt DateTime @default(now()) +} + +model Source { + oid BigInt @id + id String @unique + + identifier String @unique + name String + + createdAt DateTime @default(now()) + + indices Index[] +} + +model Backend { + oid BigInt @id + id String @unique + + isDefault Boolean + + identifier String @unique + name String + + createdAt DateTime @default(now()) +} + +model Index { + oid BigInt @id + id String @unique + + identifier String + name String + + sourceOid BigInt + source Source @relation(fields: [sourceOid], references: [oid]) + + createdAt DateTime @default(now()) + + records Record[] + + @@unique([sourceOid, identifier]) +} + +model Record { + oid BigInt @id + id String @unique + + indexOid BigInt + index Index @relation(fields: [indexOid], references: [oid]) + + tenantOids BigInt[] + isTenantSpecific Boolean + + documentId String + body Json + fields Json + metadata Json + hash String + + createdAt DateTime @default(now()) + + @@unique([indexOid, documentId]) + @@index([tenantOids]) + @@index([isTenantSpecific]) +} diff --git a/src/systems/voyager/service/src/backend.ts b/src/systems/voyager/service/src/backend.ts new file mode 100644 index 000000000..755397958 --- /dev/null +++ b/src/systems/voyager/service/src/backend.ts @@ -0,0 +1,39 @@ +import { defaultBackend } from './backends'; +import { AlgoliaBackend } from './backends/algolia'; +import { db } from './db'; +import { getId } from './id'; + +let isAlgolia = defaultBackend instanceof AlgoliaBackend; + +if (isAlgolia) { + await db.backend.upsert({ + where: { identifier: 'algolia' }, + create: { + ...getId('backend'), + isDefault: true, + identifier: 'algolia', + name: 'Algolia', + id: 'algolia' + }, + update: { isDefault: true } + }); + + await db.backend.updateMany({ + where: { identifier: { not: 'algolia' } }, + data: { isDefault: false } + }); +} + +export let backend = await db.backend.upsert({ + where: { identifier: 'pg' }, + create: { + ...getId('backend'), + isDefault: !isAlgolia, + identifier: 'pg', + name: 'PostgreSQL', + id: 'pg' + }, + update: { + isDefault: !isAlgolia + } +}); diff --git a/src/systems/voyager/service/src/backends/_backend.ts b/src/systems/voyager/service/src/backends/_backend.ts new file mode 100644 index 000000000..22cea2642 --- /dev/null +++ b/src/systems/voyager/service/src/backends/_backend.ts @@ -0,0 +1,17 @@ +import type { Index, Record } from '../../prisma/generated/client'; + +export abstract class Backend { + abstract indexRecords(index: Index, records: Record[]): Promise; + abstract deleteRecordsById(index: Index, recordIds: string[]): Promise; + abstract searchRecords( + index: Index, + d: SearchParams + ): Promise<{ records: { documentId: string }[] }>; + abstract isEnabled(): boolean; +} + +export interface SearchParams { + query: string; + filters?: { [key: string]: any }; + tenantOids?: bigint[]; +} diff --git a/src/systems/voyager/service/src/backends/algolia/index.ts b/src/systems/voyager/service/src/backends/algolia/index.ts new file mode 100644 index 000000000..9d4e6e1d4 --- /dev/null +++ b/src/systems/voyager/service/src/backends/algolia/index.ts @@ -0,0 +1,85 @@ +import { algoliasearch, type Algoliasearch } from 'algoliasearch'; +import type { Record as DbRecord, Index } from '../../../prisma/generated/client'; +import { env } from '../../env'; +import { Backend, type SearchParams } from '../_backend'; + +export class AlgoliaBackend extends Backend { + private client?: Algoliasearch; + private prefix: string; + + constructor() { + super(); + this.client = + env.service.ALGOLIA_APP_ID && env.service.ALGOLIA_API_KEY + ? algoliasearch(env.service.ALGOLIA_APP_ID, env.service.ALGOLIA_API_KEY) + : undefined; + this.prefix = env.service.ALGOLIA_INDEX_PREFIX ?? ''; + } + + override isEnabled(): boolean { + return !!env.service.ALGOLIA_APP_ID && !!env.service.ALGOLIA_API_KEY; + } + + private indexName(index: Index): string { + return `${this.prefix}${index.identifier}`; + } + + async indexRecords(index: Index, records: DbRecord[]) { + if (records.length === 0) return; + + let objects = records.map(r => ({ + objectID: r.documentId, + fields: r.fields, + body: + typeof r.body === 'string' + ? r.body + : Object.values(r.body as any) + .filter(Boolean) + .join(', '), + tenantOids: r.isTenantSpecific ? r.tenantOids.map(String) : null + })); + + await this.client!.saveObjects({ + indexName: this.indexName(index), + objects + }); + } + + async deleteRecordsById(index: Index, recordIds: string[]) { + if (recordIds.length === 0) return; + + await this.client!.deleteObjects({ + indexName: this.indexName(index), + objectIDs: recordIds + }); + } + + async searchRecords(index: Index, { query, filters, tenantOids }: SearchParams) { + let facetFilters: string[] = []; + + if (filters && Object.keys(filters).length > 0) { + for (let [key, value] of Object.entries(filters)) { + facetFilters.push(`fields.${key}:${value}`); + } + } + + if (tenantOids?.length) { + facetFilters.push(tenantOids.map(oid => `tenantOids:${String(oid)}`).join(' OR ')); + } + + let filterString = facetFilters.join(' AND '); + + let result = await this.client!.searchSingleIndex({ + indexName: this.indexName(index), + searchParams: { + query: query || '', + filters: filterString || undefined, + hitsPerPage: 100 + } + }); + + return { + records: result.hits.map(h => ({ documentId: h.objectID })) + }; + } +} diff --git a/src/systems/voyager/service/src/backends/index.ts b/src/systems/voyager/service/src/backends/index.ts new file mode 100644 index 000000000..89edbc21c --- /dev/null +++ b/src/systems/voyager/service/src/backends/index.ts @@ -0,0 +1,5 @@ +import { AlgoliaBackend } from './algolia'; +import { PgBackend } from './pg'; + +let algolia = new AlgoliaBackend(); +export let defaultBackend = algolia.isEnabled() ? algolia : new PgBackend(); diff --git a/src/systems/voyager/service/src/backends/pg/index.ts b/src/systems/voyager/service/src/backends/pg/index.ts new file mode 100644 index 000000000..1bc84313f --- /dev/null +++ b/src/systems/voyager/service/src/backends/pg/index.ts @@ -0,0 +1,170 @@ +import { + and, + arrayOverlaps, + eq, + inArray, + isNull, + or, + sql, + type SQL +} from 'drizzle-orm'; +import type { Record as DbRecord, Index } from '../../../prisma/generated/client'; +import { Backend, type SearchParams } from '../_backend'; +import { db, records } from './schema'; +import { normalizeSearchQuery } from '../../utils/searchQuery'; + +const SUBSPACE_PROVIDER_LISTING_INDEX_IDENTIFIER = 'subspace_provider_listing'; + +export class PgBackend extends Backend { + override isEnabled(): boolean { + return !!db; + } + + async indexRecords(index: Index, recordsToInsert: DbRecord[]) { + if (!db) throw new Error('Database not initialized'); + + if (recordsToInsert.length === 0) return; + + for (let r of recordsToInsert) { + let inner = { + tenantOids: r.isTenantSpecific ? r.tenantOids : null, + fields: r.fields, + body: + typeof r.body == 'string' + ? r.body + : Object.values(r.body as any) + .filter(Boolean) + .join(', ') + }; + + await db + .insert(records) + .values({ + indexId: index.oid, + documentId: r.documentId, + ...inner + }) + .onConflictDoUpdate({ + target: records.documentId, + set: inner + }); + } + } + + async deleteRecordsById(index: Index, recordIds: string[]) { + if (!db) throw new Error('Database not initialized'); + + if (recordIds.length === 0) return; + + await db + .delete(records) + .where(and(eq(records.indexId, index.oid), inArray(records.documentId, recordIds))); + } + + private buildBaseWheres(index: Index, filters?: { [key: string]: any }, tenantOids?: bigint[]) { + let wheres: SQL[] = [eq(records.indexId, index.oid)]; + + if (filters && Object.keys(filters).length > 0) { + for (let [key, value] of Object.entries(filters)) { + wheres.push(sql`fields @> ${JSON.stringify({ [key]: value })}::jsonb`); + } + } + + if (tenantOids?.length) { + let tenantWhere = or( + isNull(records.tenantOids), + arrayOverlaps(records.tenantOids, tenantOids) + ); + + if (tenantWhere) { + wheres.push(tenantWhere); + } + } else { + wheres.push(isNull(records.tenantOids)); + } + + return wheres; + } + + private async searchRecordsByTitle( + index: Index, + normalizedQuery: string, + filters?: { [key: string]: any }, + tenantOids?: bigint[] + ) { + if (!db) throw new Error('Database not initialized'); + + let titleExpression = sql`btrim(split_part(${records.body}, ',', 1))`; + + return await db + .select({ documentId: records.documentId }) + .from(records) + .where( + and( + ...this.buildBaseWheres(index, filters, tenantOids), + sql`${titleExpression} ILIKE '%' || ${normalizedQuery} || '%'` + ) + ) + .orderBy( + sql`position(lower(${normalizedQuery}) in lower(${titleExpression}))`, + sql`char_length(${titleExpression})`, + records.documentId + ) + .limit(100); + } + + private async searchRecordsByBody( + index: Index, + normalizedQuery: string, + filters?: { [key: string]: any }, + tenantOids?: bigint[] + ) { + if (!db) throw new Error('Database not initialized'); + + let wheres = this.buildBaseWheres(index, filters, tenantOids); + + if (normalizedQuery) { + wheres.push(sql` + ( + body_search @@ plainto_tsquery('english', ${normalizedQuery}) + OR ( + char_length(${normalizedQuery}) >= 3 + AND ${normalizedQuery} <% body + ) + ) + `); + } + + return await db + .select({ documentId: records.documentId }) + .from(records) + .where(and(...wheres)) + .limit(100); + } + + async searchRecords(index: Index, { query, filters, tenantOids }: SearchParams) { + if (!db) throw new Error('Database not initialized'); + + let normalizedQuery = query ? normalizeSearchQuery(query) : ''; + + if ( + normalizedQuery && + index.identifier === SUBSPACE_PROVIDER_LISTING_INDEX_IDENTIFIER + ) { + let titleMatches = await this.searchRecordsByTitle( + index, + normalizedQuery, + filters, + tenantOids + ); + + if (titleMatches.length > 0) { + return { records: titleMatches }; + } + } + + return { + records: await this.searchRecordsByBody(index, normalizedQuery, filters, tenantOids) + }; + } +} diff --git a/src/systems/voyager/service/src/backends/pg/schema.ts b/src/systems/voyager/service/src/backends/pg/schema.ts new file mode 100644 index 000000000..17dfc094f --- /dev/null +++ b/src/systems/voyager/service/src/backends/pg/schema.ts @@ -0,0 +1,100 @@ +import { SQL, sql } from 'drizzle-orm'; +import { drizzle } from 'drizzle-orm/node-postgres'; +import { + bigint, + customType, + index, + jsonb, + pgTable, + serial, + text, + unique +} from 'drizzle-orm/pg-core'; +import { Pool } from 'pg'; +import { env } from '../../env'; + +export let tsvector = customType<{ data: string }>({ + dataType: () => `tsvector` +}); + +export let records = pgTable( + 'records', + { + id: serial('id').primaryKey(), + indexId: bigint('index_id', { mode: 'bigint' }).notNull(), + documentId: text('document_id').notNull(), + tenantOids: bigint('tenant_oids', { mode: 'bigint' }).array(), + fields: jsonb('fields').notNull(), + body: text('body').notNull(), + bodySearch: tsvector('body_search') + .notNull() + .generatedAlwaysAs((): SQL => sql`to_tsvector('english', body)`) + }, + t => [ + index('idx_body_search').using('gin', t.bodySearch), + index('idx_fields').using('gin', t.fields), + index('idx_tenant_oids').using('gin', t.tenantOids), + unique('idx_document_id').on(t.documentId) + ] +); + +export let db = env.service.SEARCH_DATABASE_URL + ? drizzle(env.service.SEARCH_DATABASE_URL, { + schema: { records } + }) + : null; + +if (db && env.service.SEARCH_DATABASE_URL) { + let dbUrl = new URL(env.service.SEARCH_DATABASE_URL); + let dbName = dbUrl.pathname.slice(1); + + let defaultPool = new Pool({ + connectionString: env.service.SEARCH_DATABASE_URL.replace(`/${dbName}`, '/postgres') + }); + let client = await defaultPool.connect(); + + try { + let res = await client.query(`SELECT 1 FROM pg_database WHERE datname = $1`, [dbName]); + if (res.rowCount === 0) { + await client.query(`CREATE DATABASE "${dbName}"`); + console.log(`Database "${dbName}" created.`); + } + } finally { + client.release(); + await defaultPool.end(); + } + + await db.execute(sql`CREATE EXTENSION IF NOT EXISTS pg_trgm;`); + + await db.execute(sql` + CREATE TABLE IF NOT EXISTS records ( + id serial PRIMARY KEY, + index_id bigint NOT NULL, + document_id text NOT NULL, + tenant_oids bigint[] NULL, + fields jsonb NOT NULL, + body text NOT NULL, + body_search tsvector GENERATED ALWAYS AS (to_tsvector('english', body)) STORED + ); + `); + + await db.execute( + sql`CREATE INDEX IF NOT EXISTS idx_body_search ON records USING gin (body_search);` + ); + await db.execute( + sql`CREATE INDEX IF NOT EXISTS idx_body_trgm ON records USING gin (body gin_trgm_ops);` + ); + await db.execute(sql` + CREATE INDEX IF NOT EXISTS idx_body_title_trgm + ON records USING gin ((btrim(split_part(body, ',', 1))) gin_trgm_ops); + `); + await db.execute(sql`CREATE INDEX IF NOT EXISTS idx_fields ON records USING gin (fields);`); + await db.execute( + sql`CREATE INDEX IF NOT EXISTS idx_tenant_oids ON records USING gin (tenant_oids);` + ); + await db.execute( + sql`CREATE UNIQUE INDEX IF NOT EXISTS idx_document_id ON records (document_id);` + ); + + console.log(`Database "${dbName}" initialized.`); +} diff --git a/src/systems/voyager/service/src/controllers/_app.ts b/src/systems/voyager/service/src/controllers/_app.ts new file mode 100644 index 000000000..5cc51480b --- /dev/null +++ b/src/systems/voyager/service/src/controllers/_app.ts @@ -0,0 +1,3 @@ +import { Group } from '@lowerdeck/rpc-server'; + +export let app = new Group(); diff --git a/src/systems/voyager/service/src/controllers/_index.ts b/src/systems/voyager/service/src/controllers/_index.ts new file mode 100644 index 000000000..f2fc93f25 --- /dev/null +++ b/src/systems/voyager/service/src/controllers/_index.ts @@ -0,0 +1,48 @@ +import { v } from '@lowerdeck/validation'; +import { indexPresenter } from '../presenters'; +import { indexService } from '../services'; +import { app } from './_app'; +import { sourceApp } from './source'; + +export let indexApp = sourceApp.use(async ctx => { + let indexId = ctx.body.indexId; + if (!indexId) throw new Error('Index ID is required'); + + let index = await indexService.getIndexById({ id: indexId, source: ctx.source }); + + return { index }; +}); + +export let indexController = app.controller({ + upsert: sourceApp + .handler() + .input( + v.object({ + sourceId: v.string(), + + name: v.string(), + identifier: v.string() + }) + ) + .do(async ctx => { + let index = await indexService.upsertIndex({ + input: { + source: ctx.source, + + name: ctx.input.name, + identifier: ctx.input.identifier + } + }); + return indexPresenter(index); + }), + + get: indexApp + .handler() + .input( + v.object({ + sourceId: v.string(), + indexId: v.string() + }) + ) + .do(async ctx => indexPresenter(ctx.index)) +}); diff --git a/src/systems/voyager/service/src/controllers/index.ts b/src/systems/voyager/service/src/controllers/index.ts new file mode 100644 index 000000000..ea9ceb56f --- /dev/null +++ b/src/systems/voyager/service/src/controllers/index.ts @@ -0,0 +1,21 @@ +import { apiMux } from '@lowerdeck/api-mux'; +import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { app } from './_app'; +import { indexController } from './_index'; +import { recordController } from './record'; +import { sourceController } from './source'; +import { tenantController } from './tenant'; + +export let rootController = app.controller({ + tenant: tenantController, + source: sourceController, + index: indexController, + record: recordController +}); + +export let VoyagerRPC = createServer({})(rootController); +export let VoyagerApi = apiMux([ + { endpoint: rpcMux({ path: '/metorial-voyager' }, [VoyagerRPC]) } +]); + +export type VoyagerClient = InferClient; diff --git a/src/systems/voyager/service/src/controllers/record.ts b/src/systems/voyager/service/src/controllers/record.ts new file mode 100644 index 000000000..cb01720a1 --- /dev/null +++ b/src/systems/voyager/service/src/controllers/record.ts @@ -0,0 +1,101 @@ +import { v } from '@lowerdeck/validation'; +import { recordPresenter } from '../presenters'; +import { recordService, tenantService } from '../services'; +import { app } from './_app'; +import { indexApp } from './_index'; +import { tenantApp } from './tenant'; + +export let recordApp = tenantApp.use(async ctx => { + let recordId = ctx.body.recordId; + if (!recordId) throw new Error('Record ID is required'); + + let record = await recordService.getRecordById({ id: recordId, tenant: ctx.tenant }); + + return { record }; +}); + +export let recordController = app.controller({ + index: indexApp + .handler() + .input( + v.object({ + sourceId: v.string(), + indexId: v.string(), + + documentId: v.string(), + tenantIds: v.optional(v.array(v.string())), + fields: v.record(v.any()), + body: v.union([v.string(), v.record(v.any())]), + metadata: v.optional(v.record(v.any())) + }) + ) + .do(async ctx => { + let record = await recordService.indexRecord({ + index: ctx.index, + input: { + documentId: ctx.input.documentId, + tenantIds: ctx.input.tenantIds, + fields: ctx.input.fields, + body: ctx.input.body, + metadata: ctx.input.metadata + } + }); + return recordPresenter(record); + }), + + delete: indexApp + .handler() + .input( + v.object({ + sourceId: v.string(), + indexId: v.string(), + + documentIds: v.array(v.string()) + }) + ) + .do(async ctx => { + await recordService.deleteRecords({ + index: ctx.index, + documentIds: ctx.input.documentIds + }); + + return { success: true }; + }), + + get: recordApp + .handler() + .input( + v.object({ + tenantId: v.string(), + recordId: v.string() + }) + ) + .do(async ctx => recordPresenter(ctx.record)), + + search: indexApp + .handler() + .input( + v.object({ + tenantId: v.optional(v.string()), + sourceId: v.string(), + indexId: v.string(), + + query: v.string(), + filters: v.optional(v.record(v.any())) + }) + ) + .do(async ctx => { + let tenant = ctx.input.tenantId + ? await tenantService.getTenantByIdSafe({ id: ctx.input.tenantId }) + : undefined; + + let res = await recordService.searchRecords({ + tenant, + index: ctx.index, + query: ctx.input.query, + filters: ctx.input.filters + }); + + return res.map(recordPresenter); + }) +}); diff --git a/src/systems/voyager/service/src/controllers/source.ts b/src/systems/voyager/service/src/controllers/source.ts new file mode 100644 index 000000000..cf6cc8465 --- /dev/null +++ b/src/systems/voyager/service/src/controllers/source.ts @@ -0,0 +1,42 @@ +import { v } from '@lowerdeck/validation'; +import { sourcePresenter } from '../presenters'; +import { sourceService } from '../services'; +import { app } from './_app'; + +export let sourceApp = app.use(async ctx => { + let sourceId = ctx.body.sourceId; + if (!sourceId) throw new Error('Source ID is required'); + + let source = await sourceService.getSourceById({ id: sourceId }); + + return { source }; +}); + +export let sourceController = app.controller({ + upsert: app + .handler() + .input( + v.object({ + name: v.string(), + identifier: v.string() + }) + ) + .do(async ctx => { + let source = await sourceService.upsertSource({ + input: { + name: ctx.input.name, + identifier: ctx.input.identifier + } + }); + return sourcePresenter(source); + }), + + get: sourceApp + .handler() + .input( + v.object({ + sourceId: v.string() + }) + ) + .do(async ctx => sourcePresenter(ctx.source)) +}); diff --git a/src/systems/voyager/service/src/controllers/tenant.ts b/src/systems/voyager/service/src/controllers/tenant.ts new file mode 100644 index 000000000..0d150fcee --- /dev/null +++ b/src/systems/voyager/service/src/controllers/tenant.ts @@ -0,0 +1,41 @@ +import { v } from '@lowerdeck/validation'; +import { tenantPresenter } from '../presenters'; +import { tenantService } from '../services'; +import { app } from './_app'; + +export let tenantApp = app.use(async ctx => { + let tenantId = ctx.body.tenantId; + if (!tenantId) throw new Error('Tenant ID is required'); + + let tenant = await tenantService.getTenantById({ id: tenantId }); + + return { tenant }; +}); + +export let tenantController = app.controller({ + upsert: app + .handler() + .input( + v.object({ + name: v.optional(v.string()), // Ignored, but kept for backwards compatibility + identifier: v.string() + }) + ) + .do(async ctx => { + let tenant = await tenantService.upsertTenant({ + input: { + identifier: ctx.input.identifier + } + }); + return tenantPresenter(tenant); + }), + + get: tenantApp + .handler() + .input( + v.object({ + tenantId: v.string() + }) + ) + .do(async ctx => tenantPresenter(ctx.tenant)) +}); diff --git a/src/systems/voyager/service/src/controllers/tests/tenant.e2e.test.ts b/src/systems/voyager/service/src/controllers/tests/tenant.e2e.test.ts new file mode 100644 index 000000000..a3dee9650 --- /dev/null +++ b/src/systems/voyager/service/src/controllers/tests/tenant.e2e.test.ts @@ -0,0 +1,21 @@ +import { beforeEach, describe, expect, it } from 'vitest'; +import { cleanDatabase } from '../../test/setup'; +import { voyagerClient } from '../../test/client'; + +describe('voyager tenant.e2e', () => { + beforeEach(async () => { + await cleanDatabase(); + }); + + it('upserts and fetches a tenant', async () => { + let created = await voyagerClient.tenant.upsert({ identifier: 'acme' }); + + expect(created).toMatchObject({ + id: expect.any(String), + identifier: 'acme' + }); + + let fetched = await voyagerClient.tenant.get({ tenantId: created.id }); + expect(fetched.identifier).toBe('acme'); + }); +}); diff --git a/src/systems/voyager/service/src/db.ts b/src/systems/voyager/service/src/db.ts new file mode 100644 index 000000000..48dd3eece --- /dev/null +++ b/src/systems/voyager/service/src/db.ts @@ -0,0 +1,37 @@ +import { PrismaPg } from '@prisma/adapter-pg'; +import { readReplicas } from '@prisma/extension-read-replicas'; +import { PrismaClient } from '../prisma/generated/client'; + +let mainAdapter = new PrismaPg({ + connectionString: process.env.DATABASE_URL +}); + +let replicaAdapter = process.env.DATABASE_URL_READER + ? new PrismaPg({ + connectionString: process.env.DATABASE_URL_READER + }) + : undefined; + +let replicaClient = replicaAdapter ? new PrismaClient({ adapter: replicaAdapter }) : undefined; + +let baseClient = new PrismaClient({ + adapter: mainAdapter, + transactionOptions: { + maxWait: 10000, + timeout: 12000 + } +}); + +if (replicaClient) { + baseClient = baseClient.$extends( + readReplicas({ replicas: [replicaClient] }) + ) as any as PrismaClient; +} + +export let db = baseClient; + +declare global { + namespace PrismaJson { + type Headers = [string, string][]; + } +} diff --git a/src/systems/voyager/service/src/endpoints.ts b/src/systems/voyager/service/src/endpoints.ts new file mode 100644 index 000000000..43e1ee252 --- /dev/null +++ b/src/systems/voyager/service/src/endpoints.ts @@ -0,0 +1,29 @@ +import { RedisClient } from 'bun'; +import { VoyagerApi } from './controllers'; +import { db } from './db'; + +let server = Bun.serve({ + fetch: VoyagerApi, + port: 52060 +}); + +console.log(`Service running on http://localhost:${server.port}`); + +let redis = new RedisClient(process.env.REDIS_URL?.replace('rediss://', 'redis://'), { + tls: process.env.REDIS_URL?.startsWith('rediss://') +}); + +Bun.serve({ + fetch: async _ => { + try { + await db.backend.count(); + + await redis.ping(); + + return new Response('OK'); + } catch (e) { + return new Response('Service Unavailable', { status: 503 }); + } + }, + port: 12121 +}); diff --git a/src/systems/voyager/service/src/env.ts b/src/systems/voyager/service/src/env.ts new file mode 100644 index 000000000..3ad24fcf4 --- /dev/null +++ b/src/systems/voyager/service/src/env.ts @@ -0,0 +1,13 @@ +import { createValidatedEnv } from '@lowerdeck/env'; +import { v } from '@lowerdeck/validation'; + +export let env = createValidatedEnv({ + service: { + REDIS_URL: v.string(), + DATABASE_URL: v.string(), + SEARCH_DATABASE_URL: v.string(), + ALGOLIA_APP_ID: v.optional(v.string()), + ALGOLIA_API_KEY: v.optional(v.string()), + ALGOLIA_INDEX_PREFIX: v.optional(v.string()) + } +}); diff --git a/src/systems/voyager/service/src/id.ts b/src/systems/voyager/service/src/id.ts new file mode 100644 index 000000000..578eb61bd --- /dev/null +++ b/src/systems/voyager/service/src/id.ts @@ -0,0 +1,31 @@ +import { createIdGenerator, idType } from '@lowerdeck/id'; +import { Worker as SnowflakeId } from 'snowflake-uuid'; + +export let ID = createIdGenerator({ + tenant: idType.sorted('vtn_'), + source: idType.sorted('vsn_'), + index: idType.sorted('vix_'), + backend: idType.sorted('vbe_'), + record: idType.sorted('vrc_') +}); + +let workerIdBits = 12; +let workerIdMask = (1 << workerIdBits) - 1; + +let workerId = (() => { + let array = new Uint16Array(1); + crypto.getRandomValues(array); + return array[0]! & workerIdMask; +})(); + +export let snowflake = new SnowflakeId(workerId, 0, { + workerIdBits: workerIdBits, + datacenterIdBits: 0, + sequenceBits: 9, + epoch: new Date('2025-06-01T00:00:00Z').getTime() +}); + +export let getId = [0]>(model: K) => ({ + oid: snowflake.nextId(), + id: ID.generateIdSync(model) +}); diff --git a/src/systems/voyager/service/src/init.ts b/src/systems/voyager/service/src/init.ts new file mode 100644 index 000000000..4f66f25c7 --- /dev/null +++ b/src/systems/voyager/service/src/init.ts @@ -0,0 +1,26 @@ +if (!process.env.DATABASE_URL) { + process.env.DATABASE_URL = `postgres://${process.env.DATABASE_USERNAME}:${process.env.DATABASE_PASSWORD}@${process.env.DATABASE_HOST}:${process.env.DATABASE_PORT}/${process.env.DATABASE_NAME}?schema=public&sslmode=no-verify&connection_limit=20`; + + if (process.env.DATABASE_READER === 'true') { + process.env.DATABASE_URL_READER = `postgres://${process.env.DATABASE_USERNAME}:${process.env.DATABASE_PASSWORD}@${process.env.DATABASE_HOST?.replace('.cluster-', '.cluster-ro-')}:${process.env.DATABASE_PORT}/${process.env.DATABASE_NAME}?schema=public&sslmode=no-verify&connection_limit=20`; + } +} + +if (!process.env.SEARCH_DATABASE_URL) { + process.env.SEARCH_DATABASE_URL = `postgres://${process.env.SEARCH_DATABASE_USERNAME}:${process.env.SEARCH_DATABASE_PASSWORD}@${process.env.SEARCH_DATABASE_HOST}:${process.env.SEARCH_DATABASE_PORT}/${process.env.SEARCH_DATABASE_NAME}?schema=public&sslmode=no-verify`; +} + +if (!process.env.REDIS_URL) { + process.env.REDIS_URL = `${process.env.REDIS_TLS == 'true' ? 'rediss' : 'redis'}://:${process.env.REDIS_AUTH_TOKEN}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/0`; +} else { + try { + let redisUrl = new URL(process.env.REDIS_URL); + + if (!redisUrl.pathname || redisUrl.pathname === '/') { + redisUrl.pathname = '/0'; + process.env.REDIS_URL = redisUrl.toString(); + } + } catch (error) { + console.warn('Invalid REDIS_URL; leaving as-is.'); + } +} diff --git a/src/systems/voyager/service/src/instrument.ts b/src/systems/voyager/service/src/instrument.ts new file mode 100644 index 000000000..a306a2ccf --- /dev/null +++ b/src/systems/voyager/service/src/instrument.ts @@ -0,0 +1,35 @@ +import { setSentry } from '@lowerdeck/sentry'; +import * as Sentry from '@sentry/bun'; + +declare global { + // eslint-disable-next-line no-var + var sentryInitialized: boolean | undefined; +} + +if ( + process.env.METORIAL_ENV !== 'development' && + !global.sentryInitialized && + process.env.SENTRY_DSN +) { + global.sentryInitialized = true; + + Sentry.init({ + dsn: process.env.SENTRY_DSN, + + sendDefaultPii: true, + + environment: process.env.METORIAL_ENV, + + beforeSend(event) { + if (!event.tags) event.tags = {}; + event.tags.allocationId = process.env.NOMAD_ALLOC_ID || 'unknown'; + return event; + }, + + ignoreErrors: ['The client is closed'] + }); + + setSentry(Sentry as any); + + console.log('Sentry initialized for Bun'); +} diff --git a/src/systems/voyager/service/src/presenters/index.ts b/src/systems/voyager/service/src/presenters/index.ts new file mode 100644 index 000000000..5c26705ce --- /dev/null +++ b/src/systems/voyager/service/src/presenters/index.ts @@ -0,0 +1,4 @@ +export * from './index_'; +export * from './record'; +export * from './source'; +export * from './tenant'; diff --git a/src/systems/voyager/service/src/presenters/index_.ts b/src/systems/voyager/service/src/presenters/index_.ts new file mode 100644 index 000000000..514a0e468 --- /dev/null +++ b/src/systems/voyager/service/src/presenters/index_.ts @@ -0,0 +1,14 @@ +import type { Index, Source } from '../../prisma/generated/client'; +import { sourcePresenter } from './source'; + +export let indexPresenter = (index: Index & { source: Source }) => ({ + object: 'voyager#index', + + id: index.id, + identifier: index.identifier, + name: index.name, + + source: sourcePresenter(index.source), + + createdAt: index.createdAt +}); diff --git a/src/systems/voyager/service/src/presenters/record.ts b/src/systems/voyager/service/src/presenters/record.ts new file mode 100644 index 000000000..dc2e8e083 --- /dev/null +++ b/src/systems/voyager/service/src/presenters/record.ts @@ -0,0 +1,18 @@ +import type { Record } from '../../prisma/generated/client'; + +export let recordPresenter = (record: Record) => ({ + object: 'voyager#record', + + id: record.id, + + documentId: record.documentId, + fields: record.fields, + body: record.body, + metadata: record.metadata, + + hash: record.hash, + + isTenantSpecific: record.isTenantSpecific, + + createdAt: record.createdAt +}); diff --git a/src/systems/voyager/service/src/presenters/source.ts b/src/systems/voyager/service/src/presenters/source.ts new file mode 100644 index 000000000..957765cec --- /dev/null +++ b/src/systems/voyager/service/src/presenters/source.ts @@ -0,0 +1,11 @@ +import type { Source } from '../../prisma/generated/client'; + +export let sourcePresenter = (source: Source) => ({ + object: 'voyager#source', + + id: source.id, + identifier: source.identifier, + name: source.name, + + createdAt: source.createdAt +}); diff --git a/src/systems/voyager/service/src/presenters/tenant.ts b/src/systems/voyager/service/src/presenters/tenant.ts new file mode 100644 index 000000000..8780992fa --- /dev/null +++ b/src/systems/voyager/service/src/presenters/tenant.ts @@ -0,0 +1,11 @@ +import type { Tenant } from '../../prisma/generated/client'; + +export let tenantPresenter = (tenant: Tenant) => ({ + object: 'voyager#tenant', + + id: tenant.id, + identifier: tenant.identifier, + name: tenant.name, + + createdAt: tenant.createdAt +}); diff --git a/src/systems/voyager/service/src/queues/cleanup.ts b/src/systems/voyager/service/src/queues/cleanup.ts new file mode 100644 index 000000000..9b615eb09 --- /dev/null +++ b/src/systems/voyager/service/src/queues/cleanup.ts @@ -0,0 +1,14 @@ +import { createCron } from '@lowerdeck/cron'; +import { subDays } from 'date-fns'; +import { env } from '../env'; + +export let cleanupProcessor = createCron( + { + name: 'voy/cleanup', + cron: '0 0 * * *', + redisUrl: env.service.REDIS_URL + }, + async () => { + let twoWeeksAgo = subDays(new Date(), 14); + } +); diff --git a/src/systems/voyager/service/src/queues/record.ts b/src/systems/voyager/service/src/queues/record.ts new file mode 100644 index 000000000..5546b7107 --- /dev/null +++ b/src/systems/voyager/service/src/queues/record.ts @@ -0,0 +1,34 @@ +import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { defaultBackend } from '../backends'; +import { db } from '../db'; +import { env } from '../env'; + +export let indexRecordQueue = createQueue<{ recordId: string }>({ + name: 'voy/idx', + redisUrl: env.service.REDIS_URL +}); + +export let indexRecordQueueProcessor = indexRecordQueue.process(async data => { + let record = await db.record.findUnique({ + where: { id: data.recordId }, + include: { index: true } + }); + if (!record) throw new QueueRetryError(); + + await defaultBackend.indexRecords(record.index, [record]); +}); + +export let deleteRecordQueue = createQueue<{ recordId: string }>({ + name: 'voy/del', + redisUrl: env.service.REDIS_URL +}); + +export let deleteRecordQueueProcessor = deleteRecordQueue.process(async data => { + let record = await db.record.findUnique({ + where: { id: data.recordId }, + include: { index: true } + }); + if (!record) throw new QueueRetryError(); + + await defaultBackend.deleteRecordsById(record.index, [record.id]); +}); diff --git a/src/systems/voyager/service/src/server.ts b/src/systems/voyager/service/src/server.ts new file mode 100644 index 000000000..03e3462d5 --- /dev/null +++ b/src/systems/voyager/service/src/server.ts @@ -0,0 +1,26 @@ +import { createRequire } from 'module'; + +// Provide CommonJS `require` in ESM runtime for bundled deps. +const require = createRequire(import.meta.url); +// eslint-disable-next-line @typescript-eslint/no-explicit-any +(globalThis as any).require = require; + +async function main() { + await import('./init'); + await import('./instrument'); + await import('./endpoints'); + await import('./worker'); +} + +main().catch(err => { + console.error(err); + process.exit(1); +}); + +if (process.env.HEARTBEAT_URL) { + setInterval(() => { + fetch(process.env.HEARTBEAT_URL!, { method: 'POST' }).catch(error => { + console.error('Failed to send heartbeat:', error); + }); + }, 45 * 1000); // Send heartbeat every 45 seconds +} diff --git a/src/systems/voyager/service/src/services/index.ts b/src/systems/voyager/service/src/services/index.ts new file mode 100644 index 000000000..5c26705ce --- /dev/null +++ b/src/systems/voyager/service/src/services/index.ts @@ -0,0 +1,4 @@ +export * from './index_'; +export * from './record'; +export * from './source'; +export * from './tenant'; diff --git a/src/systems/voyager/service/src/services/index_.ts b/src/systems/voyager/service/src/services/index_.ts new file mode 100644 index 000000000..c608e9603 --- /dev/null +++ b/src/systems/voyager/service/src/services/index_.ts @@ -0,0 +1,57 @@ +import { createLocallyCachedFunction } from '@lowerdeck/cache'; +import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { Service } from '@lowerdeck/service'; +import type { Source } from '../../prisma/generated/client'; +import { db } from '../db'; +import { ID, snowflake } from '../id'; + +let include = { source: true }; + +let getIndexByIdCached = createLocallyCachedFunction({ + getHash: (d: { id: string; sourceOid: bigint }) => d.id, + ttlSeconds: 60, + provider: async d => + db.index.findFirst({ + where: { OR: [{ id: d.id }, { identifier: d.id }], sourceOid: d.sourceOid }, + include + }) +}); + +class indexServiceImpl { + async upsertIndex(d: { + input: { + name: string; + identifier: string; + source: Source; + }; + }) { + return await db.index.upsert({ + where: { + sourceOid_identifier: { + sourceOid: d.input.source.oid, + identifier: d.input.identifier + } + }, + update: { name: d.input.name }, + create: { + oid: snowflake.nextId(), + id: await ID.generateId('index'), + name: d.input.name, + identifier: d.input.identifier, + sourceOid: d.input.source.oid + }, + include + }); + } + + async getIndexById(d: { id: string; source: Source }) { + let index = await getIndexByIdCached({ + id: d.id, + sourceOid: d.source.oid + }); + if (!index) throw new ServiceError(notFoundError('index')); + return index; + } +} + +export let indexService = Service.create('indexService', () => new indexServiceImpl()).build(); diff --git a/src/systems/voyager/service/src/services/record.ts b/src/systems/voyager/service/src/services/record.ts new file mode 100644 index 000000000..ceb269c3f --- /dev/null +++ b/src/systems/voyager/service/src/services/record.ts @@ -0,0 +1,161 @@ +import { canonicalize } from '@lowerdeck/canonicalize'; +import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { Hash } from '@lowerdeck/hash'; +import { Paginator } from '@lowerdeck/pagination'; +import { Service } from '@lowerdeck/service'; +import type { Index, Tenant } from '../../prisma/generated/client'; +import { defaultBackend } from '../backends'; +import { db } from '../db'; +import { getId } from '../id'; +import { deleteRecordQueue, indexRecordQueue } from '../queues/record'; + +let include = {}; + +class recordServiceImpl { + async indexRecord(d: { + index: Index; + input: { + documentId: string; + tenantIds?: string[]; + body: string | { [key: string]: any }; + fields: { [key: string]: any }; + metadata?: { [key: string]: any }; + }; + }) { + let uniqueTenants = [...new Set(d.input.tenantIds || [])]; + + let tenantFilter = uniqueTenants.length + ? { + where: { + OR: [{ id: { in: d.input.tenantIds } }, { identifier: { in: d.input.tenantIds } }] + }, + select: { oid: true } + } + : undefined; + + let tenantOids = tenantFilter + ? (await db.tenant.findMany(tenantFilter)).map(t => t.oid) + : []; + + if (tenantOids.length !== uniqueTenants.length) { + await db.tenant.createMany({ + skipDuplicates: true, + data: uniqueTenants.map(t => ({ + ...getId('tenant'), + identifier: t + })) + }); + + tenantOids = tenantFilter + ? (await db.tenant.findMany(tenantFilter)).map(t => t.oid) + : []; + } + + let hash = await Hash.sha256(canonicalize([d.input.body, d.input.fields])); + + let data = { + hash, + body: d.input.body, + fields: d.input.fields, + tenantOids: tenantOids, + metadata: d.input.metadata || {}, + isTenantSpecific: !!d.input.tenantIds?.length + }; + + let record = await db.record.upsert({ + where: { + indexOid_documentId: { + indexOid: d.index.oid, + documentId: d.input.documentId + } + }, + update: data, + create: { + ...getId('record'), + indexOid: d.index.oid, + documentId: d.input.documentId, + ...data + }, + include + }); + + await indexRecordQueue.add({ recordId: record.id }); + + return record; + } + + async searchRecords(d: { + index: Index; + tenant?: Tenant; + query: string; + filters?: { [key: string]: any }; + }) { + let res = await defaultBackend.searchRecords(d.index, { + query: d.query, + filters: d.filters, + tenantOids: d.tenant ? [d.tenant.oid] : undefined + }); + + let records = await db.record.findMany({ + where: { + indexOid: d.index.oid, + documentId: { in: res.records.map(r => r.documentId) } + }, + include + }); + + let recordsByDocumentId = new Map(records.map(record => [record.documentId, record])); + + let orderedRecords = res.records + .map(record => recordsByDocumentId.get(record.documentId)) + .filter(record => record !== undefined); + + return orderedRecords; + } + + async getRecordById(d: { id: string; tenant: Tenant }) { + let func = await db.record.findFirst({ + where: { + id: d.id, + tenantOids: { has: d.tenant.oid } + }, + include + }); + if (!func) throw new ServiceError(notFoundError('event_destination')); + return func; + } + + async listRecords(d: { tenant: Tenant }) { + return Paginator.create(({ prisma }) => + prisma( + async opts => + await db.record.findMany({ + ...opts, + where: { + OR: [ + { tenantOids: { has: d.tenant.oid }, isTenantSpecific: true }, + { isTenantSpecific: false } + ] + }, + include + }) + ) + ); + } + + async deleteRecords(d: { index: Index; documentIds: string[] }) { + let recordsToDelete = await db.record.findMany({ + where: { + indexOid: d.index.oid, + documentId: { in: d.documentIds } + } + }); + + await deleteRecordQueue.addMany(recordsToDelete.map(r => ({ recordId: r.id }))); + } +} + +export let recordService = Service.create( + 'recordService', + () => new recordServiceImpl() +).build(); diff --git a/src/systems/voyager/service/src/services/source.ts b/src/systems/voyager/service/src/services/source.ts new file mode 100644 index 000000000..25c4f028c --- /dev/null +++ b/src/systems/voyager/service/src/services/source.ts @@ -0,0 +1,49 @@ +import { createLocallyCachedFunction } from '@lowerdeck/cache'; +import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { Service } from '@lowerdeck/service'; +import { db } from '../db'; +import { ID, snowflake } from '../id'; + +let include = {}; + +let getSourceByIdCached = createLocallyCachedFunction({ + getHash: (d: { id: string }) => d.id, + ttlSeconds: 60, + provider: async (d: { id: string }) => + db.source.findFirst({ + where: { OR: [{ id: d.id }, { identifier: d.id }] }, + include + }) +}); + +class sourceServiceImpl { + async upsertSource(d: { + input: { + name: string; + identifier: string; + }; + }) { + return await db.source.upsert({ + where: { identifier: d.input.identifier }, + update: { name: d.input.name }, + create: { + oid: snowflake.nextId(), + id: await ID.generateId('source'), + name: d.input.name, + identifier: d.input.identifier + }, + include + }); + } + + async getSourceById(d: { id: string }) { + let source = await getSourceByIdCached(d); + if (!source) throw new ServiceError(notFoundError('source')); + return source; + } +} + +export let sourceService = Service.create( + 'sourceService', + () => new sourceServiceImpl() +).build(); diff --git a/src/systems/voyager/service/src/services/tenant.ts b/src/systems/voyager/service/src/services/tenant.ts new file mode 100644 index 000000000..69c749a77 --- /dev/null +++ b/src/systems/voyager/service/src/services/tenant.ts @@ -0,0 +1,42 @@ +import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { Service } from '@lowerdeck/service'; +import { db } from '../db'; +import { ID, snowflake } from '../id'; + +let include = {}; + +class tenantServiceImpl { + async upsertTenant(d: { + input: { + identifier: string; + }; + }) { + return await db.tenant.upsert({ + where: { identifier: d.input.identifier }, + update: {}, + create: { + oid: snowflake.nextId(), + id: await ID.generateId('tenant'), + identifier: d.input.identifier + } + }); + } + + async getTenantById(d: { id: string }) { + let tenant = await this.getTenantByIdSafe(d); + if (!tenant) throw new ServiceError(notFoundError('tenant')); + return tenant; + } + + async getTenantByIdSafe(d: { id: string }) { + let tenant = await db.tenant.findFirst({ + where: { OR: [{ id: d.id }, { identifier: d.id }] } + }); + return tenant ?? undefined; + } +} + +export let tenantService = Service.create( + 'tenantService', + () => new tenantServiceImpl() +).build(); diff --git a/src/systems/voyager/service/src/test/client.ts b/src/systems/voyager/service/src/test/client.ts new file mode 100644 index 000000000..ae49bd282 --- /dev/null +++ b/src/systems/voyager/service/src/test/client.ts @@ -0,0 +1,29 @@ +import { createClient } from '@lowerdeck/rpc-client'; +import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { app } from '../controllers/_app'; +import { tenantController } from '../controllers/tenant'; + +type ClientOptsLike = Parameters[0]; + +let testRootController = app.controller({ tenant: tenantController }); +export type VoyagerTestClient = InferClient; + +let fetchRouter = createFetchRouter(); +let testRpc = createServer({})(testRootController); +let voyagerRpc = rpcMux({ path: '/metorial-voyager' }, [testRpc]); + +let defaultEndpoint = 'http://voyager.test/metorial-voyager'; + +export let createTestVoyagerClient = (opts: Partial = {}) => { + let endpoint = opts.endpoint ?? defaultEndpoint; + fetchRouter.registerRoute(endpoint, request => voyagerRpc.fetch(request)); + fetchRouter.install(); + + return createClient({ + ...opts, + endpoint + } as ClientOptsLike); +}; + +export let voyagerClient = createTestVoyagerClient(); diff --git a/src/systems/voyager/service/src/test/setup.ts b/src/systems/voyager/service/src/test/setup.ts new file mode 100644 index 000000000..7d65dafa8 --- /dev/null +++ b/src/systems/voyager/service/src/test/setup.ts @@ -0,0 +1,18 @@ +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '../../prisma/generated/client'; +import { afterAll } from 'vitest'; +import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; + +setupTestGlobals({ nodeEnv: 'test' }); + +let db = await setupPrismaTestDb({ + guard: 'voyager-test', + prismaClientFactory: url => new PrismaClient({ adapter: new PrismaPg({ connectionString: url }) }) +}); + +afterAll(async () => { + await db.disconnect(); +}); + +export let testDb: PrismaClient = db.client; +export let cleanDatabase = db.clean; diff --git a/src/systems/voyager/service/src/utils/searchQuery.test.ts b/src/systems/voyager/service/src/utils/searchQuery.test.ts new file mode 100644 index 000000000..5831893a6 --- /dev/null +++ b/src/systems/voyager/service/src/utils/searchQuery.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, it } from 'vitest'; +import { normalizeSearchQuery } from './searchQuery'; + +describe('normalizeSearchQuery', () => { + it('strips symbols and collapses whitespace', () => { + expect(normalizeSearchQuery(' hello world!! ')).toBe('hello world'); + }); + + it('truncates long queries', () => { + let long = 'a'.repeat(600); + expect(normalizeSearchQuery(long).length).toBe(512); + }); +}); diff --git a/src/systems/voyager/service/src/utils/searchQuery.ts b/src/systems/voyager/service/src/utils/searchQuery.ts new file mode 100644 index 000000000..5514f60f7 --- /dev/null +++ b/src/systems/voyager/service/src/utils/searchQuery.ts @@ -0,0 +1,8 @@ +let SEARCH_QUERY_MAX_LENGTH = 512; + +export let normalizeSearchQuery = (query: string) => + query + .replace(/[^\p{L}\p{N}\s]+/gu, ' ') + .replace(/\s+/g, ' ') + .trim() + .slice(0, SEARCH_QUERY_MAX_LENGTH); diff --git a/src/systems/voyager/service/src/worker.ts b/src/systems/voyager/service/src/worker.ts new file mode 100644 index 000000000..f33c51d6a --- /dev/null +++ b/src/systems/voyager/service/src/worker.ts @@ -0,0 +1,9 @@ +import { runQueueProcessors } from '@lowerdeck/queue'; +import { cleanupProcessor } from './queues/cleanup'; +import { deleteRecordQueueProcessor, indexRecordQueueProcessor } from './queues/record'; + +await runQueueProcessors([ + indexRecordQueueProcessor, + deleteRecordQueueProcessor, + cleanupProcessor +]); diff --git a/src/systems/voyager/service/tsconfig.json b/src/systems/voyager/service/tsconfig.json new file mode 100644 index 000000000..a3f24add6 --- /dev/null +++ b/src/systems/voyager/service/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": false, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + }, + "exclude": [ + "node_modules", + "tests/e2e", + "tests/helpers" + ] +} diff --git a/src/systems/voyager/service/vitest.e2e.config.ts b/src/systems/voyager/service/vitest.e2e.config.ts new file mode 100644 index 000000000..4e74c38dd --- /dev/null +++ b/src/systems/voyager/service/vitest.e2e.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from 'vitest/config'; +import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; + +export default defineConfig(({ mode }) => { + let env = loadTestEnv(mode || 'test', process.cwd(), ''); + + return createVitestConfig({ + test: { + pool: 'forks', + fileParallelism: false, + include: ['src/**/*.e2e.test.ts'], + setupFiles: ['./src/test/setup.ts'], + env: { + ...env, + NODE_ENV: 'test' + } + } + }); +}); diff --git a/src/systems/voyager/service/vitest.unit.config.ts b/src/systems/voyager/service/vitest.unit.config.ts new file mode 100644 index 000000000..f6e4bae1e --- /dev/null +++ b/src/systems/voyager/service/vitest.unit.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['src/**/*.e2e.test.ts'], + pool: 'forks' + } +}); From e7083d25be9b9af71d04ea5fe71b9bffa2edc875 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 17:15:13 +0200 Subject: [PATCH 09/69] Update client builds --- .github/workflows/reusable-control.yml | 3 +++ src/systems/cargo/scripts/prepare-docker-build.sh | 2 +- src/systems/forge/scripts/prepare-docker-build.sh | 2 ++ .../function-bay/scripts/prepare-docker-build.sh | 7 ++++--- src/systems/origin/scripts/prepare-docker-build.sh | 2 ++ src/systems/relay/scripts/prepare-docker-build.sh | 3 +++ src/systems/scripts/build-workspace-clients.sh | 6 ++++++ src/systems/shuttle/scripts/prepare-docker-build.sh | 6 +++--- src/systems/signal/scripts/prepare-docker-build.sh | 2 ++ src/systems/slates/scripts/prepare-docker-build.sh | 6 ++---- src/systems/subspace/scripts/prepare-docker-build.sh | 10 +--------- src/systems/voyager/scripts/prepare-docker-build.sh | 3 +++ 12 files changed, 32 insertions(+), 20 deletions(-) create mode 100755 src/systems/scripts/build-workspace-clients.sh diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 42a4c6fb8..e08f75451 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -65,6 +65,9 @@ jobs: - name: Generate Prisma Clients run: bunx turbo run --ui=stream --concurrency=1 prisma:generate + - name: Build workspace clients + run: bunx turbo run --ui=stream build --filter=./src/systems/_clients/** + - name: Run control env: CONTROL_VERBOSE: '1' diff --git a/src/systems/cargo/scripts/prepare-docker-build.sh b/src/systems/cargo/scripts/prepare-docker-build.sh index 466f97337..3bf7a0d95 100755 --- a/src/systems/cargo/scripts/prepare-docker-build.sh +++ b/src/systems/cargo/scripts/prepare-docker-build.sh @@ -7,4 +7,4 @@ cd /app # imports through package exports. bun install --linker=hoisted -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/origin-client +sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/forge/scripts/prepare-docker-build.sh b/src/systems/forge/scripts/prepare-docker-build.sh index 24f71342a..37fd5e952 100755 --- a/src/systems/forge/scripts/prepare-docker-build.sh +++ b/src/systems/forge/scripts/prepare-docker-build.sh @@ -4,3 +4,5 @@ set -eu cd /app bun install --linker=hoisted + +sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/function-bay/scripts/prepare-docker-build.sh b/src/systems/function-bay/scripts/prepare-docker-build.sh index 18fc7555c..64d4b6df4 100644 --- a/src/systems/function-bay/scripts/prepare-docker-build.sh +++ b/src/systems/function-bay/scripts/prepare-docker-build.sh @@ -8,6 +8,7 @@ cd /app bun install --linker=hoisted bun run --cwd ./src/systems/forge/service db:generate -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client -bunx turbo run --ui=stream build --filter=./src/systems/function-bay/packages/** \ No newline at end of file + +sh ./src/systems/scripts/build-workspace-clients.sh + +bunx turbo run --ui=stream build --filter=./src/systems/function-bay/packages/** diff --git a/src/systems/origin/scripts/prepare-docker-build.sh b/src/systems/origin/scripts/prepare-docker-build.sh index cfd5fb978..91d6a749e 100755 --- a/src/systems/origin/scripts/prepare-docker-build.sh +++ b/src/systems/origin/scripts/prepare-docker-build.sh @@ -5,3 +5,5 @@ cd /app # Install the monorepo once so Docker builds do not depend on host node_modules. bun install --linker=hoisted + +sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/relay/scripts/prepare-docker-build.sh b/src/systems/relay/scripts/prepare-docker-build.sh index 980edbe24..37fd5e952 100755 --- a/src/systems/relay/scripts/prepare-docker-build.sh +++ b/src/systems/relay/scripts/prepare-docker-build.sh @@ -2,4 +2,7 @@ set -eu cd /app + bun install --linker=hoisted + +sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/scripts/build-workspace-clients.sh b/src/systems/scripts/build-workspace-clients.sh new file mode 100755 index 000000000..913689790 --- /dev/null +++ b/src/systems/scripts/build-workspace-clients.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -eu + +# Build generated workspace clients so services can resolve package exports +# without depending on prebuilt artifacts from CI or the host. +bunx turbo run --ui=stream build --filter=./src/systems/_clients/** diff --git a/src/systems/shuttle/scripts/prepare-docker-build.sh b/src/systems/shuttle/scripts/prepare-docker-build.sh index b79cc198e..424af51f8 100644 --- a/src/systems/shuttle/scripts/prepare-docker-build.sh +++ b/src/systems/shuttle/scripts/prepare-docker-build.sh @@ -10,6 +10,6 @@ bun install --linker=hoisted bun run --cwd ./src/systems/forge/service db:generate bun run --cwd ./src/systems/function-bay/service db:generate -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client -bunx turbo run --ui=stream build --filter=@metorial/mcp-server \ No newline at end of file +sh ./src/systems/scripts/build-workspace-clients.sh + +bunx turbo run --ui=stream build --filter=@metorial/mcp-server diff --git a/src/systems/signal/scripts/prepare-docker-build.sh b/src/systems/signal/scripts/prepare-docker-build.sh index 59b237eb6..bb67f06f7 100644 --- a/src/systems/signal/scripts/prepare-docker-build.sh +++ b/src/systems/signal/scripts/prepare-docker-build.sh @@ -6,3 +6,5 @@ cd /app # Install from the OSS workspace so local Signal packages resolve from the # monorepo instead of published artifacts. bun install --linker=hoisted + +sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/slates/scripts/prepare-docker-build.sh b/src/systems/slates/scripts/prepare-docker-build.sh index b1f8c9a11..0db8a53fb 100644 --- a/src/systems/slates/scripts/prepare-docker-build.sh +++ b/src/systems/slates/scripts/prepare-docker-build.sh @@ -12,8 +12,6 @@ bun run --cwd ./src/systems/function-bay/service db:generate bun run --cwd ./src/systems/signal/service db:generate bun run --cwd ./src/systems/ares/service db:generate -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/ares-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/signal-client +sh ./src/systems/scripts/build-workspace-clients.sh + # bunx turbo run --ui=stream build --filter=@slates/proto diff --git a/src/systems/subspace/scripts/prepare-docker-build.sh b/src/systems/subspace/scripts/prepare-docker-build.sh index 440070348..2c1923e2b 100644 --- a/src/systems/subspace/scripts/prepare-docker-build.sh +++ b/src/systems/subspace/scripts/prepare-docker-build.sh @@ -14,15 +14,7 @@ bun run --cwd ./src/systems/signal/service db:generate bun run --cwd ./src/systems/synthesis/service db:generate bun run --cwd ./src/systems/cargo/service db:generate -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/origin-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/signal-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/synthesis-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/cargo-client +sh ./src/systems/scripts/build-workspace-clients.sh # bunx turbo run --ui=stream build --filter=./src/systems/slates/packages/** bunx turbo run --ui=stream build --filter=./src/systems/shuttle/sdk/packages/** - -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/slates-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/shuttle-client diff --git a/src/systems/voyager/scripts/prepare-docker-build.sh b/src/systems/voyager/scripts/prepare-docker-build.sh index 980edbe24..37fd5e952 100755 --- a/src/systems/voyager/scripts/prepare-docker-build.sh +++ b/src/systems/voyager/scripts/prepare-docker-build.sh @@ -2,4 +2,7 @@ set -eu cd /app + bun install --linker=hoisted + +sh ./src/systems/scripts/build-workspace-clients.sh From 1df4f8e70e69bce0da7fc3c7a343583c16383f6c Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 17:30:58 +0200 Subject: [PATCH 10/69] Build fixes --- .github/workflows/reusable-control.yml | 4 ++-- src/systems/cargo/scripts/prepare-docker-build.sh | 2 ++ .../function-bay/scripts/prepare-docker-build.sh | 2 ++ src/systems/scripts/build-workspace-clients.sh | 6 +++--- src/systems/shuttle/scripts/prepare-docker-build.sh | 2 ++ src/systems/slates/scripts/prepare-docker-build.sh | 5 +++++ src/systems/subspace/scripts/prepare-docker-build.sh | 10 ++++++++++ 7 files changed, 26 insertions(+), 5 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index e08f75451..04208d1a4 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -65,8 +65,8 @@ jobs: - name: Generate Prisma Clients run: bunx turbo run --ui=stream --concurrency=1 prisma:generate - - name: Build workspace clients - run: bunx turbo run --ui=stream build --filter=./src/systems/_clients/** + - name: Build object storage client + run: bunx turbo run --ui=stream build --filter=@metorial-platform-systems/object-storage-client - name: Run control env: diff --git a/src/systems/cargo/scripts/prepare-docker-build.sh b/src/systems/cargo/scripts/prepare-docker-build.sh index 3bf7a0d95..ee1815595 100755 --- a/src/systems/cargo/scripts/prepare-docker-build.sh +++ b/src/systems/cargo/scripts/prepare-docker-build.sh @@ -8,3 +8,5 @@ cd /app bun install --linker=hoisted sh ./src/systems/scripts/build-workspace-clients.sh + +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/origin-client diff --git a/src/systems/function-bay/scripts/prepare-docker-build.sh b/src/systems/function-bay/scripts/prepare-docker-build.sh index 64d4b6df4..917577ff1 100644 --- a/src/systems/function-bay/scripts/prepare-docker-build.sh +++ b/src/systems/function-bay/scripts/prepare-docker-build.sh @@ -11,4 +11,6 @@ bun run --cwd ./src/systems/forge/service db:generate sh ./src/systems/scripts/build-workspace-clients.sh +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client bunx turbo run --ui=stream build --filter=./src/systems/function-bay/packages/** diff --git a/src/systems/scripts/build-workspace-clients.sh b/src/systems/scripts/build-workspace-clients.sh index 913689790..05933a330 100755 --- a/src/systems/scripts/build-workspace-clients.sh +++ b/src/systems/scripts/build-workspace-clients.sh @@ -1,6 +1,6 @@ #!/bin/sh set -eu -# Build generated workspace clients so services can resolve package exports -# without depending on prebuilt artifacts from CI or the host. -bunx turbo run --ui=stream build --filter=./src/systems/_clients/** +# Build the object storage client used across platform services. This package has +# no generated-service dependencies and is safe to build in any CI/Docker step. +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/object-storage-client diff --git a/src/systems/shuttle/scripts/prepare-docker-build.sh b/src/systems/shuttle/scripts/prepare-docker-build.sh index 424af51f8..71f3e7b6a 100644 --- a/src/systems/shuttle/scripts/prepare-docker-build.sh +++ b/src/systems/shuttle/scripts/prepare-docker-build.sh @@ -12,4 +12,6 @@ bun run --cwd ./src/systems/function-bay/service db:generate sh ./src/systems/scripts/build-workspace-clients.sh +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client bunx turbo run --ui=stream build --filter=@metorial/mcp-server diff --git a/src/systems/slates/scripts/prepare-docker-build.sh b/src/systems/slates/scripts/prepare-docker-build.sh index 0db8a53fb..fc8b150b7 100644 --- a/src/systems/slates/scripts/prepare-docker-build.sh +++ b/src/systems/slates/scripts/prepare-docker-build.sh @@ -14,4 +14,9 @@ bun run --cwd ./src/systems/ares/service db:generate sh ./src/systems/scripts/build-workspace-clients.sh +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/ares-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/signal-client + # bunx turbo run --ui=stream build --filter=@slates/proto diff --git a/src/systems/subspace/scripts/prepare-docker-build.sh b/src/systems/subspace/scripts/prepare-docker-build.sh index 2c1923e2b..064eef1ef 100644 --- a/src/systems/subspace/scripts/prepare-docker-build.sh +++ b/src/systems/subspace/scripts/prepare-docker-build.sh @@ -16,5 +16,15 @@ bun run --cwd ./src/systems/cargo/service db:generate sh ./src/systems/scripts/build-workspace-clients.sh +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/origin-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/signal-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/synthesis-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/cargo-client + # bunx turbo run --ui=stream build --filter=./src/systems/slates/packages/** bunx turbo run --ui=stream build --filter=./src/systems/shuttle/sdk/packages/** + +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/slates-client +bunx turbo run --ui=stream build --filter=@metorial-platform-systems/shuttle-client From 943789e22706fce08660615d57e393a0a36f81ff Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 17:38:50 +0200 Subject: [PATCH 11/69] Build fixes --- .github/workflows/reusable-control.yml | 4 +- .../cargo/service/vitest.e2e.config.ts | 15 ++++++ .../function-bay/service/vitest.e2e.config.ts | 6 ++- .../service/vitest.unit.config.ts | 7 ++- .../origin/apps/code-bucket/control.toml | 1 + .../origin/scripts/build-code-workspace.sh | 19 ++++++++ src/systems/relay/service/tsconfig.json | 4 +- src/systems/relay/service/vitest.config.ts | 46 ------------------- .../scripts/build-workspace-clients.sh | 9 ++-- .../subspace/apps/public/tsconfig.build.json | 8 +++- .../subspace/apps/worker/tsconfig.build.json | 8 +++- src/systems/synthesis/service/Dockerfile | 5 ++ 12 files changed, 76 insertions(+), 56 deletions(-) create mode 100755 src/systems/origin/scripts/build-code-workspace.sh delete mode 100644 src/systems/relay/service/vitest.config.ts diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 04208d1a4..07631d495 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -65,8 +65,8 @@ jobs: - name: Generate Prisma Clients run: bunx turbo run --ui=stream --concurrency=1 prisma:generate - - name: Build object storage client - run: bunx turbo run --ui=stream build --filter=@metorial-platform-systems/object-storage-client + - name: Build platform system clients + run: sh oss/src/systems/scripts/build-workspace-clients.sh - name: Run control env: diff --git a/src/systems/cargo/service/vitest.e2e.config.ts b/src/systems/cargo/service/vitest.e2e.config.ts index 4e74c38dd..d18b35083 100644 --- a/src/systems/cargo/service/vitest.e2e.config.ts +++ b/src/systems/cargo/service/vitest.e2e.config.ts @@ -1,6 +1,9 @@ +import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +let clientsRoot = resolve(__dirname, '../../_clients'); + export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); @@ -14,6 +17,18 @@ export default defineConfig(({ mode }) => { ...env, NODE_ENV: 'test' } + }, + resolve: { + alias: { + '@metorial-platform-systems/voyager-client': resolve( + clientsRoot, + 'voyager/src/index.ts' + ), + '@metorial-platform-systems/object-storage-client': resolve( + clientsRoot, + 'object-storage/src/index.ts' + ) + } } }); }); diff --git a/src/systems/function-bay/service/vitest.e2e.config.ts b/src/systems/function-bay/service/vitest.e2e.config.ts index d0036b98c..1409cd48d 100644 --- a/src/systems/function-bay/service/vitest.e2e.config.ts +++ b/src/systems/function-bay/service/vitest.e2e.config.ts @@ -18,6 +18,10 @@ export default defineConfig(({ mode }) => { }); return withAliases(config, { - '@function-bay/types': resolve(__dirname, '../packages/types/src/index.ts') + '@function-bay/types': resolve(__dirname, '../packages/types/src/index.ts'), + '@metorial-platform-systems/object-storage-client': resolve( + __dirname, + '../../_clients/object-storage/src/index.ts' + ) }); }); diff --git a/src/systems/function-bay/service/vitest.unit.config.ts b/src/systems/function-bay/service/vitest.unit.config.ts index 749e9d7e8..e0105c796 100644 --- a/src/systems/function-bay/service/vitest.unit.config.ts +++ b/src/systems/function-bay/service/vitest.unit.config.ts @@ -1,6 +1,8 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; +let clientsRoot = resolve(__dirname, '../../_clients'); + export default defineConfig({ test: { include: ['src/**/*.test.ts'], @@ -9,7 +11,10 @@ export default defineConfig({ }, resolve: { alias: { - '@function-bay/types': resolve(__dirname, '../packages/types/src/index.ts') + '@metorial-platform-systems/object-storage-client': resolve( + clientsRoot, + 'object-storage/src/index.ts' + ) } } }); diff --git a/src/systems/origin/apps/code-bucket/control.toml b/src/systems/origin/apps/code-bucket/control.toml index b6186114c..e771530de 100644 --- a/src/systems/origin/apps/code-bucket/control.toml +++ b/src/systems/origin/apps/code-bucket/control.toml @@ -9,6 +9,7 @@ health = { cmd = "nc -z localhost 52091" } [test.unit] command = "go test ./..." +setup = ["sh ../../scripts/build-code-workspace.sh"] cwd = "/app/src/systems/origin/apps/code-bucket" [test.e2e] diff --git a/src/systems/origin/scripts/build-code-workspace.sh b/src/systems/origin/scripts/build-code-workspace.sh new file mode 100755 index 000000000..cb4930b18 --- /dev/null +++ b/src/systems/origin/scripts/build-code-workspace.sh @@ -0,0 +1,19 @@ +#!/bin/sh +set -eu + +ROOT="$(cd "$(dirname "$0")/../apps" && pwd)" +WORKSPACE="$ROOT/code-workspace" +TARGET="$ROOT/code-bucket/pkg/workspace/dist" + +cd "$WORKSPACE" + +if [ ! -d node_modules ]; then + bun install +fi + +bun x tsc +bun x vite build + +rm -rf "$TARGET" +mkdir -p "$(dirname "$TARGET")" +cp -R dist "$TARGET" diff --git a/src/systems/relay/service/tsconfig.json b/src/systems/relay/service/tsconfig.json index a3f24add6..b0b1e346b 100644 --- a/src/systems/relay/service/tsconfig.json +++ b/src/systems/relay/service/tsconfig.json @@ -28,6 +28,8 @@ "exclude": [ "node_modules", "tests/e2e", - "tests/helpers" + "tests/helpers", + "vitest.config.ts", + "vitest.*.config.ts" ] } diff --git a/src/systems/relay/service/vitest.config.ts b/src/systems/relay/service/vitest.config.ts deleted file mode 100644 index 0ef5d4c67..000000000 --- a/src/systems/relay/service/vitest.config.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; -import { resolve } from 'path'; -import { defineConfig } from 'vitest/config'; - -export default defineConfig(({ mode }) => { - const env = loadTestEnv(mode || 'test', process.cwd(), ''); - - const config = createVitestConfig({ - test: { - pool: 'forks', - setupFiles: ['./src/test/setup.ts'], - env: { - ...env, - NODE_ENV: 'test' - }, - exclude: ['**/node_modules/**', '**/dist/**', '**/e2e/**'], - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: [ - 'node_modules/**', - 'dist/**', - '**/*.d.ts', - '**/*.config.ts', - '**/prisma/**', - 'tests/**', - 'src/test/**', - 'src/**/tests/**', - 'src/server.ts', - 'src/worker.ts', - 'src/db.ts', - 'src/storage.ts', - 'src/env.ts', - 'src/id.ts' - ] - } - } - }); - - return withAliases(config, { - '@metorial-platform-systems/relay-client': resolve( - __dirname, - '../../_clients/relay/src/index.ts' - ) - }); -}); diff --git a/src/systems/scripts/build-workspace-clients.sh b/src/systems/scripts/build-workspace-clients.sh index 05933a330..6c0d4c919 100755 --- a/src/systems/scripts/build-workspace-clients.sh +++ b/src/systems/scripts/build-workspace-clients.sh @@ -1,6 +1,9 @@ #!/bin/sh set -eu -# Build the object storage client used across platform services. This package has -# no generated-service dependencies and is safe to build in any CI/Docker step. -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/object-storage-client +# Build platform system clients consumed across services. These packages have no +# generated-service dependencies and are safe to build in any CI/Docker step. +bunx turbo run --ui=stream build \ + --filter=@metorial-platform-systems/object-storage-client \ + --filter=@metorial-platform-systems/voyager-client \ + --filter=@metorial-platform-systems/relay-client diff --git a/src/systems/subspace/apps/public/tsconfig.build.json b/src/systems/subspace/apps/public/tsconfig.build.json index 66dba5ba2..ad4bf2ce0 100644 --- a/src/systems/subspace/apps/public/tsconfig.build.json +++ b/src/systems/subspace/apps/public/tsconfig.build.json @@ -13,5 +13,11 @@ "strict": false, "esModuleInterop": true, "resolveJsonModule": true - } + }, + "exclude": [ + "vitest.config.ts", + "vitest.*.config.ts", + "**/*.test.ts", + "**/*.e2e.test.ts" + ] } \ No newline at end of file diff --git a/src/systems/subspace/apps/worker/tsconfig.build.json b/src/systems/subspace/apps/worker/tsconfig.build.json index f51916d95..f050572d3 100644 --- a/src/systems/subspace/apps/worker/tsconfig.build.json +++ b/src/systems/subspace/apps/worker/tsconfig.build.json @@ -13,5 +13,11 @@ "strict": false, "esModuleInterop": true, "resolveJsonModule": true - } + }, + "exclude": [ + "vitest.config.ts", + "vitest.*.config.ts", + "**/*.test.ts", + "**/*.e2e.test.ts" + ] } diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index ede8e64b6..448ac9855 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -20,6 +20,11 @@ WORKDIR /app/src/systems/synthesis/service RUN bun run db:generate RUN bun run server:build +FROM builder AS workspace + +WORKDIR /app/src/systems/synthesis/service +CMD ["sleep", "infinity"] + # Production stage FROM oven/bun:1-alpine AS runner From b99484f99f918ce029279420d1d6ad51a3a91839 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 17:47:43 +0200 Subject: [PATCH 12/69] maybe --- .github/workflows/reusable-control.yml | 10 +++++++++- src/systems/scripts/build-workspace-clients.sh | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 07631d495..d3373e135 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -66,7 +66,15 @@ jobs: run: bunx turbo run --ui=stream --concurrency=1 prisma:generate - name: Build platform system clients - run: sh oss/src/systems/scripts/build-workspace-clients.sh + run: | + if [ -f src/systems/scripts/build-workspace-clients.sh ]; then + sh src/systems/scripts/build-workspace-clients.sh + elif [ -f oss/src/systems/scripts/build-workspace-clients.sh ]; then + sh oss/src/systems/scripts/build-workspace-clients.sh + else + echo "build-workspace-clients.sh not found" >&2 + exit 1 + fi - name: Run control env: diff --git a/src/systems/scripts/build-workspace-clients.sh b/src/systems/scripts/build-workspace-clients.sh index 6c0d4c919..27ee6d15e 100755 --- a/src/systems/scripts/build-workspace-clients.sh +++ b/src/systems/scripts/build-workspace-clients.sh @@ -1,6 +1,11 @@ #!/bin/sh set -eu +SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" +OSS_ROOT="$(CDPATH= cd -- "$SCRIPT_DIR/../../.." && pwd)" + +cd "$OSS_ROOT" + # Build platform system clients consumed across services. These packages have no # generated-service dependencies and are safe to build in any CI/Docker step. bunx turbo run --ui=stream build \ From c1c98789cd0989e14667dcd27c99525fb1fd7e67 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 18:30:24 +0200 Subject: [PATCH 13/69] More fixes --- src/systems/subspace/apps/controller/control.toml | 2 +- src/systems/subspace/apps/public/control.toml | 5 +++++ src/systems/subspace/apps/worker/control.toml | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index 34b770a0a..2a0430e26 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -121,4 +121,4 @@ scope = "service" [[deps]] name = "mcp-test-server" -inline = { build = { context = "oss", dockerfile = "src/systems/subspace/apps/controller/Dockerfile", target = "workspace" }, command = ["sh", "-c", "PORT=52198 bun ./src/systems/subspace/test-servers/index.ts"], port = 52198, health = { cmd = "bun -e \"fetch('http://localhost:52198/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } } +inline = { build = { context = "oss", dockerfile = "src/systems/subspace/apps/controller/Dockerfile", target = "workspace" }, command = ["sh", "-c", "PORT=52198 bun /app/src/systems/subspace/test-servers/index.ts"], port = 52198, health = { cmd = "bun -e \"fetch('http://localhost:52198/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } } diff --git a/src/systems/subspace/apps/public/control.toml b/src/systems/subspace/apps/public/control.toml index b58d19d7c..7c3fe7d3a 100644 --- a/src/systems/subspace/apps/public/control.toml +++ b/src/systems/subspace/apps/public/control.toml @@ -27,6 +27,7 @@ name = "subspace-test" DATABASE_URL = "$db.subspace-test.url" PUBLIC_SERVICE_URL = "http://subspace-public:52071" REDIS_URL = "redis://$deps.redis.6379/0" +VOYAGER_URL = "http://$deps.voyager.52060/metorial-voyager" [[deps]] name = "postgres" @@ -40,3 +41,7 @@ POSTGRES_DB = "postgres" [[deps]] name = "redis" preset = "redis" + +[[deps]] +name = "voyager" +mock = "voyager" diff --git a/src/systems/subspace/apps/worker/control.toml b/src/systems/subspace/apps/worker/control.toml index 2304247a9..e8af036e5 100644 --- a/src/systems/subspace/apps/worker/control.toml +++ b/src/systems/subspace/apps/worker/control.toml @@ -24,6 +24,7 @@ name = "subspace-test" [env] DATABASE_URL = "$db.subspace-test.url" +PUBLIC_SERVICE_URL = "http://subspace-public:52071" REDIS_URL = "redis://$deps.redis.6379/0" WORKER_HEALTH_PORT = "12121" From 97bf583f8c0f33e0f4378748da7672a91af7eec0 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 22 May 2026 20:27:02 +0200 Subject: [PATCH 14/69] Fix tests --- .../subspace/apps/controller/control.toml | 26 +++ .../fixtures/remoteMcpProviderFixtures.ts | 4 +- src/systems/subspace/apps/public/control.toml | 5 - .../apps/public/src/api/public/index.ts | 6 +- .../apps/public/src/api/public/pingApp.ts | 5 + .../apps/public/src/test/ping.e2e.test.ts | 4 +- src/tooling/control/package.json | 3 +- src/tooling/control/src/cli.ts | 189 +++++++++++------ src/tooling/control/src/registry.ts | 35 +++- src/tooling/control/src/run/build.ts | 19 +- src/tooling/control/src/run/runner.ts | 24 ++- src/tooling/control/src/run/unit.ts | 20 +- .../control/src/staging/copyTree.test.ts | 66 ++++++ src/tooling/control/src/staging/copyTree.ts | 192 ++++++++++++++++++ .../control/src/staging/session.test.ts | 37 ++++ src/tooling/control/src/staging/session.ts | 113 +++++++++++ .../src/staging/staging.integration.test.ts | 29 +++ src/tooling/control/src/types.ts | 13 ++ 18 files changed, 692 insertions(+), 98 deletions(-) create mode 100644 src/systems/subspace/apps/public/src/api/public/pingApp.ts create mode 100644 src/tooling/control/src/staging/copyTree.test.ts create mode 100644 src/tooling/control/src/staging/copyTree.ts create mode 100644 src/tooling/control/src/staging/session.test.ts create mode 100644 src/tooling/control/src/staging/session.ts create mode 100644 src/tooling/control/src/staging/staging.integration.test.ts diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index 2a0430e26..80ce61257 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -99,6 +99,9 @@ name = "shuttle" control = "../../../shuttle/service" scope = "service" +[deps.env] +SHUTTLE_UNSAFE_SSRF_BYPASS = "true" + [[deps]] name = "cargo" control = "../../../cargo/service" @@ -119,6 +122,29 @@ name = "origin" control = "../../../origin/apps/service" scope = "service" +[[deps]] +name = "subspace-worker" +control = "../worker" +scope = "service" + +[deps.env] +DATABASE_URL = "$db.subspace-test.url" +PUBLIC_SERVICE_URL = "http://subspace-public:52071" +REDIS_URL = "redis://$deps.redis.6379/0" +NATS_URL = "nats://$deps.nats.4222" +SLATES_HUB_URL = "http://$deps.slates-hub.52046/slates-hub" +SLATES_HUB_PUBLIC_URL = "http://$deps.slates-hub.52045" +SHUTTLE_URL = "http://$deps.shuttle.52080/metorial-shuttle" +SHUTTLE_LIVE_URL = "http://$deps.shuttle.52080" +SHUTTLE_PUBLIC_URL = "http://$deps.shuttle.52081" +VOYAGER_URL = "http://$deps.voyager.52060/metorial-voyager" +ORIGIN_URL = "http://origin:52090/metorial-origin" +OBJECT_STORAGE_URL = "http://$deps.object-store.52010" +MESSAGE_BUCKET_NAME = "subspace-messages-test" +METORIAL_ENV = "development" +WORKER_HEALTH_PORT = "12121" +CARGO_API_URL = "http://$deps.cargo.52150/metorial-cargo" + [[deps]] name = "mcp-test-server" inline = { build = { context = "oss", dockerfile = "src/systems/subspace/apps/controller/Dockerfile", target = "workspace" }, command = ["sh", "-c", "PORT=52198 bun /app/src/systems/subspace/test-servers/index.ts"], port = 52198, health = { cmd = "bun -e \"fetch('http://localhost:52198/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } } diff --git a/src/systems/subspace/apps/controller/src/test/fixtures/remoteMcpProviderFixtures.ts b/src/systems/subspace/apps/controller/src/test/fixtures/remoteMcpProviderFixtures.ts index c0d37ad6d..cf3c80aef 100644 --- a/src/systems/subspace/apps/controller/src/test/fixtures/remoteMcpProviderFixtures.ts +++ b/src/systems/subspace/apps/controller/src/test/fixtures/remoteMcpProviderFixtures.ts @@ -59,7 +59,7 @@ type RemoteMcpProviderOptions = { }; const DISCOVERY_TIMEOUT_MS = 30000; -const DISCOVERY_CALL_TIMEOUT_MS = 10000; +const DISCOVERY_CALL_TIMEOUT_MS = 45000; const REMOTE_SERVER_NAME_EXACT = process.env.TEST_MCP_REMOTE_SERVER_NAME; const REMOTE_SERVER_NAME_PREFIX = process.env.TEST_MCP_REMOTE_SERVER_NAME_PREFIX ?? 'Subspace Test Remote MCP'; @@ -419,7 +419,7 @@ const discoverSpecification = async (d: { DISCOVERY_CALL_TIMEOUT_MS, d.label ); - if (!capabilities) return null; + if (!capabilities || capabilities.status !== 'success') return null; return providerSpecificationInternalService.ensureProviderSpecification({ provider: d.provider, providerVersion: d.providerVersion, diff --git a/src/systems/subspace/apps/public/control.toml b/src/systems/subspace/apps/public/control.toml index 7c3fe7d3a..b58d19d7c 100644 --- a/src/systems/subspace/apps/public/control.toml +++ b/src/systems/subspace/apps/public/control.toml @@ -27,7 +27,6 @@ name = "subspace-test" DATABASE_URL = "$db.subspace-test.url" PUBLIC_SERVICE_URL = "http://subspace-public:52071" REDIS_URL = "redis://$deps.redis.6379/0" -VOYAGER_URL = "http://$deps.voyager.52060/metorial-voyager" [[deps]] name = "postgres" @@ -41,7 +40,3 @@ POSTGRES_DB = "postgres" [[deps]] name = "redis" preset = "redis" - -[[deps]] -name = "voyager" -mock = "voyager" diff --git a/src/systems/subspace/apps/public/src/api/public/index.ts b/src/systems/subspace/apps/public/src/api/public/index.ts index d276a2d4d..334a052e3 100644 --- a/src/systems/subspace/apps/public/src/api/public/index.ts +++ b/src/systems/subspace/apps/public/src/api/public/index.ts @@ -1,8 +1,8 @@ -import { createHono } from '@lowerdeck/hono'; import path from 'path'; import { integrationSetupSessionApp } from './integrationSetupSession'; import { oauthCallbackApp } from './oauthCallback'; import { oauthSetupApp } from './oauthSetup'; +import { pingApp } from './pingApp'; import { setupSessionApp } from './setupSession'; import { toolCallArtifactApp } from './toolCallArtifact'; @@ -26,9 +26,7 @@ let serveAsset = async (key: string) => { }); }; -export let app = createHono() - .options('*', c => c.text('')) - .get('/ping', c => c.text('OK')) +export let app = pingApp .route('/tool-call-attachments', toolCallArtifactApp) .route('/tool-call-artifacts', toolCallArtifactApp) .get('/subspace-public/assets/:key*', async c => { diff --git a/src/systems/subspace/apps/public/src/api/public/pingApp.ts b/src/systems/subspace/apps/public/src/api/public/pingApp.ts new file mode 100644 index 000000000..a63df78b1 --- /dev/null +++ b/src/systems/subspace/apps/public/src/api/public/pingApp.ts @@ -0,0 +1,5 @@ +import { createHono } from '@lowerdeck/hono'; + +export let pingApp = createHono() + .options('*', c => c.text('')) + .get('/ping', c => c.text('OK')); diff --git a/src/systems/subspace/apps/public/src/test/ping.e2e.test.ts b/src/systems/subspace/apps/public/src/test/ping.e2e.test.ts index ba56b792c..e1b178c12 100644 --- a/src/systems/subspace/apps/public/src/test/ping.e2e.test.ts +++ b/src/systems/subspace/apps/public/src/test/ping.e2e.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from 'vitest'; -import { app } from '../api/public'; +import { pingApp } from '../api/public/pingApp'; describe('subspace-public ping', () => { it('returns OK from /ping', async () => { - let response = await app.fetch(new Request('http://subspace-public.test/ping')); + let response = await pingApp.fetch(new Request('http://subspace-public.test/ping')); expect(response.status).toBe(200); expect(await response.text()).toBe('OK'); diff --git a/src/tooling/control/package.json b/src/tooling/control/package.json index 577693d63..c30871fb1 100644 --- a/src/tooling/control/package.json +++ b/src/tooling/control/package.json @@ -8,7 +8,8 @@ }, "scripts": { "start": "bun ./src/cli.ts", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "test": "bun test src/staging" }, "dependencies": { "sade": "^1.8.1", diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index f4847c49b..db92d2aad 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -17,6 +17,15 @@ import { formatControlError, InvalidFlagsError } from './errors'; import { createLogger, isVerbose } from './log'; import { formatRunPlan } from './log/formatRunPlan'; import { resolveControlCwd } from './entrypoint'; +import { withWorkspaceSession } from './staging/session'; +import type { WorkspaceSession } from './types'; + +type StagedCliOpts = { + entrypoint?: string; + verbose?: boolean; + keep?: boolean; + 'no-stage'?: boolean; +}; let collectFilters = (argv: string[]): string[] => { let filters: string[] = []; @@ -166,39 +175,54 @@ let addRunCommand = (mode: 'e2e' | 'unit', name: string) => { .option('--project-prefix, -p', 'Docker compose project prefix') .option('--all', 'Run all services with this test mode') .option('--filter, -f', 'Run tests for named services') - .option('--keep', 'Keep containers running after test') + .option('--keep', 'Keep containers and staged workspace after test') + .option('--no-stage', 'Run against the live checkout instead of a staged copy') .option('--verbose, -v', 'Verbose output') - .action(async (target: string | undefined, opts: { - entrypoint?: string; + .action(async (target: string | undefined, opts: StagedCliOpts & { 'project-prefix'?: string; all?: boolean; - keep?: boolean; - verbose?: boolean; filter?: string; }) => { await runCommand(async () => { - let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); - let filters = collectFilters(process.argv); + await withWorkspaceSession( + { + entrypoint: opts.entrypoint, + verbose: opts.verbose, + keep: opts.keep, + noStage: opts['no-stage'] + }, + async (session: WorkspaceSession | null) => { + let registry = getRegistry({ + cwd: resolveControlCwd(), + entrypoint: opts.entrypoint, + session + }); + let filters = collectFilters(process.argv); - let services = resolveTargets({ - registry, - cwd: resolveControlCwd(), - target, - all: opts.all, - filters: filters.length ? filters : undefined, - mode - }); + let services = resolveTargets({ + registry, + cwd: resolveControlCwd(), + target, + all: opts.all, + filters: filters.length ? filters : undefined, + mode, + session + }); - let ordered = planExecutionOrder(services, registry); + let ordered = planExecutionOrder(services, registry); - await runControlTargets({ - mode, - entrypoint: opts.entrypoint, - projectPrefix: opts['project-prefix'], - keep: opts.keep, - verbose: opts.verbose, - services: ordered - }); + await runControlTargets({ + mode, + entrypoint: opts.entrypoint, + projectPrefix: opts['project-prefix'], + keep: opts.keep, + verbose: opts.verbose, + noStage: opts['no-stage'], + session, + services: ordered + }); + } + ); }, { verbose: opts.verbose }); }); }; @@ -212,35 +236,53 @@ prog .option('--entrypoint, -e', 'Workspace entrypoint') .option('--all', 'Build all services with [service] config') .option('--filter, -f', 'Build named services') + .option('--keep', 'Keep staged workspace after build') + .option('--no-stage', 'Build against the live checkout instead of a staged copy') .option('--verbose, -v', 'Verbose output') .option('--tag-prefix', 'Image tag prefix', 'control') - .action(async (target: string | undefined, opts: { - entrypoint?: string; + .action(async (target: string | undefined, opts: StagedCliOpts & { all?: boolean; - verbose?: boolean; 'tag-prefix'?: string; filter?: string; }) => { await runCommand(async () => { - let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); - let filters = collectFilters(process.argv); + await withWorkspaceSession( + { + entrypoint: opts.entrypoint, + verbose: opts.verbose, + keep: opts.keep, + noStage: opts['no-stage'] + }, + async (session: WorkspaceSession | null) => { + let registry = getRegistry({ + cwd: resolveControlCwd(), + entrypoint: opts.entrypoint, + session + }); + let filters = collectFilters(process.argv); - let services = resolveBuildTargets({ - registry, - cwd: resolveControlCwd(), - target, - all: opts.all, - filters: filters.length ? filters : undefined - }); + let services = resolveBuildTargets({ + registry, + cwd: resolveControlCwd(), + target, + all: opts.all, + filters: filters.length ? filters : undefined, + session + }); - let ordered = planExecutionOrder(services, registry); + let ordered = planExecutionOrder(services, registry); - await runBuildTargets({ - entrypoint: opts.entrypoint, - verbose: opts.verbose, - tagPrefix: opts['tag-prefix'], - services: ordered - }); + await runBuildTargets({ + entrypoint: opts.entrypoint, + verbose: opts.verbose, + tagPrefix: opts['tag-prefix'], + keep: opts.keep, + noStage: opts['no-stage'], + session, + services: ordered + }); + } + ); }, { verbose: opts.verbose }); }); @@ -251,8 +293,9 @@ prog .option('--project-prefix, -p', 'Docker compose project prefix') .option('--all', 'Run all services with this test mode') .option('--filter, -f', 'Run tests for named services') - .action(async (mode: string, target: string | undefined, opts: { - entrypoint?: string; + .option('--keep', 'Keep containers and staged workspace after test') + .option('--no-stage', 'Run against the live checkout instead of a staged copy') + .action(async (mode: string, target: string | undefined, opts: StagedCliOpts & { 'project-prefix'?: string; all?: boolean; filter?: string; @@ -263,28 +306,46 @@ prog throw new InvalidFlagsError('Mode must be e2e or unit'); } - let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); - let filters = collectFilters(process.argv); + await withWorkspaceSession( + { + entrypoint: opts.entrypoint, + verbose, + keep: opts.keep, + noStage: opts['no-stage'] + }, + async (session: WorkspaceSession | null) => { + let registry = getRegistry({ + cwd: resolveControlCwd(), + entrypoint: opts.entrypoint, + session + }); + let filters = collectFilters(process.argv); - let services = resolveTargets({ - registry, - cwd: resolveControlCwd(), - target, - all: opts.all, - filters: filters.length ? filters : undefined, - mode: mode as 'e2e' | 'unit' - }); + let services = resolveTargets({ + registry, + cwd: resolveControlCwd(), + target, + all: opts.all, + filters: filters.length ? filters : undefined, + mode: mode as 'e2e' | 'unit', + session + }); - let ordered = planExecutionOrder(services, registry); + let ordered = planExecutionOrder(services, registry); - await runControlTargets({ - mode: mode as 'e2e' | 'unit', - entrypoint: opts.entrypoint, - projectPrefix: opts['project-prefix'], - ci: true, - verbose, - services: ordered - }); + await runControlTargets({ + mode: mode as 'e2e' | 'unit', + entrypoint: opts.entrypoint, + projectPrefix: opts['project-prefix'], + ci: true, + verbose, + keep: opts.keep, + noStage: opts['no-stage'], + session, + services: ordered + }); + } + ); }, { verbose }); }); diff --git a/src/tooling/control/src/registry.ts b/src/tooling/control/src/registry.ts index b9fb26c22..b88679823 100644 --- a/src/tooling/control/src/registry.ts +++ b/src/tooling/control/src/registry.ts @@ -11,7 +11,9 @@ import { suggestServiceName, UnknownServiceError } from './errors'; -import type { ControlService, ServiceRegistry } from './types'; +import type { ControlService, ServiceRegistry, WorkspaceSession } from './types'; +import { mapPathToStaged } from './staging/copyTree'; +import { resolveStagedEntrypoint } from './staging/session'; let normalizeDir = (dir: string): string => resolve(dir); @@ -91,8 +93,20 @@ export let resolveService = (registry: ServiceRegistry, input: string): ControlS }); }; -export let findServiceForCwd = (registry: ServiceRegistry, cwd: string): ControlService | null => { +export let findServiceForCwd = ( + registry: ServiceRegistry, + cwd: string, + session?: WorkspaceSession | null +): ControlService | null => { let dir = resolve(cwd); + if (session) { + dir = mapPathToStaged({ + repoRoot: session.repoRoot, + stagedRoot: session.stagedEntrypoint, + sourcePath: dir + }); + } + let controlRoot = resolve(registry.controlRoot); while (dir.startsWith(controlRoot) || dir === controlRoot) { @@ -136,6 +150,7 @@ export let resolveSelectionTargets = (opts: { target?: string; all?: boolean; filters?: string[]; + session?: WorkspaceSession | null; allServices: () => ControlService[]; validate: (service: ControlService) => void; }): ControlService[] => { @@ -172,7 +187,7 @@ export let resolveSelectionTargets = (opts: { return [service]; } - let service = findServiceForCwd(opts.registry, opts.cwd); + let service = findServiceForCwd(opts.registry, opts.cwd, opts.session); if (!service) { throw new NotInServiceDirError({ cwd: opts.cwd, @@ -190,6 +205,7 @@ export let resolveBuildTargets = (opts: { target?: string; all?: boolean; filters?: string[]; + session?: WorkspaceSession | null; }): ControlService[] => resolveSelectionTargets({ ...opts, @@ -206,6 +222,7 @@ export let resolveTargets = (opts: { all?: boolean; filters?: string[]; mode?: 'e2e' | 'unit'; + session?: WorkspaceSession | null; }): ControlService[] => { if ((opts.all || opts.filters?.length) && !opts.mode) { throw new InvalidFlagsError('Mode is required when using --all or --filter'); @@ -217,6 +234,7 @@ export let resolveTargets = (opts: { target: opts.target, all: opts.all, filters: opts.filters, + session: opts.session, allServices: () => { if (!opts.mode) throw new InvalidFlagsError('Mode is required when using --all'); return opts.registry.services.filter(s => hasTest(s, opts.mode!)); @@ -229,7 +247,14 @@ export let resolveTargets = (opts: { }); }; -export let getRegistry = (opts: { cwd: string; entrypoint?: string }): ServiceRegistry => { - let controlRoot = resolveEntrypoint(opts); +export let getRegistry = (opts: { + cwd: string; + entrypoint?: string; + session?: WorkspaceSession | null; +}): ServiceRegistry => { + let controlRoot = + opts.session != null + ? resolveStagedEntrypoint(opts.session, opts.entrypoint) + : resolveEntrypoint({ cwd: opts.cwd, entrypoint: opts.entrypoint }); return buildRegistry(controlRoot); }; diff --git a/src/tooling/control/src/run/build.ts b/src/tooling/control/src/run/build.ts index 4ceeaa8a1..0c0a85b25 100644 --- a/src/tooling/control/src/run/build.ts +++ b/src/tooling/control/src/run/build.ts @@ -2,6 +2,7 @@ import { resolve } from 'path'; import { collectRunnerBuilds } from '../compose/builds'; import { resolveGraph } from '../graph/resolver'; import { resolveControlDir, resolveEntrypoint, resolveControlCwd } from '../entrypoint'; +import { resolveStagedEntrypoint } from '../staging/session'; import { getRegistry } from '../registry'; import { planExecutionOrder } from '../graph/planner'; import { createLogger } from '../log'; @@ -24,8 +25,10 @@ let runBuildForService = async ( ) => { let logger = createLogger(opts); let cwd = resolveControlCwd(); - let entrypoint = resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); - let registry = getRegistry({ cwd, entrypoint: opts.entrypoint }); + let entrypoint = opts.session + ? resolveStagedEntrypoint(opts.session, opts.entrypoint) + : resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); + let registry = getRegistry({ cwd, entrypoint: opts.entrypoint, session: opts.session ?? null }); let targetDir = resolveControlDir(entrypoint, opts.service.relPath); let graph = resolveGraph({ entrypoint, targetDir, registry }); let tagPrefix = opts.tagPrefix ?? 'control'; @@ -89,7 +92,11 @@ export let runBuildBatch = async ( opts: BuildOptions & { services: ControlService[] } ): Promise => { let logger = createLogger(opts); - let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let registry = getRegistry({ + cwd: resolveControlCwd(), + entrypoint: opts.entrypoint, + session: opts.session ?? null + }); let ordered = planExecutionOrder(opts.services, registry); let passed: string[] = []; let failed: { name: string; error: Error; phase?: string }[] = []; @@ -156,7 +163,11 @@ export let runBuildBatch = async ( export let runBuildTargets = async (opts: BuildOptions & { services: ControlService[] }) => { let logger = createLogger(opts); - let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let registry = getRegistry({ + cwd: resolveControlCwd(), + entrypoint: opts.entrypoint, + session: opts.session ?? null + }); let ordered = planExecutionOrder(opts.services, registry); logger.section( diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index d4fd40215..70f8cdcb9 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -4,7 +4,8 @@ import { generateCompose, collectContainerNames } from '../compose/generator'; import { generatePostgresInitScript } from '../compose/databaseInit'; import { postgresDatabasesForDep } from '../graph/databases'; import { resolveGraph } from '../graph/resolver'; -import { resolveControlDir, resolveEntrypoint, resolveControlCwd } from '../entrypoint'; +import { resolveControlDir, resolveEntrypoint, resolveControlCwd, findControlRoot } from '../entrypoint'; +import { resolveStagedEntrypoint } from '../staging/session'; import { getRegistry } from '../registry'; import { planExecutionOrder } from '../graph/planner'; import { createLogger } from '../log'; @@ -84,8 +85,10 @@ export let runControl = async ( ) => { let logger = createLogger(opts); let cwd = resolveControlCwd(); - let entrypoint = resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); - let registry = getRegistry({ cwd, entrypoint: opts.entrypoint }); + let entrypoint = opts.session + ? resolveStagedEntrypoint(opts.session, opts.entrypoint) + : resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); + let registry = getRegistry({ cwd, entrypoint: opts.entrypoint, session: opts.session ?? null }); let targetDir = resolveControlDir(entrypoint, opts.target); let graph = resolveGraph({ entrypoint, targetDir, registry }); let runId = `${Date.now()}`; @@ -105,7 +108,8 @@ export let runControl = async ( logger.blank(); } - let runDir = join(entrypoint, '.control', 'runs', runId); + let repoRoot = opts.session?.repoRoot ?? findControlRoot(cwd); + let runDir = join(repoRoot, '.control', 'runs', runId); mkdirSync(runDir, { recursive: true }); let postgresInitScripts: Record = {}; @@ -230,7 +234,11 @@ export let runControlBatch = async ( opts: RunOptions & { services: ControlService[] } ): Promise => { let logger = createLogger(opts); - let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let registry = getRegistry({ + cwd: resolveControlCwd(), + entrypoint: opts.entrypoint, + session: opts.session ?? null + }); let ordered = planExecutionOrder(opts.services, registry); let passed: string[] = []; let failed: { name: string; error: Error; phase?: string }[] = []; @@ -301,7 +309,11 @@ export let runControlTargets = async (opts: RunOptions & { services: ControlServ } let logger = createLogger(opts); - let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let registry = getRegistry({ + cwd: resolveControlCwd(), + entrypoint: opts.entrypoint, + session: opts.session ?? null + }); let ordered = planExecutionOrder(opts.services, registry); logger.section( diff --git a/src/tooling/control/src/run/unit.ts b/src/tooling/control/src/run/unit.ts index 122cd7432..d35aa899a 100644 --- a/src/tooling/control/src/run/unit.ts +++ b/src/tooling/control/src/run/unit.ts @@ -1,11 +1,11 @@ import { join, resolve } from 'path'; -import { resolveOssRoot } from '../entrypoint'; +import { resolveOssRoot, resolveControlCwd, resolveEntrypoint } from '../entrypoint'; +import { resolveStagedEntrypoint } from '../staging/session'; import { NoTestError } from '../errors'; import { createLogger } from '../log'; import { formatBatchSummary, formatRunPlan, formatServiceHeader } from '../log/formatRunPlan'; import { getRegistry } from '../registry'; import { planExecutionOrder } from '../graph/planner'; -import { resolveControlCwd, resolveEntrypoint } from '../entrypoint'; import type { BatchResult, BatchServiceResult, ControlService, RunOptions } from '../types'; type UnitContext = { @@ -53,7 +53,9 @@ let runUnitForService = async ( if (!unit) throw new NoTestError({ name: opts.service.name, mode: 'unit' }); let cwd = resolveControlCwd(); - let entrypoint = resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); + let entrypoint = opts.session + ? resolveStagedEntrypoint(opts.session, opts.entrypoint) + : resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); let hostCwd = resolveHostTestCwd({ service: opts.service, cwd: unit.cwd, entrypoint }); if (opts.context) { @@ -84,7 +86,11 @@ export let runUnitBatch = async ( opts: RunOptions & { services: ControlService[] } ): Promise => { let logger = createLogger(opts); - let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let registry = getRegistry({ + cwd: resolveControlCwd(), + entrypoint: opts.entrypoint, + session: opts.session ?? null + }); let ordered = planExecutionOrder(opts.services, registry); let passed: string[] = []; let failed: { name: string; error: Error; phase?: string }[] = []; @@ -150,7 +156,11 @@ export let runUnitBatch = async ( export let runUnitTargets = async (opts: RunOptions & { services: ControlService[] }) => { let logger = createLogger(opts); - let registry = getRegistry({ cwd: resolveControlCwd(), entrypoint: opts.entrypoint }); + let registry = getRegistry({ + cwd: resolveControlCwd(), + entrypoint: opts.entrypoint, + session: opts.session ?? null + }); let ordered = planExecutionOrder(opts.services, registry); logger.section( diff --git a/src/tooling/control/src/staging/copyTree.test.ts b/src/tooling/control/src/staging/copyTree.test.ts new file mode 100644 index 000000000..725ea1605 --- /dev/null +++ b/src/tooling/control/src/staging/copyTree.test.ts @@ -0,0 +1,66 @@ +import { afterEach, beforeEach, describe, expect, it } from 'bun:test'; +import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'fs'; +import { join } from 'path'; +import { tmpdir } from 'os'; +import { copyGitAwareTree } from './copyTree'; + +let runGit = async (args: string[], cwd: string) => { + let proc = Bun.spawn(['git', ...args], { + cwd, + stdout: 'pipe', + stderr: 'pipe', + env: { + ...process.env, + GIT_TEMPLATE_DIR: '' + } + }); + await proc.exited; + if (proc.exitCode !== 0) { + let err = await new Response(proc.stderr).text(); + throw new Error(`git ${args.join(' ')} failed: ${err}`); + } +}; + +let createFixtureRepo = async () => { + let root = mkdtempSync(join(tmpdir(), 'control-copy-fixture-')); + mkdirSync(join(root, 'node_modules', 'ignored'), { recursive: true }); + writeFileSync(join(root, 'node_modules', 'ignored', 'pkg.js'), 'ignored'); + mkdirSync(join(root, 'dist'), { recursive: true }); + writeFileSync(join(root, 'dist', 'out.js'), 'ignored'); + writeFileSync(join(root, 'tracked.txt'), 'tracked'); + writeFileSync(join(root, 'untracked.txt'), 'untracked'); + writeFileSync(join(root, '.gitignore'), 'node_modules/\ndist/\n'); + + await runGit(['init'], root); + await runGit(['config', 'user.email', 'test@example.com'], root); + await runGit(['config', 'user.name', 'Test'], root); + await runGit(['add', 'tracked.txt', '.gitignore'], root); + await runGit(['commit', '-m', 'init'], root); + + return root; +}; + +describe('copyGitAwareTree', () => { + let fixtureRoot: string; + let destRoot: string; + + beforeEach(async () => { + fixtureRoot = await createFixtureRepo(); + destRoot = mkdtempSync(join(tmpdir(), 'control-copy-dest-')); + }); + + afterEach(() => { + if (fixtureRoot && existsSync(fixtureRoot)) rmSync(fixtureRoot, { recursive: true, force: true }); + if (destRoot && existsSync(destRoot)) rmSync(destRoot, { recursive: true, force: true }); + }); + + it('copies tracked and untracked non-ignored files', async () => { + let result = await copyGitAwareTree({ sourceRoot: fixtureRoot, destRoot }); + + expect(result.fileCount).toBeGreaterThan(0); + expect(readFileSync(join(destRoot, 'tracked.txt'), 'utf8')).toBe('tracked'); + expect(readFileSync(join(destRoot, 'untracked.txt'), 'utf8')).toBe('untracked'); + expect(existsSync(join(destRoot, 'node_modules', 'ignored', 'pkg.js'))).toBe(false); + expect(existsSync(join(destRoot, 'dist', 'out.js'))).toBe(false); + }); +}); diff --git a/src/tooling/control/src/staging/copyTree.ts b/src/tooling/control/src/staging/copyTree.ts new file mode 100644 index 000000000..965295eb1 --- /dev/null +++ b/src/tooling/control/src/staging/copyTree.ts @@ -0,0 +1,192 @@ +import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, statSync } from 'fs'; +import { dirname, join, relative, resolve } from 'path'; + +export type CopyTreeResult = { + fileCount: number; + durationMs: number; +}; + +let ALWAYS_SKIP = new Set(['.git', '.control']); + +let runGit = async (args: string[], cwd: string): Promise<{ ok: boolean; stdout: string }> => { + let proc = Bun.spawn(['git', ...args], { + cwd, + stdout: 'pipe', + stderr: 'pipe' + }); + let stdout = await new Response(proc.stdout).text(); + await proc.exited; + return { ok: proc.exitCode === 0, stdout }; +}; + +let isGitRepo = async (root: string): Promise => { + let res = await runGit(['rev-parse', '--git-dir'], root); + return res.ok; +}; + +let listGitFiles = async (root: string): Promise => { + let res = await runGit(['ls-files', '-co', '--exclude-standard', '-z'], root); + if (!res.ok) throw new Error(`git ls-files failed in ${root}`); + + let files: string[] = []; + for (let entry of res.stdout.split('\0')) { + if (entry) files.push(entry); + } + return files; +}; + +let listSubmodulePaths = async (root: string): Promise => { + let paths = new Set(); + + if (existsSync(join(root, '.gitmodules'))) { + let text = readFileSync(join(root, '.gitmodules'), 'utf8'); + for (let line of text.split('\n')) { + let match = line.match(/^\s*path\s*=\s*(.+)\s*$/); + if (match?.[1]) paths.add(match[1].trim()); + } + } + + let res = await runGit(['ls-files', '-z'], root); + if (res.ok) { + for (let entry of res.stdout.split('\0')) { + if (!entry) continue; + let full = join(root, entry); + try { + if (statSync(full).isDirectory() && existsSync(join(full, '.git'))) { + paths.add(entry); + } + } catch { + // skip missing paths + } + } + } + + return [...paths]; +}; + +let shouldSkipRelativePath = (relPath: string): boolean => { + let parts = relPath.split('/'); + for (let part of parts) { + if (ALWAYS_SKIP.has(part)) return true; + } + return false; +}; + +let copyFilePreservingMode = (src: string, dest: string) => { + mkdirSync(dirname(dest), { recursive: true }); + copyFileSync(src, dest); + try { + let mode = statSync(src).mode & 0o777; + if (mode) chmodSync(dest, mode); + } catch { + // ignore chmod failures on unsupported platforms + } +}; + +let copyFilesFromGitRoot = async (opts: { + sourceRoot: string; + destRoot: string; + pathPrefix?: string; + skipPaths?: Set; +}): Promise => { + let files = await listGitFiles(opts.sourceRoot); + let count = 0; + let prefix = opts.pathPrefix ?? ''; + let skipPaths = opts.skipPaths ?? new Set(); + + for (let rel of files) { + if (shouldSkipRelativePath(rel)) continue; + if ([...skipPaths].some(skip => rel === skip || rel.startsWith(`${skip}/`))) continue; + + let src = join(opts.sourceRoot, rel); + if (!existsSync(src)) continue; + + try { + if (!statSync(src).isFile()) continue; + } catch { + continue; + } + + let destRel = prefix ? join(prefix, rel) : rel; + if (shouldSkipRelativePath(destRel)) continue; + + copyFilePreservingMode(src, join(opts.destRoot, destRel)); + count++; + } + + return count; +}; + +let copySubmoduleTrees = async (opts: { + sourceRoot: string; + destRoot: string; + verbose?: boolean; +}): Promise => { + let submodules = await listSubmodulePaths(opts.sourceRoot); + let count = 0; + + for (let subPath of submodules) { + let subSource = join(opts.sourceRoot, subPath); + if (!existsSync(subSource)) { + throw new Error( + `Submodule "${subPath}" is not initialized. Run: git submodule update --init --recursive` + ); + } + + if (!(await isGitRepo(subSource))) { + throw new Error(`Submodule "${subPath}" is not a git checkout at ${subSource}`); + } + + if (opts.verbose) { + console.error(`[control:stage] Copying submodule ${subPath}...`); + } + + count += await copyFilesFromGitRoot({ + sourceRoot: subSource, + destRoot: opts.destRoot, + pathPrefix: subPath + }); + } + + return count; +}; + +export let copyGitAwareTree = async (opts: { + sourceRoot: string; + destRoot: string; + verbose?: boolean; +}): Promise => { + let sourceRoot = resolve(opts.sourceRoot); + let destRoot = resolve(opts.destRoot); + let started = Date.now(); + + if (!(await isGitRepo(sourceRoot))) { + throw new Error(`Cannot stage workspace: ${sourceRoot} is not a git repository`); + } + + mkdirSync(destRoot, { recursive: true }); + + let submodulePaths = await listSubmodulePaths(sourceRoot); + let skipPaths = new Set(submodulePaths); + + let fileCount = await copyFilesFromGitRoot({ sourceRoot, destRoot, skipPaths }); + fileCount += await copySubmoduleTrees({ sourceRoot, destRoot, verbose: opts.verbose }); + + if (opts.verbose) { + console.error( + `[control:stage] Copied ${fileCount} files from ${sourceRoot} to ${destRoot} (${Date.now() - started}ms)` + ); + } + + return { fileCount, durationMs: Date.now() - started }; +}; + +export let mapPathToStaged = (opts: { + repoRoot: string; + stagedRoot: string; + sourcePath: string; +}): string => { + let rel = relative(resolve(opts.repoRoot), resolve(opts.sourcePath)); + if (rel.startsWith('..')) return resolve(opts.sourcePath); + return join(resolve(opts.stagedRoot), rel); +}; diff --git a/src/tooling/control/src/staging/session.test.ts b/src/tooling/control/src/staging/session.test.ts new file mode 100644 index 000000000..6db141738 --- /dev/null +++ b/src/tooling/control/src/staging/session.test.ts @@ -0,0 +1,37 @@ +import { afterEach, describe, expect, it } from 'bun:test'; +import { existsSync, mkdtempSync, rmSync } from 'fs'; +import { join } from 'path'; +import { tmpdir } from 'os'; +import { + createWorkspaceSession, + destroyWorkspaceSession, + getActiveSession, + isStagingEnabled +} from './session'; + +describe('workspace session', () => { + afterEach(async () => { + await destroyWorkspaceSession(); + }); + + it('respects CONTROL_NO_STAGE', () => { + process.env.CONTROL_NO_STAGE = '1'; + expect(isStagingEnabled()).toBe(false); + delete process.env.CONTROL_NO_STAGE; + expect(isStagingEnabled()).toBe(true); + }); + + it('respects noStage option', () => { + expect(isStagingEnabled({ noStage: true })).toBe(false); + }); +}); + +describe('getActiveSession', () => { + afterEach(async () => { + await destroyWorkspaceSession(); + }); + + it('returns null when no session is active', () => { + expect(getActiveSession()).toBeNull(); + }); +}); diff --git a/src/tooling/control/src/staging/session.ts b/src/tooling/control/src/staging/session.ts new file mode 100644 index 000000000..9f74455ac --- /dev/null +++ b/src/tooling/control/src/staging/session.ts @@ -0,0 +1,113 @@ +import { existsSync, rmSync } from 'fs'; +import { join, resolve } from 'path'; +import { findControlRoot, resolveEntrypoint, resolveOssRoot, resolveControlCwd } from '../entrypoint'; +import type { WorkspaceSession } from '../types'; +import { copyGitAwareTree, mapPathToStaged } from './copyTree'; + +// Builds and tests run against an isolated copy at {repoRoot}/.control/temp-src/{timestamp}/. +// The live checkout is only used to launch control itself; Docker contexts and unit-test cwd +// resolve into the staged tree. Use --no-stage or CONTROL_NO_STAGE=1 to opt out. + +export type { WorkspaceSession }; + +let activeSession: WorkspaceSession | null = null; + +export let getActiveSession = (): WorkspaceSession | null => activeSession; + +export let resolveStagedEntrypoint = (session: WorkspaceSession, entrypoint?: string): string => { + let real = resolveEntrypoint({ cwd: resolveControlCwd(), entrypoint }); + return mapPathToStaged({ + repoRoot: session.repoRoot, + stagedRoot: session.stagedEntrypoint, + sourcePath: real + }); +}; + +export let isStagingEnabled = (opts?: { noStage?: boolean }): boolean => { + if (opts?.noStage) return false; + if (process.env.CONTROL_NO_STAGE === '1') return false; + return true; +}; + +export let createWorkspaceSession = async (opts: { + entrypoint?: string; + verbose?: boolean; +}): Promise => { + if (activeSession) return activeSession; + + let cwd = resolveControlCwd(); + let repoRoot = findControlRoot(cwd); + let realEntrypoint = resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); + let id = `${Date.now()}`; + let stagedEntrypoint = join(repoRoot, '.control', 'temp-src', id); + + await copyGitAwareTree({ + sourceRoot: repoRoot, + destRoot: stagedEntrypoint, + verbose: opts.verbose + }); + + if (!existsSync(stagedEntrypoint)) { + throw new Error(`Failed to create staged workspace at ${stagedEntrypoint}`); + } + + let stagedOssRoot = resolveOssRoot(stagedEntrypoint); + + activeSession = { + id, + repoRoot, + realEntrypoint, + stagedEntrypoint, + stagedOssRoot + }; + + if (opts.verbose) { + console.error(`[control:stage] Session ${id}`); + console.error(`[control:stage] repo root: ${repoRoot}`); + console.error(`[control:stage] staged at: ${stagedEntrypoint}`); + console.error(`[control:stage] staged oss: ${stagedOssRoot}`); + } + + return activeSession; +}; + +export let destroyWorkspaceSession = async (opts?: { keep?: boolean }) => { + if (!activeSession) return; + + let session = activeSession; + activeSession = null; + + if (opts?.keep) { + console.error(`[control:stage] Keeping staged workspace at ${session.stagedEntrypoint}`); + return; + } + + if (existsSync(session.stagedEntrypoint)) { + rmSync(session.stagedEntrypoint, { recursive: true, force: true }); + } +}; + +export let withWorkspaceSession = async ( + opts: { + entrypoint?: string; + verbose?: boolean; + keep?: boolean; + noStage?: boolean; + }, + fn: (session: WorkspaceSession | null) => Promise +): Promise => { + if (!isStagingEnabled(opts)) { + return fn(null); + } + + let session = await createWorkspaceSession({ + entrypoint: opts.entrypoint, + verbose: opts.verbose + }); + + try { + return await fn(session); + } finally { + await destroyWorkspaceSession({ keep: opts.keep }); + } +}; diff --git a/src/tooling/control/src/staging/staging.integration.test.ts b/src/tooling/control/src/staging/staging.integration.test.ts new file mode 100644 index 000000000..72052a672 --- /dev/null +++ b/src/tooling/control/src/staging/staging.integration.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, it } from 'bun:test'; +import { existsSync } from 'fs'; +import { join } from 'path'; +import { resolveBuild } from '../compose/builds'; +import { resolveGraph } from '../graph/resolver'; +import { getRegistry, resolveService } from '../registry'; +import { createWorkspaceSession, destroyWorkspaceSession } from './session'; + +describe('staged build context', () => { + it('points docker builds at .control/temp-src', async () => { + let session = await createWorkspaceSession({ entrypoint: '.', verbose: false }); + + try { + let registry = getRegistry({ cwd: process.cwd(), entrypoint: '.', session }); + let service = resolveService(registry, 'subspace-public'); + let graph = resolveGraph({ + entrypoint: registry.controlRoot, + targetDir: service.dir, + registry + }); + let build = resolveBuild(graph, { role: 'test-runner' }); + + expect(build.context).toContain(join('.control', 'temp-src', session.id)); + expect(existsSync(build.context)).toBe(true); + } finally { + await destroyWorkspaceSession(); + } + }); +}); diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts index e568ace9a..fd6d3ddc9 100644 --- a/src/tooling/control/src/types.ts +++ b/src/tooling/control/src/types.ts @@ -157,6 +157,9 @@ export type BuildOptions = { verbose?: boolean; tagPrefix?: string; services?: ControlService[]; + session?: WorkspaceSession | null; + keep?: boolean; + noStage?: boolean; }; export type RunOptions = { @@ -168,6 +171,16 @@ export type RunOptions = { verbose?: boolean; ci?: boolean; services?: ControlService[]; + session?: WorkspaceSession | null; + noStage?: boolean; +}; + +export type WorkspaceSession = { + id: string; + repoRoot: string; + realEntrypoint: string; + stagedEntrypoint: string; + stagedOssRoot: string; }; export type MockDefinition = { From af93779d42e0ac382d2c6a0f66816e387488bee4 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sat, 23 May 2026 16:21:47 +0200 Subject: [PATCH 15/69] Vendor lowerdeck --- .gitignore | 3 + bun.lock | 16091 +++++++++------- package.json | 1 + src/_shared/backend/api-key/package.json | 18 + .../backend/api-key/src/base62.test.ts | 38 + src/_shared/backend/api-key/src/base62.ts | 34 + src/_shared/backend/api-key/src/index.ts | 1 + src/_shared/backend/api-key/src/keys.ts | 135 + src/_shared/backend/api-key/tsconfig.json | 9 + src/_shared/backend/api-key/tsup.config.js | 11 + src/_shared/backend/api-mux/package.json | 18 + src/_shared/backend/api-mux/src/index.ts | 1 + src/_shared/backend/api-mux/src/mux.ts | 54 + src/_shared/backend/api-mux/tsconfig.json | 9 + src/_shared/backend/api-mux/tsup.config.js | 11 + src/_shared/backend/cache/package.json | 21 + src/_shared/backend/cache/src/index.ts | 165 + src/_shared/backend/cache/tsconfig.json | 9 + src/_shared/backend/cron/package.json | 23 + src/_shared/backend/cron/src/index.ts | 95 + src/_shared/backend/cron/tsconfig.json | 9 + src/_shared/backend/env/package.json | 18 + src/_shared/backend/env/src/env.test.ts | 38 + src/_shared/backend/env/src/env.ts | 26 + src/_shared/backend/env/src/index.ts | 1 + src/_shared/backend/env/tsconfig.json | 9 + src/_shared/backend/error/package.json | 19 + .../backend/error/src/defaultErrors.test.ts | 10 + .../backend/error/src/defaultErrors.ts | 121 + src/_shared/backend/error/src/error.test.ts | 94 + src/_shared/backend/error/src/error.ts | 83 + src/_shared/backend/error/src/index.ts | 2 + src/_shared/backend/error/tsconfig.json | 9 + src/_shared/backend/event/package.json | 21 + src/_shared/backend/event/src/eventObject.ts | 100 + src/_shared/backend/event/src/index.ts | 1 + src/_shared/backend/event/tsconfig.json | 9 + .../backend/execution-context/.gitignore | 34 + .../backend/execution-context/package.json | 20 + .../src/execution-context.ts | 59 + .../backend/execution-context/src/index.ts | 2 + .../src/with-execution-context.ts | 139 + .../backend/execution-context/tsconfig.json | 9 + .../backend/forwarded-for/package.json | 15 + .../backend/forwarded-for/src/index.ts | 1 + src/_shared/backend/forwarded-for/src/ip.ts | 26 + .../backend/forwarded-for/tsconfig.json | 9 + src/_shared/backend/hono/package.json | 21 + src/_shared/backend/hono/src/context.ts | 15 + src/_shared/backend/hono/src/hono.ts | 33 + src/_shared/backend/hono/src/index.ts | 3 + src/_shared/backend/hono/src/validation.ts | 59 + src/_shared/backend/hono/tsconfig.json | 9 + src/_shared/backend/lock/package.json | 23 + src/_shared/backend/lock/src/index.ts | 121 + src/_shared/backend/lock/tsconfig.json | 9 + src/_shared/backend/pagination/package.json | 21 + src/_shared/backend/pagination/src/cursor.ts | 52 + src/_shared/backend/pagination/src/index.ts | 3 + .../pagination/src/paginatedProvider.ts | 169 + .../backend/pagination/src/paginator.ts | 121 + src/_shared/backend/pagination/src/types.ts | 7 + src/_shared/backend/pagination/tsconfig.json | 9 + src/_shared/backend/pagination/tsup.config.js | 11 + src/_shared/backend/presenter/package.json | 18 + src/_shared/backend/presenter/src/index.ts | 1 + .../backend/presenter/src/presenter.ts | 184 + src/_shared/backend/presenter/tsconfig.json | 9 + src/_shared/backend/presenter/tsup.config.js | 11 + src/_shared/backend/queue/package.json | 26 + .../backend/queue/src/drivers/bullmq.ts | 339 + src/_shared/backend/queue/src/index.ts | 56 + .../backend/queue/src/lib/queueRetryError.ts | 5 + src/_shared/backend/queue/src/types.ts | 18 + src/_shared/backend/queue/tsconfig.json | 9 + src/_shared/backend/redis/package.json | 24 + src/_shared/backend/redis/src/index.ts | 3 + src/_shared/backend/redis/src/redis.ts | 69 + src/_shared/backend/redis/src/redisStreams.ts | 136 + .../redis/src/utils/parseRedisUrl.test.ts | 46 + .../backend/redis/src/utils/parseRedisUrl.ts | 12 + src/_shared/backend/redis/tsconfig.json | 9 + src/_shared/backend/service/package.json | 18 + src/_shared/backend/service/src/index.ts | 77 + src/_shared/backend/service/tsconfig.json | 9 + src/_shared/backend/telemetry/package.json | 28 + src/_shared/backend/telemetry/src/index.ts | 162 + src/_shared/backend/telemetry/tsconfig.json | 9 + .../backend/testing-tools/package.json | 22 + .../testing-tools/src/factories.test.ts | 52 + .../testing-tools/src/factories/index.ts | 45 + .../backend/testing-tools/src/http.test.ts | 49 + .../backend/testing-tools/src/http/index.ts | 165 + .../backend/testing-tools/src/index.ts | 7 + .../backend/testing-tools/src/prisma.test.ts | 55 + .../backend/testing-tools/src/prisma/index.ts | 169 + .../backend/testing-tools/src/vitest.test.ts | 38 + .../backend/testing-tools/src/vitest/ci.ts | 4 + .../testing-tools/src/vitest/config.ts | 25 + .../backend/testing-tools/src/vitest/env.ts | 10 + .../backend/testing-tools/src/vitest/setup.ts | 14 + .../backend/testing-tools/tsconfig.json | 9 + src/_shared/backend/tokens/package.json | 19 + src/_shared/backend/tokens/src/index.ts | 1 + src/_shared/backend/tokens/src/tokens.test.ts | 92 + src/_shared/backend/tokens/src/tokens.ts | 167 + src/_shared/backend/tokens/tsconfig.json | 9 + src/_shared/rpc/rpc-client/package.json | 24 + src/_shared/rpc/rpc-client/src/index.ts | 4 + .../rpc/rpc-client/src/request.test.ts | 71 + src/_shared/rpc/rpc-client/src/request.ts | 234 + .../rpc-client/src/shared/clientBuilder.ts | 101 + .../rpc/rpc-client/src/shared/requester.ts | 33 + src/_shared/rpc/rpc-client/tsconfig.json | 9 + src/_shared/rpc/rpc-client/tsup.config.js | 11 + src/_shared/rpc/rpc-server/package.json | 26 + .../rpc/rpc-server/src/controller.test.ts | 251 + src/_shared/rpc/rpc-server/src/controller.ts | 203 + src/_shared/rpc/rpc-server/src/extractIp.ts | 9 + src/_shared/rpc/rpc-server/src/index.ts | 3 + src/_shared/rpc/rpc-server/src/rpcMux.ts | 466 + src/_shared/rpc/rpc-server/src/server.ts | 276 + src/_shared/rpc/rpc-server/tsconfig.json | 9 + src/_shared/rpc/rpc-server/tsup.config.js | 11 + src/_shared/util/anonymize-ip/package.json | 15 + .../util/anonymize-ip/src/anonymizeIp.test.ts | 87 + .../util/anonymize-ip/src/anonymizeIp.ts | 160 + src/_shared/util/anonymize-ip/src/index.ts | 1 + src/_shared/util/anonymize-ip/tsconfig.json | 9 + src/_shared/util/anonymize-ip/tsup.config.js | 11 + src/_shared/util/base62/package.json | 18 + src/_shared/util/base62/src/base62.test.ts | 19 + src/_shared/util/base62/src/base62.ts | 14 + src/_shared/util/base62/src/index.ts | 1 + src/_shared/util/base62/tsconfig.json | 9 + src/_shared/util/canonicalize/package.json | 15 + .../canonicalize/src/canonicalize.test.ts | 58 + .../util/canonicalize/src/canonicalize.ts | 41 + src/_shared/util/canonicalize/src/index.ts | 1 + src/_shared/util/canonicalize/tsconfig.json | 9 + src/_shared/util/case/package.json | 15 + src/_shared/util/case/src/cases.test.ts | 97 + src/_shared/util/case/src/cases.ts | 62 + src/_shared/util/case/src/index.ts | 1 + src/_shared/util/case/src/normalize.test.ts | 39 + src/_shared/util/case/src/normalize.ts | 16 + src/_shared/util/case/src/special.ts | 158 + src/_shared/util/case/tsconfig.json | 9 + src/_shared/util/delay/.gitignore | 34 + src/_shared/util/delay/package.json | 15 + src/_shared/util/delay/src/index.ts | 1 + src/_shared/util/delay/tsconfig.json | 9 + src/_shared/util/emitter/package.json | 15 + src/_shared/util/emitter/src/emitter.test.ts | 92 + src/_shared/util/emitter/src/emitter.ts | 45 + src/_shared/util/emitter/src/index.ts | 1 + src/_shared/util/emitter/tsconfig.json | 9 + src/_shared/util/encryption/package.json | 20 + src/_shared/util/encryption/src/base86.ts | 11 + src/_shared/util/encryption/src/crypto.ts | 80 + src/_shared/util/encryption/src/index.ts | 28 + src/_shared/util/encryption/tsconfig.json | 9 + src/_shared/util/flatten/package.json | 15 + src/_shared/util/flatten/src/deepen.test.ts | 53 + src/_shared/util/flatten/src/deepen.ts | 53 + src/_shared/util/flatten/src/flatten.test.ts | 47 + src/_shared/util/flatten/src/flatten.ts | 30 + src/_shared/util/flatten/src/index.ts | 2 + src/_shared/util/flatten/tsconfig.json | 9 + src/_shared/util/hash/package.json | 18 + src/_shared/util/hash/src/hash.test.ts | 16 + src/_shared/util/hash/src/hash.ts | 14 + src/_shared/util/hash/src/index.ts | 1 + src/_shared/util/hash/tsconfig.json | 9 + src/_shared/util/id/package.json | 22 + src/_shared/util/id/src/id.test.ts | 13 + src/_shared/util/id/src/id.ts | 210 + src/_shared/util/id/src/index.ts | 1 + src/_shared/util/id/tsconfig.json | 9 + src/_shared/util/ip-info/package.json | 15 + src/_shared/util/ip-info/src/index.ts | 1 + src/_shared/util/ip-info/src/ip.test.ts | 39 + src/_shared/util/ip-info/src/ip.ts | 59 + src/_shared/util/ip-info/tsconfig.json | 9 + src/_shared/util/join-paths/package.json | 15 + src/_shared/util/join-paths/src/index.ts | 1 + .../util/join-paths/src/joinPaths.test.ts | 28 + src/_shared/util/join-paths/src/joinPaths.ts | 22 + src/_shared/util/join-paths/tsconfig.json | 9 + src/_shared/util/jwt/package.json | 18 + src/_shared/util/jwt/src/index.ts | 1 + src/_shared/util/jwt/src/jwt.test.ts | 60 + src/_shared/util/jwt/src/jwt.ts | 76 + src/_shared/util/jwt/tsconfig.json | 9 + src/_shared/util/memo/package.json | 15 + src/_shared/util/memo/src/index.ts | 1 + src/_shared/util/memo/src/memo.test.ts | 52 + src/_shared/util/memo/src/memo.ts | 23 + src/_shared/util/memo/tsconfig.json | 9 + src/_shared/util/merge/package.json | 15 + src/_shared/util/merge/src/index.ts | 1 + src/_shared/util/merge/src/merge.test.ts | 55 + src/_shared/util/merge/src/merge.ts | 22 + src/_shared/util/merge/tsconfig.json | 9 + src/_shared/util/murmur3/package.json | 15 + src/_shared/util/murmur3/src/index.ts | 1 + src/_shared/util/murmur3/src/murmur3.test.ts | 50 + src/_shared/util/murmur3/src/murmur3.ts | 53 + src/_shared/util/murmur3/tsconfig.json | 9 + src/_shared/util/normalize-email/package.json | 15 + src/_shared/util/normalize-email/src/index.ts | 1 + .../src/normalizeEmail.test.ts | 40 + .../normalize-email/src/normalizeEmail.ts | 16 + .../util/normalize-email/tsconfig.json | 9 + src/_shared/util/once/package.json | 15 + src/_shared/util/once/src/index.ts | 1 + src/_shared/util/once/src/once.test.ts | 52 + src/_shared/util/once/src/once.ts | 13 + src/_shared/util/once/tsconfig.json | 9 + .../util/programmable-promise/.gitignore | 34 + .../util/programmable-promise/package.json | 15 + .../programmable-promise/src/index.test.ts | 32 + .../util/programmable-promise/src/index.ts | 30 + .../util/programmable-promise/tsconfig.json | 9 + src/_shared/util/proxy/package.json | 15 + src/_shared/util/proxy/src/index.ts | 1 + src/_shared/util/proxy/src/proxy.test.ts | 41 + src/_shared/util/proxy/src/proxy.ts | 18 + src/_shared/util/proxy/tsconfig.json | 9 + src/_shared/util/random-from-array/.gitignore | 34 + .../util/random-from-array/package.json | 15 + .../util/random-from-array/src/index.test.ts | 34 + .../util/random-from-array/src/index.ts | 6 + .../util/random-from-array/tsconfig.json | 9 + src/_shared/util/random-number/package.json | 15 + src/_shared/util/random-number/src/index.ts | 1 + .../random-number/src/randomNumber.test.ts | 33 + .../util/random-number/src/randomNumber.ts | 3 + src/_shared/util/random-number/tsconfig.json | 9 + src/_shared/util/sentry/package.json | 18 + src/_shared/util/sentry/src/index.ts | 9 + src/_shared/util/sentry/tsconfig.json | 9 + src/_shared/util/serialize/package.json | 18 + src/_shared/util/serialize/src/index.ts | 1 + src/_shared/util/serialize/src/json.test.ts | 30 + src/_shared/util/serialize/src/json.ts | 38 + src/_shared/util/serialize/tsconfig.json | 9 + src/_shared/util/shadow-id/package.json | 18 + src/_shared/util/shadow-id/src/index.ts | 15 + src/_shared/util/shadow-id/tsconfig.json | 9 + src/_shared/util/sign/package.json | 19 + src/_shared/util/sign/src/index.ts | 1 + src/_shared/util/sign/src/sign.test.ts | 87 + src/_shared/util/sign/src/sign.ts | 90 + src/_shared/util/sign/tsconfig.json | 9 + src/_shared/util/slugify/package.json | 19 + src/_shared/util/slugify/src/index.ts | 61 + src/_shared/util/slugify/tsconfig.json | 9 + src/_shared/util/snowflake/package.json | 15 + src/_shared/util/snowflake/src/index.ts | 1 + src/_shared/util/snowflake/src/snowflake.ts | 140 + src/_shared/util/snowflake/tsconfig.json | 9 + src/_shared/util/timezone/package.json | 15 + src/_shared/util/timezone/src/data.ts | 2982 +++ src/_shared/util/timezone/src/getUtcOffset.ts | 5 + src/_shared/util/timezone/src/index.ts | 22 + src/_shared/util/timezone/tsconfig.json | 9 + src/_shared/util/unique/.gitignore | 34 + src/_shared/util/unique/package.json | 15 + src/_shared/util/unique/src/index.test.ts | 40 + src/_shared/util/unique/src/index.ts | 1 + src/_shared/util/unique/tsconfig.json | 9 + src/_shared/util/validation/package.json | 15 + src/_shared/util/validation/src/index.ts | 36 + .../util/validation/src/lib/introspect.ts | 33 + .../util/validation/src/lib/result.test.ts | 80 + src/_shared/util/validation/src/lib/result.ts | 11 + src/_shared/util/validation/src/lib/types.ts | 57 + .../util/validation/src/lib/validator.test.ts | 82 + .../util/validation/src/lib/validator.ts | 55 + .../validation/src/modifiers/color.test.ts | 29 + .../util/validation/src/modifiers/color.ts | 18 + .../validation/src/modifiers/email.test.ts | 29 + .../util/validation/src/modifiers/email.ts | 18 + .../validation/src/modifiers/emoji.test.ts | 31 + .../util/validation/src/modifiers/emoji.ts | 18 + .../validation/src/modifiers/endsWith.test.ts | 50 + .../util/validation/src/modifiers/endsWith.ts | 18 + .../validation/src/modifiers/equals.test.ts | 70 + .../util/validation/src/modifiers/equals.ts | 41 + .../validation/src/modifiers/includes.test.ts | 64 + .../util/validation/src/modifiers/includes.ts | 35 + .../util/validation/src/modifiers/index.ts | 17 + .../validation/src/modifiers/integer.test.ts | 45 + .../util/validation/src/modifiers/integer.ts | 18 + .../util/validation/src/modifiers/ip.test.ts | 34 + .../util/validation/src/modifiers/ip.ts | 50 + .../validation/src/modifiers/isoDate.test.ts | 83 + .../util/validation/src/modifiers/isoDate.ts | 51 + .../validation/src/modifiers/length.test.ts | 107 + .../util/validation/src/modifiers/length.ts | 54 + .../src/modifiers/multipleOf.test.ts | 51 + .../validation/src/modifiers/multipleOf.ts | 18 + .../validation/src/modifiers/oneOf.test.ts | 27 + .../util/validation/src/modifiers/oneOf.ts | 16 + .../validation/src/modifiers/positive.test.ts | 64 + .../util/validation/src/modifiers/positive.ts | 35 + .../validation/src/modifiers/regex.test.ts | 40 + .../util/validation/src/modifiers/regex.ts | 17 + .../validation/src/modifiers/size.test.ts | 84 + .../util/validation/src/modifiers/size.ts | 37 + .../src/modifiers/startsWith.test.ts | 40 + .../validation/src/modifiers/startsWith.ts | 18 + .../util/validation/src/modifiers/url.test.ts | 48 + .../util/validation/src/modifiers/url.ts | 30 + .../validation/src/transformers/case.test.ts | 36 + .../util/validation/src/transformers/case.ts | 5 + .../util/validation/src/transformers/index.ts | 2 + .../validation/src/transformers/trim.test.ts | 32 + .../util/validation/src/transformers/trim.ts | 7 + .../validation/src/validators/any.test.ts | 11 + .../util/validation/src/validators/any.ts | 11 + .../validation/src/validators/array.test.ts | 46 + .../util/validation/src/validators/array.ts | 43 + .../validation/src/validators/boolean.test.ts | 39 + .../util/validation/src/validators/boolean.ts | 34 + .../validation/src/validators/date.test.ts | 39 + .../util/validation/src/validators/date.ts | 26 + .../validation/src/validators/enum.test.ts | 25 + .../util/validation/src/validators/enum.ts | 56 + .../util/validation/src/validators/index.ts | 16 + .../src/validators/intersection.test.ts | 35 + .../validation/src/validators/intersection.ts | 24 + .../validation/src/validators/literal.test.ts | 42 + .../util/validation/src/validators/literal.ts | 26 + .../validation/src/validators/null.test.ts | 39 + .../util/validation/src/validators/null.ts | 18 + .../src/validators/nullable.test.ts | 34 + .../validation/src/validators/nullable.ts | 16 + .../validation/src/validators/number.test.ts | 39 + .../util/validation/src/validators/number.ts | 23 + .../validation/src/validators/object.test.ts | 66 + .../util/validation/src/validators/object.ts | 66 + .../src/validators/optional.test.ts | 33 + .../validation/src/validators/optional.ts | 17 + .../validation/src/validators/record.test.ts | 56 + .../util/validation/src/validators/record.ts | 56 + .../validation/src/validators/string.test.ts | 39 + .../util/validation/src/validators/string.ts | 30 + .../validation/src/validators/union.test.ts | 73 + .../util/validation/src/validators/union.ts | 34 + .../util/validation/src/validators/void.ts | 6 + src/_shared/util/validation/tsconfig.json | 9 + .../util/websocket-client/package.json | 18 + .../util/websocket-client/src/index.ts | 93 + .../util/websocket-client/tsconfig.json | 9 + src/backend/apis/auth/package.json | 10 +- src/backend/apis/auth/src/index.ts | 4 +- src/backend/apis/connection/package.json | 10 +- src/backend/apis/connection/src/env.ts | 4 +- src/backend/apis/connection/src/getSession.ts | 2 +- src/backend/apis/connection/src/index.ts | 4 +- src/backend/apis/connection/src/magic.ts | 6 +- src/backend/apis/connection/src/oauth/hono.ts | 2 +- .../apis/connection/src/oauth/utils.ts | 2 +- src/backend/apis/connection/src/portal.ts | 4 +- src/backend/apis/core/package.json | 10 +- .../core/src/controllers/consumer/provider.ts | 6 +- .../core/src/controllers/consumer/session.ts | 4 +- .../src/controllers/dashboard/assistant.ts | 6 +- .../core/src/controllers/dashboard/boot.ts | 2 +- .../dashboard/oauthAuthorizationRequest.ts | 2 +- .../src/controllers/dashboard/organization.ts | 4 +- .../dashboard/organizationInvite.ts | 2 +- .../core/src/controllers/dashboard/profile.ts | 2 +- .../dashboard/projectConfiguration.ts | 4 +- .../core/src/controllers/dashboard/usage.ts | 2 +- .../core/src/controllers/dashboard/user.ts | 4 +- .../instance/callbacks/callback.ts | 6 +- .../instance/callbacks/callbackDestination.ts | 6 +- .../instance/callbacks/callbackEvent.ts | 6 +- .../instance/callbacks/callbackInstance.ts | 4 +- .../callbacks/callbackNotification.ts | 6 +- .../controllers/instance/consumer/consumer.ts | 6 +- .../instance/consumer/consumerSurface.ts | 6 +- .../custom-provider/customProvider.ts | 6 +- .../custom-provider/customProviderCode.ts | 2 +- .../custom-provider/customProviderCommit.ts | 6 +- .../customProviderDeployment.ts | 6 +- .../customProviderEnvironment.ts | 6 +- .../custom-provider/customProviderVersion.ts | 6 +- .../instance/files/_listFilters.ts | 2 +- .../controllers/instance/files/document.ts | 4 +- .../instance/files/documentParticipant.ts | 6 +- .../instance/files/documentVersion.ts | 6 +- .../src/controllers/instance/files/file.ts | 4 +- .../controllers/instance/files/fileLink.ts | 4 +- .../src/controllers/instance/files/store.ts | 6 +- .../controllers/instance/files/storeItem.ts | 6 +- .../instance/files/storeParticipant.ts | 6 +- .../controllers/instance/identity/agent.ts | 6 +- .../controllers/instance/identity/identity.ts | 6 +- .../instance/identity/identityActor.ts | 6 +- .../instance/identity/identityCredential.ts | 6 +- .../instance/identity/identityDelegation.ts | 6 +- .../identity/identityDelegationConfig.ts | 6 +- .../identity/identityDelegationRequest.ts | 6 +- .../src/controllers/instance/instances.ts | 2 +- .../instance/integrations/integration.ts | 6 +- .../integrations/integrationInstance.ts | 6 +- .../integrations/integrationInstanceGroup.ts | 6 +- .../integrationInstanceGroupProvider.ts | 6 +- .../integrationInstanceProvider.ts | 6 +- .../integrations/integrationProvider.ts | 6 +- .../integrations/integrationSetupSession.ts | 6 +- .../instance/integrations/providerTemplate.ts | 6 +- .../instance/magic-mcp/magicMcpEndpoint.ts | 6 +- .../instance/magic-mcp/magicMcpGroup.ts | 6 +- .../instance/magic-mcp/magicMcpServer.ts | 6 +- .../instance/magic-mcp/magicMcpSession.ts | 6 +- .../instance/magic-mcp/magicMcpToken.ts | 6 +- .../src/controllers/instance/portal/portal.ts | 6 +- .../controllers/instance/portal/portalAuth.ts | 6 +- .../instance/portal/portalConsumerAccess.ts | 6 +- .../portal/portalConsumerAccessListing.ts | 6 +- .../portal/portalConsumerAccessRequest.ts | 6 +- .../instance/portal/portalConsumerGroup.ts | 6 +- .../instance/portal/portalConsumerInvite.ts | 6 +- .../instance/portal/portalConsumerProfile.ts | 6 +- .../portalConsumerSurfaceProviderGroup.ts | 6 +- .../provider-auth/providerAuthConfig.ts | 6 +- .../provider-auth/providerAuthConfigError.ts | 6 +- .../provider-auth/providerAuthConfigEvent.ts | 6 +- .../provider-auth/providerAuthCredentials.ts | 6 +- .../provider-auth/providerAuthExport.ts | 6 +- .../provider-auth/providerAuthImport.ts | 6 +- .../provider-auth/providerSetupSession.ts | 6 +- .../provider-config/providerConfig.ts | 6 +- .../provider-config/providerConfigVault.ts | 6 +- .../provider-config/providerDeployment.ts | 6 +- .../provider-config/providerInvocation.ts | 2 +- .../controllers/instance/provider/provider.ts | 6 +- .../instance/provider/providerAuthMethod.ts | 6 +- .../instance/provider/providerCategory.ts | 6 +- .../instance/provider/providerCollection.ts | 6 +- .../instance/provider/providerGroup.ts | 6 +- .../instance/provider/providerListing.ts | 6 +- .../instance/provider/providerPublisher.ts | 6 +- .../provider/providerSpecification.ts | 6 +- .../instance/provider/providerTool.ts | 6 +- .../instance/provider/providerTrigger.ts | 6 +- .../instance/provider/providerVersion.ts | 6 +- .../src/controllers/instance/scm/accounts.ts | 2 +- .../controllers/instance/scm/connections.ts | 6 +- .../controllers/instance/scm/installation.ts | 4 +- .../src/controllers/instance/scm/providers.ts | 6 +- .../src/controllers/instance/scm/repos.ts | 6 +- .../controllers/instance/sessions/_shared.ts | 2 +- .../instance/sessions/providerRun.ts | 6 +- .../controllers/instance/sessions/session.ts | 6 +- .../instance/sessions/sessionConnection.ts | 6 +- .../instance/sessions/sessionError.ts | 6 +- .../instance/sessions/sessionErrorGroup.ts | 6 +- .../instance/sessions/sessionEvent.ts | 6 +- .../instance/sessions/sessionMessage.ts | 6 +- .../instance/sessions/sessionParticipant.ts | 6 +- .../instance/sessions/sessionProvider.ts | 6 +- .../instance/sessions/sessionTemplate.ts | 6 +- .../sessions/sessionTemplateProvider.ts | 6 +- .../controllers/instance/sessions/toolCall.ts | 6 +- .../instance/skills/_marketplaceAccess.ts | 2 +- .../src/controllers/instance/skills/skill.ts | 6 +- .../controllers/instance/skills/skillAgent.ts | 6 +- .../instance/skills/skillConfiguration.ts | 4 +- .../instance/skills/skillExport.ts | 6 +- .../controllers/instance/skills/skillGroup.ts | 6 +- .../instance/skills/skillGroupItem.ts | 6 +- .../controllers/instance/skills/skillItem.ts | 6 +- .../instance/skills/skillMarketplace.ts | 6 +- .../instance/skills/skillMarketplacePlugin.ts | 6 +- .../skills/skillMarketplaceRepository.ts | 4 +- .../instance/skills/skillParticipant.ts | 6 +- .../instance/skills/skillPlugin.ts | 6 +- .../instance/skills/skillPluginRepository.ts | 4 +- .../instance/skills/skillPluginSkill.ts | 6 +- .../controllers/instance/skills/skillSync.ts | 6 +- .../instance/skills/skillTemplate.ts | 6 +- .../instance/skills/skillTemplateItem.ts | 6 +- .../instance/skills/skillVersion.ts | 6 +- .../management/access/accessPolicy.ts | 6 +- .../management/access/accessRole.ts | 6 +- .../src/controllers/management/access/team.ts | 4 +- .../src/controllers/management/auth/apiKey.ts | 6 +- .../controllers/management/auth/cliDevice.ts | 6 +- .../management/auth/oauthApplication.ts | 6 +- .../management/auth/oauthAuthorization.ts | 6 +- .../management/auth/oauthAuthorizationLog.ts | 4 +- .../management/auth/oauthInstallation.ts | 6 +- .../management/auth/serviceAccount.ts | 6 +- .../management/organization/instance.ts | 4 +- .../management/organization/organization.ts | 2 +- .../organization/organizationInvite.ts | 4 +- .../organization/organizationMember.ts | 4 +- .../management/organization/project.ts | 6 +- .../controllers/test-helpers/consumerOAuth.ts | 2 +- src/backend/apis/core/src/lib/dateFilter.ts | 2 +- .../apis/core/src/lib/providerValidators.ts | 2 +- src/backend/apis/core/src/lib/requireParam.ts | 2 +- .../checkFineGrainedSessionAccess.ts | 2 +- .../apis/core/src/middleware/consumerGroup.ts | 2 +- .../apis/core/src/middleware/hasFlags.ts | 2 +- .../apis/core/src/middleware/instanceGroup.ts | 2 +- .../apis/core/src/middleware/isDashboard.ts | 2 +- .../core/src/middleware/managementGroup.ts | 2 +- .../core/src/middleware/organizationGroup.ts | 2 +- .../requireConsumerTokenForPublishableKey.ts | 2 +- .../requireNonPublishableMachineAccess.ts | 2 +- .../apis/core/src/middleware/userGroup.ts | 2 +- .../implementation/_shared/toolFilter.ts | 2 +- .../accessControl/accessPolicy.ts | 2 +- .../accessControl/accessPolicyPreview.ts | 2 +- .../accessControl/accessPolicyVersion.ts | 2 +- .../accessControl/accessRole.ts | 2 +- .../accessControl/accessRoleVersion.ts | 2 +- .../implementation/assistant/assistant.ts | 2 +- .../assistant/assistantConversation.ts | 2 +- .../assistant/assistantMessage.ts | 2 +- .../presenters/implementation/auth/apiKey.ts | 2 +- .../implementation/auth/cliDevice.ts | 2 +- .../implementation/auth/machineAccess.ts | 2 +- .../implementation/auth/oauthApplication.ts | 2 +- .../auth/oauthApplicationClientSecret.ts | 2 +- .../implementation/auth/oauthAuthorization.ts | 2 +- .../auth/oauthAuthorizationLog.ts | 2 +- .../auth/oauthAuthorizationRequest.ts | 2 +- .../implementation/auth/oauthInstallation.ts | 2 +- .../auth/oauthScopePermissions.ts | 2 +- .../implementation/auth/serviceAccount.ts | 2 +- .../auth/serviceAccountCredential.ts | 2 +- .../presenters/implementation/auth/token.ts | 2 +- .../implementation/consumer/consumer.ts | 2 +- .../implementation/consumer/consumerAccess.ts | 2 +- .../consumer/consumerAccessListing.ts | 2 +- .../consumer/consumerAccessRequest.ts | 2 +- .../consumer/consumerAndProfile.ts | 2 +- .../implementation/consumer/consumerGroup.ts | 2 +- .../implementation/consumer/consumerInvite.ts | 2 +- .../consumer/consumerProfile.ts | 2 +- .../consumer/consumerProvider.ts | 2 +- .../consumer/consumerSession.ts | 2 +- .../consumer/consumerSurface.ts | 2 +- .../consumer/consumerSurfaceProviderGroup.ts | 2 +- .../implementation/files/document.ts | 2 +- .../files/documentParticipant.ts | 2 +- .../implementation/files/documentVersion.ts | 2 +- .../presenters/implementation/files/file.ts | 2 +- .../implementation/files/fileLink.ts | 2 +- .../implementation/files/permissions.ts | 2 +- .../presenters/implementation/files/store.ts | 2 +- .../implementation/files/storeItem.ts | 2 +- .../implementation/files/storeParticipant.ts | 2 +- .../implementation/organization/instance.ts | 2 +- .../organization/organization.ts | 2 +- .../organization/organizationActor.ts | 2 +- .../organization/organizationInvite.ts | 2 +- .../organization/organizationMember.ts | 2 +- .../implementation/organization/profile.ts | 2 +- .../implementation/organization/project.ts | 2 +- .../organization/projectBrand.ts | 2 +- .../organization/projectRetention.ts | 2 +- .../implementation/organization/team.ts | 2 +- .../implementation/organization/user.ts | 2 +- .../implementation/platform/boot.ts | 2 +- .../implementation/platform/flags.ts | 2 +- .../implementation/platform/secret.ts | 2 +- .../implementation/platform/usage.ts | 2 +- .../implementation/portal/portal.ts | 2 +- .../implementation/portal/portalAuthApp.ts | 2 +- .../portal/portalAuthSsoConnection.ts | 2 +- .../portal/portalAuthSsoTenant.ts | 2 +- .../portal/portalAuthSsoTenantSetup.ts | 2 +- .../portal/portalOAuthAuthorization.ts | 2 +- .../portal/portalOAuthClient.ts | 2 +- .../provider/auth/authConfig.ts | 2 +- .../provider/auth/authConfigError.ts | 2 +- .../provider/auth/authConfigErrorGroup.ts | 2 +- .../provider/auth/authConfigEvent.ts | 2 +- .../provider/auth/authConfigPreview.ts | 2 +- .../provider/auth/authConfigSchema.ts | 2 +- .../provider/auth/authCredentials.ts | 2 +- .../provider/auth/authExport.ts | 2 +- .../provider/auth/authImport.ts | 2 +- .../provider/auth/authImportSchema.ts | 2 +- .../provider/auth/authMethod.ts | 2 +- .../provider/callbacks/callback.ts | 2 +- .../provider/callbacks/callbackDestination.ts | 2 +- .../provider/callbacks/callbackEvent.ts | 2 +- .../provider/callbacks/callbackInstance.ts | 2 +- .../callbacks/callbackNotification.ts | 2 +- .../implementation/provider/config/config.ts | 2 +- .../provider/config/configPreview.ts | 2 +- .../provider/config/configSchema.ts | 2 +- .../provider/config/configVault.ts | 2 +- .../provider/config/deployment.ts | 2 +- .../provider/config/deploymentPreview.ts | 2 +- .../provider/config/providerInvocation.ts | 2 +- .../provider/customProvider/actorPreview.ts | 2 +- .../provider/customProvider/bucket.ts | 2 +- .../customProvider/bucketEditorToken.ts | 2 +- .../provider/customProvider/customProvider.ts | 2 +- .../customProvider/customProviderCommit.ts | 2 +- .../customProviderDeployment.ts | 2 +- .../customProviderEnvironment.ts | 2 +- .../customProvider/customProviderVersion.ts | 2 +- .../implementation/provider/identity/agent.ts | 2 +- .../provider/identity/agentInstance.ts | 2 +- .../provider/identity/identity.ts | 2 +- .../provider/identity/identityActor.ts | 2 +- .../provider/identity/identityCredential.ts | 2 +- .../provider/identity/identityDelegation.ts | 2 +- .../identity/identityDelegationConfig.ts | 2 +- .../identity/identityDelegationRequest.ts | 2 +- .../provider/integrations/integration.ts | 2 +- .../integrations/integrationInstance.ts | 2 +- .../integrations/integrationInstanceGroup.ts | 2 +- .../integrationInstanceGroupProvider.ts | 2 +- .../integrationInstanceProvider.ts | 2 +- .../integrations/integrationProvider.ts | 2 +- .../integrations/integrationSetupSession.ts | 2 +- .../provider/integrations/providerTemplate.ts | 2 +- .../provider/magicMcp/consumerOwnership.ts | 2 +- .../provider/magicMcp/magicMcpEndpoint.ts | 2 +- .../magicMcp/magicMcpEndpointPreview.ts | 2 +- .../provider/magicMcp/magicMcpGroup.ts | 2 +- .../provider/magicMcp/magicMcpServer.ts | 4 +- .../magicMcp/magicMcpServerPreview.ts | 2 +- .../magicMcp/magicMcpServerProvider.ts | 2 +- .../provider/magicMcp/magicMcpSession.ts | 2 +- .../provider/magicMcp/magicMcpToken.ts | 2 +- .../provider/provider/category.ts | 2 +- .../provider/provider/collection.ts | 2 +- .../implementation/provider/provider/group.ts | 2 +- .../provider/provider/provider.ts | 2 +- .../provider/provider/providerListing.ts | 2 +- .../provider/provider/providerPreview.ts | 2 +- .../provider/provider/providerTool.ts | 2 +- .../provider/provider/providerTools.ts | 2 +- .../provider/provider/providerTrigger.ts | 2 +- .../provider/provider/providerType.ts | 2 +- .../provider/provider/providerVersion.ts | 2 +- .../provider/provider/publisher.ts | 2 +- .../provider/provider/specification.ts | 2 +- .../provider/sessions/providerRun.ts | 2 +- .../provider/sessions/providerRunLogs.ts | 2 +- .../provider/sessions/session.ts | 2 +- .../provider/sessions/sessionConnection.ts | 2 +- .../provider/sessions/sessionError.ts | 2 +- .../provider/sessions/sessionErrorGroup.ts | 2 +- .../provider/sessions/sessionEvent.ts | 2 +- .../provider/sessions/sessionMessage.ts | 2 +- .../provider/sessions/sessionParticipant.ts | 2 +- .../provider/sessions/sessionProvider.ts | 2 +- .../provider/sessions/sessionTemplate.ts | 2 +- .../sessions/sessionTemplateProvider.ts | 2 +- .../provider/sessions/sessionWarning.ts | 2 +- .../provider/sessions/setupSession.ts | 2 +- .../provider/sessions/toolCall.ts | 2 +- .../presenters/implementation/scm/accounts.ts | 2 +- .../implementation/scm/connection.ts | 2 +- .../presenters/implementation/scm/repos.ts | 2 +- .../implementation/scm/scmProvider.ts | 2 +- .../implementation/scm/scmProviderSetup.ts | 2 +- .../presenters/implementation/scm/scmPush.ts | 2 +- .../presenters/implementation/skills/skill.ts | 2 +- .../implementation/skills/skillAgent.ts | 2 +- .../skills/skillConfiguration.ts | 2 +- .../implementation/skills/skillExport.ts | 2 +- .../implementation/skills/skillGroup.ts | 2 +- .../implementation/skills/skillGroupItem.ts | 2 +- .../implementation/skills/skillItem.ts | 2 +- .../implementation/skills/skillMarketplace.ts | 2 +- .../skills/skillMarketplacePlugin.ts | 2 +- .../skills/skillMarketplaceRepository.ts | 2 +- .../implementation/skills/skillParticipant.ts | 2 +- .../implementation/skills/skillPlugin.ts | 2 +- .../skills/skillPluginRepository.ts | 2 +- .../implementation/skills/skillPluginSkill.ts | 2 +- .../implementation/skills/skillRepository.ts | 2 +- .../implementation/skills/skillSync.ts | 2 +- .../implementation/skills/skillTemplate.ts | 2 +- .../skills/skillTemplateItem.ts | 2 +- .../implementation/skills/skillVersion.ts | 2 +- .../consumerOAuthTestAuthorization.ts | 2 +- src/backend/apis/custom-portal/package.json | 10 +- .../custom-portal/src/controllers/auth.ts | 4 +- .../custom-portal/src/controllers/boot.ts | 2 +- .../src/controllers/pluginOAuthSelection.ts | 4 +- .../apis/custom-portal/src/lib/portal.ts | 2 +- src/backend/apis/files/package.json | 12 +- src/backend/apis/files/src/index.ts | 8 +- src/backend/apis/files/src/uploadAccess.ts | 2 +- src/backend/apis/oauth/package.json | 8 +- src/backend/apis/oauth/src/lib/hono.ts | 2 +- src/backend/apis/oauth/src/lib/request.ts | 2 +- src/backend/apis/oauth/src/skeleton.ts | 2 +- src/backend/apps/api/package.json | 4 +- src/backend/apps/api/src/components.ts | 2 +- src/backend/auth/package.json | 8 +- src/backend/auth/src/index.ts | 6 +- src/backend/config/package.json | 4 +- src/backend/config/src/env.ts | 4 +- src/backend/db/package.json | 6 +- src/backend/db/src/db/client.ts | 2 +- src/backend/db/src/db/transaction.ts | 2 +- src/backend/internal-clients/package.json | 10 +- src/backend/internal-clients/src/clients.ts | 4 +- src/backend/internal-clients/src/env.ts | 4 +- src/backend/modules/access/package.json | 8 +- .../access/src/definitions/scopeMetadata.ts | 2 +- src/backend/modules/access/src/env.ts | 4 +- .../modules/access/src/services/access.ts | 4 +- .../modules/access/src/services/accessTag.ts | 4 +- .../access/src/services/authentication.ts | 4 +- .../access/src/services/fineGrainedAuth.ts | 4 +- .../access/src/services/fineGrainedKey.ts | 4 +- .../services/sessionClientSecretReference.ts | 2 +- .../modules/access/test/access.test.ts | 2 +- .../access/test/authentication.test.ts | 4 +- .../access/test/fineGrainedAuth.test.ts | 2 +- src/backend/modules/assistant/package.json | 8 +- src/backend/modules/assistant/src/env.ts | 4 +- .../assistant/src/services/assistant.ts | 4 +- .../assistant/src/services/conversation.ts | 4 +- .../modules/assistant/src/services/message.ts | 4 +- .../modules/assistant/src/services/request.ts | 2 +- .../modules/assistant/src/synthesis.ts | 2 +- src/backend/modules/community/package.json | 12 +- .../modules/community/src/services/profile.ts | 4 +- .../modules/community/test/index.test.ts | 4 +- .../modules/community/test/profile.test.ts | 4 +- src/backend/modules/consumer/package.json | 16 +- src/backend/modules/consumer/src/env.ts | 4 +- .../src/lib/consumerProviderContext.ts | 2 +- .../src/lib/consumerSurfaceEmailWhitelist.ts | 2 +- src/backend/modules/consumer/src/lib/oauth.ts | 2 +- .../services/consumerAccess/accessPolicy.ts | 4 +- .../src/services/consumerAccess/ares.ts | 4 +- .../services/consumerAccess/consumerAccess.ts | 6 +- .../consumerAccess/consumerAccessListing.ts | 6 +- .../consumerAccess/consumerAccessRequest.ts | 6 +- .../consumerEntities/consumerIntegration.ts | 4 +- .../consumerProviderCatalog.ts | 6 +- .../consumerProviderDeployment.ts | 4 +- .../consumerProviderSetupSession.ts | 4 +- .../consumerEntities/consumerSkill.ts | 4 +- .../src/services/consumerOAuth/_helpers.ts | 4 +- .../services/consumerOAuth/authorization.ts | 6 +- .../src/services/consumerOAuth/client.ts | 4 +- .../src/services/consumerOAuth/dashboard.ts | 4 +- .../services/consumerOAuth/registration.ts | 4 +- .../src/services/consumerOAuth/routing.ts | 4 +- .../consumerOAuth/testAuthorization.ts | 4 +- .../src/services/consumerOAuth/token.ts | 6 +- .../src/services/consumers/consumer.ts | 6 +- .../src/services/consumers/consumerAuth.ts | 4 +- .../src/services/consumers/consumerGroup.ts | 6 +- .../src/services/consumers/consumerInvite.ts | 6 +- .../src/services/consumers/consumerProfile.ts | 6 +- .../src/services/consumers/consumerSurface.ts | 6 +- .../consumers/consumerSurfaceProviderGroup.ts | 6 +- .../modules/consumer/src/services/portal.ts | 8 +- .../consumer/test/consumerIntegration.test.ts | 2 +- .../test/consumerOAuthLinking.test.ts | 6 +- src/backend/modules/email/package.json | 4 +- src/backend/modules/email/src/env.ts | 4 +- src/backend/modules/email/src/relay.ts | 4 +- src/backend/modules/event/package.json | 6 +- .../modules/event/src/services/ingestEvent.ts | 2 +- src/backend/modules/event/test/index.test.ts | 2 +- .../modules/event/test/ingestEvent.test.ts | 2 +- src/backend/modules/file/package.json | 12 +- src/backend/modules/file/src/env.ts | 4 +- .../modules/file/src/services/document.ts | 4 +- .../file/src/services/documentParticipant.ts | 4 +- .../file/src/services/documentVersion.ts | 4 +- src/backend/modules/file/src/services/file.ts | 6 +- .../modules/file/src/services/fileLink.ts | 6 +- .../file/src/services/fileReference.ts | 4 +- .../modules/file/src/services/scope.ts | 2 +- .../modules/file/src/services/skillAgent.ts | 6 +- .../file/src/services/skillConfiguration.ts | 4 +- .../modules/file/src/services/skillExport.ts | 4 +- .../file/src/services/skillMarketplace.ts | 6 +- .../services/skillMarketplaceRepository.ts | 4 +- .../file/src/services/skillParticipant.ts | 4 +- .../modules/file/src/services/skillPlugin.ts | 6 +- .../src/services/skillPluginRepository.ts | 4 +- .../modules/file/src/services/skillSync.ts | 4 +- .../modules/file/src/services/skillVersion.ts | 6 +- .../modules/file/src/services/store.ts | 4 +- .../modules/file/src/services/storeItem.ts | 4 +- .../file/src/services/storeParticipant.ts | 4 +- src/backend/modules/file/src/storage.ts | 2 +- src/backend/modules/flags/package.json | 6 +- .../modules/flags/src/services/flags.ts | 2 +- .../modules/machine-access/package.json | 10 +- src/backend/modules/machine-access/src/env.ts | 4 +- .../machine-access/src/lib/apiKeyIpFilters.ts | 2 +- .../src/lib/oauthAuthorizationGuards.ts | 2 +- .../src/lib/oauthScopeValidation.ts | 2 +- .../machine-access/src/lib/oauthUrls.ts | 2 +- .../machine-access/src/services/apiKey.ts | 8 +- .../machine-access/src/services/cliDevice.ts | 6 +- .../src/services/machineAccess.ts | 4 +- .../src/services/machineAccessAuth.ts | 4 +- .../src/services/oauthApplication.ts | 6 +- .../src/services/oauthAuthorization.ts | 6 +- .../oauthAuthorizationInstallation.ts | 6 +- .../src/services/oauthAuthorizationLog.ts | 4 +- .../machine-access/src/services/oauthJwk.ts | 4 +- .../machine-access/src/services/oauthOidc.ts | 2 +- .../src/services/serviceAccount.ts | 6 +- .../machine-access/test/apiKey.test.ts | 8 +- .../machine-access/test/machineAccess.test.ts | 2 +- .../test/machineAccessAuth.test.ts | 2 +- .../test/oauthApplication.test.ts | 4 +- .../test/oauthAuthorization.test.ts | 4 +- src/backend/modules/magic/package.json | 14 +- src/backend/modules/magic/src/env.ts | 4 +- .../modules/magic/src/lib/ensureSession.ts | 2 +- .../magic/src/lib/magicMcpConnectHealth.ts | 2 +- .../modules/magic/src/lib/magicMcpTarget.ts | 2 +- .../magic/src/services/magicMcpEndpoint.ts | 8 +- .../magic/src/services/magicMcpGroup.ts | 8 +- .../magic/src/services/magicMcpServer.ts | 8 +- .../magic/src/services/magicMcpSession.ts | 6 +- .../magic/src/services/magicMcpToken.ts | 6 +- .../magic/src/services/providerTemplate.ts | 6 +- .../modules/magic/test/magicMcpLinks.test.ts | 6 +- src/backend/modules/markdown/package.json | 14 +- .../modules/markdown/src/services/markdown.ts | 2 +- .../markdown/test/markdownService.test.ts | 2 +- src/backend/modules/organization/package.json | 12 +- .../src/definitions/defaultScopes.ts | 4 +- src/backend/modules/organization/src/env.ts | 4 +- .../organization/src/lib/accessControl.ts | 2 +- .../organization/src/services/accessPolicy.ts | 8 +- .../src/services/accessPolicyAssignment.ts | 4 +- .../organization/src/services/accessRole.ts | 8 +- .../src/services/authBootstrap.ts | 4 +- .../src/services/effectiveAccess.ts | 2 +- .../organization/src/services/instance.ts | 8 +- .../organization/src/services/organization.ts | 10 +- .../src/services/organizationActor.ts | 6 +- .../src/services/organizationInvite.ts | 6 +- .../src/services/organizationInviteJoin.ts | 4 +- .../src/services/organizationMember.ts | 6 +- .../organization/src/services/project.ts | 8 +- .../organization/src/services/projectBrand.ts | 4 +- .../src/services/projectRetention.ts | 4 +- .../modules/organization/src/services/team.ts | 8 +- .../test/accessPolicyAssignment.test.ts | 2 +- .../organization/test/instance.test.ts | 8 +- .../organization/test/organization.test.ts | 8 +- .../test/organizationActor.test.ts | 6 +- .../test/organizationInvite.test.ts | 6 +- .../test/organizationInviteJoin.test.ts | 4 +- .../test/organizationMember.test.ts | 6 +- .../modules/organization/test/project.test.ts | 8 +- .../test/projectRetention.test.ts | 2 +- src/backend/modules/protect/package.json | 6 +- .../modules/protect/src/services/access.ts | 4 +- src/backend/modules/search/package.json | 4 +- src/backend/modules/search/src/env.ts | 4 +- src/backend/modules/subspace/package.json | 12 +- src/backend/modules/subspace/src/env.ts | 4 +- .../subspace/src/lib/subspaceService.ts | 2 +- .../modules/subspace/src/proxy/index.ts | 2 +- .../modules/subspace/src/services/identity.ts | 4 +- .../subspace/src/services/identityActor.ts | 4 +- .../src/services/identityDelegation.ts | 2 +- .../src/services/identityDelegationRequest.ts | 2 +- .../src/services/providerAuthExport.ts | 2 +- .../src/services/providerAuthImport.ts | 2 +- .../subspace/src/services/providerConfig.ts | 2 +- .../src/services/providerInvocation.ts | 2 +- .../src/services/providerSetupSession.ts | 2 +- .../modules/subspace/src/services/session.ts | 4 +- .../subspace/src/services/sessionProvider.ts | 2 +- .../subspace/src/services/sessionTemplate.ts | 2 +- .../modules/subspace/src/services/skill.ts | 2 +- src/backend/modules/usage/package.json | 14 +- src/backend/modules/usage/src/db.ts | 4 +- src/backend/modules/usage/src/env.ts | 4 +- .../modules/usage/src/services/usage.ts | 2 +- src/backend/modules/usage/test/db.test.ts | 4 +- src/backend/modules/usage/test/index.test.ts | 4 +- src/backend/modules/user/package.json | 8 +- src/backend/modules/user/src/services/user.ts | 6 +- .../modules/user/src/services/userAuth.ts | 4 +- .../modules/user/src/services/userSession.ts | 2 +- src/backend/modules/user/test/index.test.ts | 4 +- src/backend/modules/user/test/user.test.ts | 2 +- .../modules/user/test/userAuth.test.ts | 2 +- src/backend/multi-region/package.json | 18 +- src/backend/multi-region/src/env.ts | 4 +- .../multi-region/src/repositories/oauth.ts | 2 +- .../multi-region/src/repositories/oauthJwk.ts | 2 +- .../src/sync/fromDeployment/index.ts | 2 +- .../src/sync/toDeployment/index.ts | 2 +- src/frontend/apps/dashboard/package.json | 12 +- .../src/components/table/components/index.tsx | 2 +- .../dashboard/src/components/table/type.ts | 2 +- .../slices/product/scenes/apiKeys/index.tsx | 2 +- .../src/slices/product/scenes/form/form.ts | 2 +- .../connectionTypes.ts | 2 +- src/frontend/config/package.json | 6 +- src/frontend/config/src/index.ts | 2 +- src/frontend/config/src/paths.ts | 2 +- src/frontend/state/package.json | 8 +- .../loaders/providerSetupSessions.ts | 2 +- src/frontend/state/src/lib/mutation.ts | 2 +- .../state/src/skills/loaders/skillExports.ts | 2 +- src/frontend/state/src/user/auth/withAuth.ts | 8 +- src/packages/backend/cache/package.json | 2 +- src/packages/backend/cache/src/index.ts | 2 +- .../backend/consumer-auth/package.json | 6 +- .../backend/consumer-auth/src/index.ts | 4 +- src/packages/backend/cron/package.json | 4 +- src/packages/backend/cron/src/index.ts | 2 +- src/packages/backend/event/package.json | 4 +- src/packages/backend/event/src/eventObject.ts | 4 +- src/packages/backend/fabric/package.json | 2 +- src/packages/backend/lock/package.json | 4 +- src/packages/backend/lock/src/index.ts | 2 +- src/packages/backend/queue/package.json | 2 +- src/packages/backend/queue/src/index.ts | 4 +- src/packages/backend/redis/package.json | 10 +- src/packages/backend/redis/src/redis.ts | 4 +- .../backend/redis/src/redisStreams.ts | 6 +- src/packages/backend/rpc/package.json | 16 +- .../backend/rpc/src/client/request.ts | 8 +- .../rpc/src/client/shared/clientBuilder.ts | 2 +- .../rpc/src/client/shared/requester.ts | 2 +- .../backend/rpc/src/server/controller.test.ts | 2 +- .../backend/rpc/src/server/controller.ts | 4 +- src/packages/backend/rpc/src/server/rpcMux.ts | 12 +- src/packages/backend/rpc/src/server/server.ts | 4 +- src/packages/frontend/data-hooks/package.json | 4 +- .../data-hooks/src/lib/renderWithLoader.ts | 2 +- .../frontend/data-hooks/src/loader/index.ts | 8 +- .../frontend/data-hooks/src/useForm.tsx | 2 +- .../frontend/data-hooks/src/useMutation.ts | 4 +- .../frontend/data-hooks/src/useStack.ts | 2 +- .../frontend/microfrontend/src/slice.ts | 2 +- src/packages/frontend/ui/package.json | 4 +- .../frontend/ui/src/badge/constants.ts | 2 +- .../frontend/ui/src/button/constants.ts | 2 +- .../frontend/ui/src/callout/constants.ts | 2 +- src/packages/frontend/ui/src/theme/colors.ts | 2 +- src/packages/mcp/unified-id/src/index.ts | 2 +- src/packages/server/api-keys/package.json | 2 +- .../server/bearer/src/parseBearerToken.ts | 2 +- .../server/presenter/src/presenter.ts | 2 +- src/packages/server/rest/src/controller.ts | 4 +- src/packages/server/rest/src/parseBody.ts | 2 +- src/packages/server/rest/src/ratelimit.ts | 2 +- src/packages/server/rest/src/server.ts | 6 +- src/packages/shared/id/package.json | 8 +- src/packages/shared/id/src/id.ts | 6 +- src/packages/shared/tsconfig/base.json | 2 +- src/systems/_clients/ares/package.json | 2 +- src/systems/_clients/ares/src/index.ts | 2 +- src/systems/_clients/cargo/package.json | 4 +- src/systems/_clients/cargo/src/index.ts | 2 +- .../forge/dts-bundle-generator.config.json | 3 - src/systems/_clients/forge/package.json | 6 +- src/systems/_clients/forge/src/index.ts | 2 +- .../_clients/function-bay/package.json | 2 +- .../_clients/function-bay/src/index.ts | 2 +- .../dts-bundle-generator.config.json | 3 - .../_clients/origin-client/package.json | 4 +- .../_clients/origin-client/src/index.ts | 2 +- .../_clients/origin-client/tsconfig.dts.json | 14 +- .../_clients/origin-client/tsconfig.json | 2 +- src/systems/_clients/relay/README.md | 2 +- src/systems/_clients/relay/package.json | 4 +- src/systems/_clients/relay/src/index.ts | 2 +- src/systems/_clients/shuttle/package.json | 6 +- .../_clients/shuttle/src/controller.ts | 2 +- src/systems/_clients/signal/package.json | 4 +- src/systems/_clients/signal/src/index.ts | 2 +- src/systems/_clients/slates/package.json | 6 +- src/systems/_clients/slates/src/index.ts | 2 +- src/systems/_clients/subspace/package.json | 4 +- src/systems/_clients/subspace/src/index.ts | 2 +- src/systems/_clients/synthesis/package.json | 2 +- src/systems/_clients/synthesis/src/index.ts | 2 +- src/systems/_clients/voyager/README.md | 2 +- src/systems/_clients/voyager/package.json | 2 +- src/systems/_clients/voyager/src/index.ts | 2 +- src/systems/ares/service/Dockerfile | 4 +- .../admin/src/pages/_error/serviceError.tsx | 2 +- .../frontend/admin/src/state/client.ts | 2 +- .../service/frontend/admin/src/state/index.ts | 2 +- .../auth/src/pages/_error/serviceError.tsx | 2 +- .../frontend/auth/src/scenes/authHome.tsx | 2 +- .../service/frontend/auth/src/state/client.ts | 2 +- src/systems/ares/service/package.json | 56 +- .../src/apis/admin/controllers/accessGroup.ts | 4 +- .../src/apis/admin/controllers/admin.ts | 4 +- .../service/src/apis/admin/controllers/app.ts | 4 +- .../src/apis/admin/controllers/auditLog.ts | 4 +- .../src/apis/admin/controllers/auth.ts | 4 +- .../src/apis/admin/controllers/index.ts | 2 +- .../apis/admin/controllers/oauthProvider.ts | 4 +- .../service/src/apis/admin/controllers/sso.ts | 4 +- .../src/apis/admin/controllers/tenant.ts | 4 +- .../src/apis/admin/controllers/user.ts | 4 +- .../service/src/apis/admin/endpoints/index.ts | 2 +- .../src/apis/admin/endpoints/public.ts | 2 +- .../ares/service/src/apis/admin/index.ts | 4 +- .../src/apis/admin/middleware/admin.ts | 4 +- .../ares/service/src/apis/auth/_app.ts | 2 +- .../service/src/apis/auth/controllers/auth.ts | 4 +- .../src/apis/auth/controllers/authAttempt.ts | 4 +- .../src/apis/auth/controllers/authIntent.ts | 4 +- .../src/apis/auth/controllers/device.ts | 2 +- .../src/apis/auth/controllers/index.ts | 2 +- .../src/apis/auth/controllers/oauth.ts | 2 +- .../service/src/apis/auth/endpoints/hooks.ts | 8 +- .../service/src/apis/auth/endpoints/index.ts | 2 +- .../service/src/apis/auth/endpoints/public.ts | 6 +- .../ares/service/src/apis/auth/index.ts | 4 +- .../service/src/apis/auth/lib/resolveApp.ts | 2 +- .../service/src/apis/auth/middleware/auth.ts | 4 +- .../src/apis/auth/middleware/authAttempt.ts | 2 +- .../src/apis/auth/middleware/authIntent.ts | 2 +- .../src/apis/auth/middleware/device.ts | 2 +- .../src/apis/auth/middleware/session.ts | 2 +- .../src/apis/auth/presenters/session.ts | 4 +- .../ares/service/src/apis/internal/_app.ts | 2 +- .../src/apis/internal/controllers/app.ts | 4 +- .../src/apis/internal/controllers/index.ts | 2 +- .../src/apis/internal/controllers/oauth.ts | 4 +- .../src/apis/internal/controllers/session.ts | 4 +- .../src/apis/internal/controllers/sso.ts | 4 +- .../src/apis/internal/controllers/tenant.ts | 4 +- .../src/apis/internal/controllers/user.ts | 4 +- .../ares/service/src/apis/internal/index.ts | 4 +- .../service/src/apis/sso/endpoints/auth.ts | 6 +- .../service/src/apis/sso/endpoints/index.ts | 2 +- .../service/src/apis/sso/endpoints/jxn.ts | 2 +- .../service/src/apis/sso/endpoints/setup.ts | 4 +- src/systems/ares/service/src/cron/cleanup.ts | 2 +- src/systems/ares/service/src/db.ts | 2 +- src/systems/ares/service/src/email/client.ts | 4 +- .../service/src/email/successfulLogin.tsx | 2 +- src/systems/ares/service/src/endpoints.ts | 2 +- src/systems/ares/service/src/env.ts | 4 +- src/systems/ares/service/src/events/user.ts | 2 +- src/systems/ares/service/src/id.ts | 4 +- src/systems/ares/service/src/instrument.ts | 2 +- .../ares/service/src/lib/deletedEmail.ts | 2 +- .../ares/service/src/lib/redirectDomains.ts | 2 +- src/systems/ares/service/src/lib/tickets.ts | 6 +- src/systems/ares/service/src/lib/turnstile.ts | 2 +- .../service/src/lib/validateRedirectUrl.ts | 2 +- .../ares/service/src/services/accessGroup.ts | 4 +- .../ares/service/src/services/admin.ts | 8 +- .../ares/service/src/services/auditLog.ts | 2 +- src/systems/ares/service/src/services/auth.ts | 6 +- .../ares/service/src/services/authBlock.ts | 4 +- .../ares/service/src/services/device.ts | 4 +- .../service/src/services/oauthProvider.ts | 4 +- .../ares/service/src/services/session.ts | 6 +- src/systems/ares/service/src/services/sso.ts | 6 +- src/systems/ares/service/src/services/user.ts | 4 +- src/systems/ares/service/src/test/setup.ts | 2 +- src/systems/ares/service/src/worker.ts | 2 +- src/systems/ares/service/vitest.config.ts | 2 +- src/systems/ares/service/vitest.e2e.config.ts | 2 +- src/systems/cargo/db/package.json | 14 +- src/systems/cargo/db/src/db.ts | 2 +- src/systems/cargo/db/src/env.ts | 4 +- src/systems/cargo/db/src/id.ts | 4 +- src/systems/cargo/modules/doc/package.json | 18 +- .../doc/src/internal/documentContent.ts | 2 +- .../doc/src/internal/documentContentStore.ts | 2 +- .../modules/doc/src/internal/documentDraft.ts | 8 +- .../doc/src/internal/documentParticipant.ts | 2 +- .../modules/doc/src/internal/documentSync.ts | 4 +- .../doc/src/internal/documentVersioning.ts | 2 +- .../cargo/modules/doc/src/live/index.ts | 6 +- .../modules/doc/src/queues/documentCleanup.ts | 4 +- .../src/queues/documentDraftVersionFlush.ts | 4 +- .../modules/doc/src/queues/documentFlush.ts | 6 +- .../doc/src/queues/documentVersionSync.ts | 2 +- .../cargo/modules/doc/src/queues/index.ts | 2 +- .../cargo/modules/doc/src/queues/lifecycle.ts | 2 +- .../modules/doc/src/services/document.ts | 6 +- .../doc/src/services/documentParticipant.ts | 6 +- .../doc/src/services/documentVersion.ts | 6 +- src/systems/cargo/modules/file/package.json | 34 +- src/systems/cargo/modules/file/src/http.ts | 12 +- .../modules/file/src/lib/signedDownloadUrl.ts | 2 +- .../modules/file/src/queues/fileCleanup.ts | 4 +- .../modules/file/src/queues/fileExpiration.ts | 4 +- .../cargo/modules/file/src/queues/index.ts | 2 +- .../cargo/modules/file/src/services/actor.ts | 4 +- .../modules/file/src/services/environment.ts | 4 +- .../cargo/modules/file/src/services/file.ts | 8 +- .../modules/file/src/services/fileDownload.ts | 4 +- .../modules/file/src/services/fileLink.ts | 8 +- .../modules/file/src/services/filePurpose.ts | 6 +- .../file/src/services/fileReference.ts | 6 +- .../modules/file/src/services/reconcile.ts | 2 +- .../cargo/modules/file/src/services/tenant.ts | 4 +- src/systems/cargo/modules/file/src/storage.ts | 2 +- src/systems/cargo/modules/search/package.json | 10 +- src/systems/cargo/modules/search/src/env.ts | 4 +- src/systems/cargo/modules/search/src/index.ts | 4 +- src/systems/cargo/modules/skill/package.json | 10 +- .../cargo/modules/skill/src/internal/image.ts | 4 +- .../cargo/modules/skill/src/lib/limits.ts | 2 +- .../modules/skill/src/queues/dirty/collect.ts | 4 +- .../modules/skill/src/queues/dirty/flush.ts | 4 +- .../cargo/modules/skill/src/queues/export.ts | 2 +- .../cargo/modules/skill/src/queues/index.ts | 2 +- .../skill/src/queues/lifecycle/index.ts | 2 +- .../queues/lifecycle/managedSkillPlugin.ts | 2 +- .../skill/src/queues/lifecycle/skill.ts | 2 +- .../queues/lifecycle/skillConfiguration.ts | 2 +- .../src/queues/lifecycle/skillMarketplace.ts | 2 +- .../lifecycle/skillMarketplacePlugin.ts | 2 +- .../skill/src/queues/lifecycle/skillPlugin.ts | 2 +- .../src/queues/lifecycle/skillPluginSkill.ts | 2 +- .../modules/skill/src/queues/search/index.ts | 2 +- .../src/queues/search/skillMarketplace.ts | 2 +- .../skill/src/queues/search/skillPlugin.ts | 2 +- .../modules/skill/src/queues/sync/cleanup.ts | 2 +- .../modules/skill/src/queues/sync/collect.ts | 2 +- .../modules/skill/src/queues/sync/finish.ts | 2 +- .../modules/skill/src/queues/sync/process.ts | 2 +- .../skill/src/queues/sync/propagate.ts | 2 +- .../modules/skill/src/queues/sync/start.ts | 2 +- .../src/serializers/marketplace/index.ts | 2 +- .../skill/src/serializers/plugin/index.ts | 4 +- .../skill/src/serializers/skill/index.ts | 4 +- .../skill/src/services/managedSkillPlugin.ts | 10 +- .../cargo/modules/skill/src/services/skill.ts | 8 +- .../modules/skill/src/services/skillAgent.ts | 8 +- .../skill/src/services/skillConfiguration.ts | 6 +- .../modules/skill/src/services/skillExport.ts | 4 +- .../skill/src/services/skillMarketplace.ts | 12 +- .../src/services/skillMarketplacePlugin.ts | 8 +- .../services/skillMarketplaceRepository.ts | 6 +- .../skill/src/services/skillParticipant.ts | 6 +- .../modules/skill/src/services/skillPlugin.ts | 12 +- .../src/services/skillPluginRepository.ts | 6 +- .../skill/src/services/skillPluginSkill.ts | 8 +- .../skill/src/services/skillRepository.ts | 4 +- .../modules/skill/src/services/skillSync.ts | 6 +- .../skill/src/services/skillTemplate.ts | 6 +- .../skill/src/services/skillVersion.ts | 6 +- src/systems/cargo/modules/store/package.json | 16 +- .../store/src/internal/storeTemplateSync.ts | 8 +- .../cargo/modules/store/src/lib/storePath.ts | 2 +- .../cargo/modules/store/src/queues/index.ts | 2 +- .../modules/store/src/queues/lifecycle.ts | 2 +- .../modules/store/src/queues/storeCleanup.ts | 2 +- .../store/src/queues/storeTemplateSync.ts | 2 +- .../modules/store/src/queues/storeVersion.ts | 4 +- .../cargo/modules/store/src/services/store.ts | 8 +- .../modules/store/src/services/storeAccess.ts | 4 +- .../modules/store/src/services/storeItem.ts | 6 +- .../store/src/services/storeItemMutation.ts | 4 +- .../store/src/services/storeParticipant.ts | 6 +- .../store/src/services/storeTemplate.ts | 6 +- .../store/src/services/storeVersion.ts | 6 +- src/systems/cargo/service/Dockerfile | 4 +- src/systems/cargo/service/package.json | 52 +- .../cargo/service/src/controllers/_app.ts | 2 +- .../service/src/controllers/_dateFilter.ts | 2 +- .../cargo/service/src/controllers/actor.ts | 2 +- .../cargo/service/src/controllers/document.ts | 4 +- .../src/controllers/documentParticipant.ts | 4 +- .../src/controllers/documentVersion.ts | 4 +- .../service/src/controllers/environment.ts | 2 +- .../cargo/service/src/controllers/file.ts | 4 +- .../cargo/service/src/controllers/fileLink.ts | 4 +- .../service/src/controllers/filePurpose.ts | 4 +- .../service/src/controllers/fileReference.ts | 4 +- .../cargo/service/src/controllers/index.ts | 2 +- .../service/src/controllers/reconcile.ts | 4 +- .../cargo/service/src/controllers/skill.ts | 4 +- .../service/src/controllers/skillAgent.ts | 4 +- .../src/controllers/skillConfiguration.ts | 4 +- .../service/src/controllers/skillExport.ts | 4 +- .../src/controllers/skillMarketplace.ts | 4 +- .../src/controllers/skillMarketplacePlugin.ts | 4 +- .../controllers/skillMarketplaceRepository.ts | 4 +- .../src/controllers/skillParticipant.ts | 4 +- .../service/src/controllers/skillPlugin.ts | 4 +- .../src/controllers/skillPluginRepository.ts | 4 +- .../src/controllers/skillPluginSkill.ts | 4 +- .../service/src/controllers/skillSync.ts | 4 +- .../service/src/controllers/skillTemplate.ts | 6 +- .../service/src/controllers/skillVersion.ts | 4 +- .../cargo/service/src/controllers/store.ts | 6 +- .../service/src/controllers/storeItem.ts | 4 +- .../src/controllers/storeParticipant.ts | 4 +- .../service/src/controllers/storeTemplate.ts | 6 +- .../cargo/service/src/controllers/tenant.ts | 2 +- .../src/controllers/tests/http.e2e.test.ts | 2 +- src/systems/cargo/service/src/endpoints.ts | 4 +- src/systems/cargo/service/src/instrument.ts | 2 +- src/systems/cargo/service/src/test/client.ts | 6 +- .../cargo/service/src/test/fixtures/index.ts | 2 +- .../service/src/test/helpers/voyagerStub.ts | 4 +- src/systems/cargo/service/src/test/setup.ts | 2 +- src/systems/cargo/service/src/worker.ts | 2 +- src/systems/cargo/service/vitest.config.ts | 2 +- .../cargo/service/vitest.e2e.config.ts | 2 +- src/systems/forge/service/Dockerfile | 4 +- src/systems/forge/service/package.json | 44 +- .../forge/service/src/controllers/_app.ts | 2 +- .../forge/service/src/controllers/index.ts | 4 +- .../forge/service/src/controllers/tenant.ts | 2 +- .../forge/service/src/controllers/workflow.ts | 4 +- .../src/controllers/workflowArtifact.ts | 4 +- .../service/src/controllers/workflowRun.ts | 4 +- .../src/controllers/workflowVersion.ts | 4 +- src/systems/forge/service/src/encryption.ts | 2 +- src/systems/forge/service/src/env.ts | 4 +- src/systems/forge/service/src/id.ts | 4 +- src/systems/forge/service/src/instrument.ts | 2 +- .../service/src/providers/_lib/adapter.ts | 2 +- .../src/providers/_lib/buildContext.ts | 2 +- .../service/src/providers/_lib/queues.ts | 4 +- .../src/providers/aws-codebuild/access.ts | 2 +- .../src/providers/aws-codebuild/index.ts | 2 +- .../src/providers/aws-codebuild/project.ts | 2 +- .../src/providers/aws-codebuild/role.ts | 2 +- .../forge/service/src/providers/index.ts | 2 +- .../service/src/providers/local/index.ts | 2 +- .../service/src/queues/deleteWorkflow.ts | 4 +- .../src/queues/deleteWorkflowArtifact.ts | 2 +- .../service/src/queues/deleteWorkflowRun.ts | 2 +- .../forge/service/src/services/provider.ts | 4 +- .../forge/service/src/services/tenant.ts | 4 +- .../forge/service/src/services/workflow.ts | 6 +- .../service/src/services/workflowArtifact.ts | 8 +- .../forge/service/src/services/workflowRun.ts | 6 +- .../service/src/services/workflowVersion.ts | 8 +- src/systems/forge/service/src/storage.ts | 2 +- src/systems/forge/service/src/test/client.ts | 4 +- .../src/test/fixtures/providerFixtures.ts | 2 +- .../src/test/fixtures/tenantFixtures.ts | 2 +- .../test/fixtures/workflowArtifactFixtures.ts | 2 +- .../src/test/fixtures/workflowFixtures.ts | 2 +- .../src/test/fixtures/workflowRunFixtures.ts | 2 +- .../test/fixtures/workflowRunStepFixtures.ts | 2 +- .../test/fixtures/workflowVersionFixtures.ts | 4 +- .../fixtures/workflowVersionStepFixtures.ts | 2 +- src/systems/forge/service/src/test/setup.ts | 2 +- src/systems/forge/service/src/worker.ts | 2 +- src/systems/forge/service/vitest.config.ts | 2 +- .../forge/service/vitest.e2e.config.ts | 2 +- .../packages/function-bay/package.json | 4 +- .../function-bay/packages/nodejs/package.json | 4 +- .../function-bay/packages/nodejs/src/index.ts | 2 +- .../function-bay/packages/types/package.json | 2 +- .../function-bay/packages/types/src/index.ts | 2 +- .../function-bay/packages/utils/package.json | 6 +- src/systems/function-bay/service/Dockerfile | 4 +- src/systems/function-bay/service/package.json | 44 +- .../service/src/controllers/_app.ts | 2 +- .../service/src/controllers/function.ts | 4 +- .../src/controllers/functionDeployment.ts | 4 +- .../src/controllers/functionInvocation.ts | 4 +- .../src/controllers/functionVersion.ts | 4 +- .../service/src/controllers/index.ts | 4 +- .../service/src/controllers/runtime.ts | 4 +- .../service/src/controllers/tenant.ts | 2 +- .../function-bay/service/src/encryption.ts | 2 +- src/systems/function-bay/service/src/env.ts | 4 +- src/systems/function-bay/service/src/forge.ts | 6 +- src/systems/function-bay/service/src/id.ts | 4 +- .../function-bay/service/src/instrument.ts | 2 +- .../src/providers/aws-lambda/access.ts | 2 +- .../src/providers/aws-lambda/deploy.ts | 2 +- .../src/providers/aws-lambda/invoke.ts | 2 +- .../service/src/providers/aws-lambda/role.ts | 2 +- .../src/providers/aws-lambda/runtime.ts | 4 +- .../service/src/providers/index.ts | 2 +- .../service/src/providers/local/runtime.ts | 4 +- .../function-bay/service/src/queues/build.ts | 6 +- .../service/src/queues/cleanup.ts | 2 +- .../service/src/services/function.ts | 6 +- .../src/services/functionDeployment.ts | 8 +- .../src/services/functionInvocation.ts | 10 +- .../service/src/services/functionVersion.ts | 6 +- .../service/src/services/provider.ts | 2 +- .../service/src/services/runtime.ts | 6 +- .../service/src/services/tenant.ts | 4 +- .../function-bay/service/src/storage.ts | 2 +- .../function-bay/service/src/test/client.ts | 2 +- .../test/fixtures/functionBundleFixtures.ts | 2 +- .../fixtures/functionDeploymentFixtures.ts | 4 +- .../functionDeploymentStepFixtures.ts | 2 +- .../src/test/fixtures/functionFixtures.ts | 2 +- .../fixtures/functionInvocationFixtures.ts | 2 +- .../test/fixtures/functionVersionFixtures.ts | 4 +- .../src/test/fixtures/providerFixtures.ts | 2 +- .../src/test/fixtures/runtimeFixtures.ts | 2 +- .../fixtures/runtimeForgeWorkflowFixtures.ts | 2 +- .../src/test/fixtures/tenantFixtures.ts | 2 +- .../function-bay/service/src/test/setup.ts | 2 +- .../function-bay/service/src/worker.ts | 2 +- .../function-bay/service/vitest.config.ts | 2 +- .../function-bay/service/vitest.e2e.config.ts | 2 +- src/systems/origin/apps/service/Dockerfile | 4 +- src/systems/origin/apps/service/package.json | 50 +- .../apps/service/src/controllers/_app.ts | 2 +- .../apps/service/src/controllers/actor.ts | 2 +- .../src/controllers/changeNotification.ts | 4 +- .../service/src/controllers/codeBucket.ts | 4 +- .../apps/service/src/controllers/index.ts | 4 +- .../service/src/controllers/scmBackend.ts | 4 +- .../src/controllers/scmBackendSetupSession.ts | 2 +- .../src/controllers/scmInstallation.ts | 4 +- .../src/controllers/scmInstallationSession.ts | 2 +- .../service/src/controllers/scmRepoPush.ts | 4 +- .../service/src/controllers/scmRepository.ts | 2 +- .../src/controllers/scmRepositorySync.ts | 2 +- .../apps/service/src/controllers/tenant.ts | 2 +- .../origin/apps/service/src/endpoints.ts | 2 +- src/systems/origin/apps/service/src/env.ts | 4 +- src/systems/origin/apps/service/src/id.ts | 4 +- .../origin/apps/service/src/instrument.ts | 4 +- .../origin/apps/service/src/lib/gitlab.ts | 2 +- .../src/lib/scmRepositorySyncProvider.ts | 2 +- .../origin/apps/service/src/public/scm.ts | 4 +- .../service/src/public/scmBackendSetup.ts | 4 +- .../src/public/scmInstallationSession.ts | 2 +- .../origin/apps/service/src/queues/cleanup.ts | 2 +- .../src/queues/codeBucket/cloneBucket.ts | 2 +- .../src/queues/codeBucket/copyFromToBucket.ts | 2 +- .../src/queues/codeBucket/exportGithub.ts | 2 +- .../src/queues/codeBucket/exportGitlab.ts | 2 +- .../src/queues/codeBucket/importGithub.ts | 4 +- .../src/queues/codeBucket/importGitlab.ts | 4 +- .../src/queues/codeBucket/importTemplate.ts | 2 +- .../service/src/queues/codeBucket/index.ts | 2 +- .../src/queues/scm/createRepoWebhook.ts | 4 +- .../service/src/queues/scm/handleRepoPush.ts | 2 +- .../apps/service/src/queues/scm/index.ts | 2 +- .../queues/scm/repositorySync/createBranch.ts | 2 +- .../src/queues/scm/repositorySync/createPr.ts | 2 +- .../src/queues/scm/repositorySync/index.ts | 2 +- .../src/queues/scm/repositorySync/merge.ts | 2 +- .../src/queues/scm/repositorySync/start.ts | 2 +- .../queues/scm/repositorySync/syncContents.ts | 2 +- .../queues/scm/repositorySync/waitForCi.ts | 2 +- .../origin/apps/service/src/services/actor.ts | 4 +- .../src/services/changeNotification.ts | 6 +- .../apps/service/src/services/codeBucket.ts | 6 +- .../service/src/services/codeBucketPurpose.ts | 4 +- .../apps/service/src/services/scmAuth.ts | 4 +- .../apps/service/src/services/scmBackend.ts | 6 +- .../service/src/services/scmInstallation.ts | 6 +- .../src/services/scmInstallationSession.ts | 4 +- .../apps/service/src/services/scmRepo.ts | 4 +- .../apps/service/src/services/scmRepoPush.ts | 6 +- .../service/src/services/scmRepositorySync.ts | 4 +- .../apps/service/src/services/tenant.ts | 4 +- .../origin/apps/service/src/storage.ts | 2 +- .../origin/apps/service/src/test/client.ts | 6 +- .../origin/apps/service/src/test/setup.ts | 2 +- src/systems/origin/apps/service/src/worker.ts | 2 +- .../origin/apps/service/vitest.e2e.config.ts | 2 +- src/systems/relay/service/Dockerfile | 4 +- src/systems/relay/service/package.json | 46 +- .../relay/service/src/controllers/_app.ts | 2 +- .../relay/service/src/controllers/email.ts | 2 +- .../service/src/controllers/emailIdentity.ts | 2 +- .../relay/service/src/controllers/index.ts | 4 +- .../relay/service/src/controllers/sender.ts | 2 +- src/systems/relay/service/src/cron/cleanup.ts | 2 +- src/systems/relay/service/src/env.ts | 4 +- src/systems/relay/service/src/id.ts | 4 +- src/systems/relay/service/src/instrument.ts | 2 +- .../relay/service/src/queue/sendEmail.ts | 2 +- .../service/src/queue/sendEmailSingle.ts | 4 +- .../relay/service/src/services/email.ts | 6 +- .../relay/service/src/services/sender.ts | 6 +- src/systems/relay/service/src/test/client.ts | 6 +- src/systems/relay/service/src/test/setup.ts | 2 +- src/systems/relay/service/src/worker.ts | 2 +- src/systems/relay/service/tsconfig.json | 1 + .../relay/service/vitest.e2e.config.ts | 2 +- .../sdk/packages/mcp-server/package.json | 6 +- src/systems/shuttle/service/Dockerfile | 4 +- src/systems/shuttle/service/package.json | 58 +- .../service/src/apis/connection/index.ts | 2 +- .../service/src/apis/controllers/_app.ts | 2 +- .../apis/controllers/changeNotification.ts | 4 +- .../src/apis/controllers/containerRegistry.ts | 4 +- .../apis/controllers/containerRepository.ts | 4 +- .../controllers/containerRepositoryTag.ts | 4 +- .../controllers/containerRepositoryVersion.ts | 4 +- .../controllers/functionServerInvocation.ts | 2 +- .../service/src/apis/controllers/index.ts | 2 +- .../src/apis/controllers/networkingRuleset.ts | 4 +- .../service/src/apis/controllers/server.ts | 4 +- .../src/apis/controllers/serverAuthConfig.ts | 4 +- .../apis/controllers/serverAuthConfigEvent.ts | 4 +- .../src/apis/controllers/serverConfig.ts | 4 +- .../src/apis/controllers/serverConnection.ts | 6 +- .../src/apis/controllers/serverDeployment.ts | 4 +- .../src/apis/controllers/serverDiscovery.ts | 2 +- .../controllers/serverOAuthCredentials.ts | 4 +- .../src/apis/controllers/serverOAuthSetup.ts | 4 +- .../apis/controllers/serverOAuthSetupEvent.ts | 4 +- .../src/apis/controllers/serverVersion.ts | 4 +- .../service/src/apis/controllers/tenant.ts | 2 +- .../shuttle/service/src/apis/public/index.ts | 4 +- src/systems/shuttle/service/src/encryption.ts | 2 +- src/systems/shuttle/service/src/endpoints.ts | 6 +- src/systems/shuttle/service/src/env.ts | 4 +- .../shuttle/service/src/functionBay.ts | 4 +- src/systems/shuttle/service/src/id.ts | 4 +- src/systems/shuttle/service/src/instrument.ts | 4 +- .../service/src/lib/deployment/index.ts | 2 +- .../shuttle/service/src/lib/docker/access.ts | 2 +- .../service/src/lib/docker/assertAccess.ts | 2 +- .../shuttle/service/src/lib/function/call.ts | 2 +- .../shuttle/service/src/lib/hono/validator.ts | 2 +- .../service/src/lib/identifier/version.ts | 2 +- .../src/lib/jsonSchema/validateData.ts | 4 +- .../service/src/lib/oauth/oauthUtils.ts | 8 +- .../shuttle/service/src/lib/oauth/types.ts | 2 +- .../shuttle/service/src/mcp/backend/index.ts | 2 +- .../service/src/mcp/connection/async.ts | 2 +- .../service/src/mcp/connection/client.ts | 4 +- .../service/src/mcp/function/authManager.ts | 2 +- .../service/src/mcp/function/connection.ts | 4 +- .../shuttle/service/src/mcp/holopod/client.ts | 2 +- .../service/src/mcp/holopod/connection.ts | 6 +- .../service/src/mcp/remote/authManager.ts | 2 +- .../shuttle/service/src/mcp/remote/sse.ts | 4 +- .../service/src/mcp/utils/connection.ts | 2 +- .../src/queues/changeNotification/create.ts | 2 +- .../service/src/queues/connection/expire.ts | 2 +- .../service/src/queues/connection/offload.ts | 6 +- .../service/src/queues/container/monitor.ts | 2 +- .../src/queues/container/startDeployment.ts | 4 +- .../src/queues/cron/discoveryCleanup.ts | 2 +- .../service/src/queues/deployment/failed.ts | 2 +- .../src/queues/deployment/succeeded.ts | 2 +- .../src/queues/discovery/remoteOAuthConfig.ts | 2 +- .../queues/discovery/remoteOAuthConnection.ts | 2 +- .../service/src/queues/discovery/server.ts | 10 +- .../service/src/queues/function/discover.ts | 2 +- .../service/src/queues/function/monitor.ts | 2 +- .../service/src/queues/function/publish.ts | 6 +- .../src/queues/function/startDeployment.ts | 2 +- .../service/src/queues/lifecycle/server.ts | 2 +- .../src/queues/lifecycle/serverVersion.ts | 2 +- .../service/src/queues/lifecycle/tag.ts | 2 +- .../src/queues/oauth/delegatedErrorCheck.ts | 2 +- .../src/queues/oauth/remoteErrorCheck.ts | 2 +- .../src/queues/remote/startDeployment.ts | 6 +- .../service/src/queues/retention/cleanup.ts | 4 +- .../service/src/queues/retention/index.ts | 2 +- .../src/queues/tag/serverVersion.e2e.test.ts | 2 +- .../service/src/queues/tag/serverVersion.ts | 2 +- .../shuttle/service/src/queues/tag/sync.ts | 4 +- .../src/services/changeNotification.ts | 6 +- .../service/src/services/containerRegistry.ts | 8 +- .../src/services/containerRepository.ts | 6 +- .../src/services/containerRepositoryTag.ts | 6 +- .../services/containerRepositoryVersion.ts | 6 +- .../src/services/functionServerInvocation.ts | 4 +- .../service/src/services/networkRuleset.ts | 8 +- .../src/services/oauth/delegated/authToken.ts | 6 +- .../services/oauth/delegated/authorization.ts | 6 +- .../services/oauth/delegated/connection.ts | 6 +- .../src/services/oauth/remote/authToken.ts | 6 +- .../services/oauth/remote/authorization.ts | 8 +- .../src/services/oauth/remote/connection.ts | 8 +- .../src/services/oauth/remote/discovery.ts | 4 +- .../src/services/oauth/serverAuthConfig.ts | 6 +- .../services/oauth/serverAuthConfigEvent.ts | 6 +- .../src/services/oauth/serverAuthToken.ts | 4 +- .../service/src/services/oauth/serverEvent.ts | 2 +- .../services/oauth/serverOAuthCredentials.ts | 8 +- .../src/services/oauth/serverOAuthSetup.ts | 6 +- .../services/oauth/serverOAuthSetupEvent.ts | 6 +- .../shuttle/service/src/services/secret.ts | 6 +- .../shuttle/service/src/services/server.ts | 6 +- .../service/src/services/serverConfig.ts | 8 +- .../service/src/services/serverConnection.ts | 6 +- .../service/src/services/serverDeployment.ts | 6 +- .../src/services/serverDeploymentCreate.ts | 4 +- .../service/src/services/serverDiscovery.ts | 6 +- .../service/src/services/serverVersion.ts | 6 +- .../shuttle/service/src/services/tenant.ts | 4 +- src/systems/shuttle/service/src/storage.ts | 2 +- .../shuttle/service/src/test/client.ts | 6 +- .../fixtures/changeNotificationFixtures.ts | 2 +- .../fixtures/connectionLogsBucketFixtures.ts | 2 +- .../fixtures/containerRegistryFixtures.ts | 2 +- .../fixtures/containerRepositoryFixtures.ts | 2 +- .../containerRepositoryTagFixtures.ts | 2 +- .../containerRepositoryVersionFixtures.ts | 2 +- .../fixtures/networkingRulesetFixtures.ts | 2 +- .../src/test/fixtures/secretFixtures.ts | 2 +- .../test/fixtures/serverAuthConfigFixtures.ts | 2 +- .../src/test/fixtures/serverConfigFixtures.ts | 2 +- .../test/fixtures/serverConnectionFixtures.ts | 2 +- .../test/fixtures/serverDeploymentFixtures.ts | 2 +- .../test/fixtures/serverDiscoveryFixtures.ts | 2 +- .../src/test/fixtures/serverFixtures.ts | 2 +- .../test/fixtures/serverVersionFixtures.ts | 2 +- .../src/test/fixtures/tenantFixtures.ts | 2 +- src/systems/shuttle/service/src/test/setup.ts | 2 +- .../shuttle/service/src/transaction.ts | 2 +- src/systems/shuttle/service/src/worker.ts | 2 +- src/systems/shuttle/service/vitest.config.ts | 2 +- .../shuttle/service/vitest.e2e.config.ts | 2 +- src/systems/signal/service/Dockerfile | 4 +- src/systems/signal/service/package.json | 46 +- .../signal/service/src/controllers/_app.ts | 2 +- .../signal/service/src/controllers/event.ts | 4 +- .../src/controllers/eventDeliveryAttempt.ts | 4 +- .../src/controllers/eventDeliveryIntent.ts | 4 +- .../src/controllers/eventDestination.ts | 4 +- .../signal/service/src/controllers/index.ts | 4 +- .../signal/service/src/controllers/sender.ts | 2 +- .../signal/service/src/controllers/tenant.ts | 2 +- src/systems/signal/service/src/endpoints.ts | 2 +- src/systems/signal/service/src/env.ts | 4 +- src/systems/signal/service/src/id.ts | 4 +- src/systems/signal/service/src/instrument.ts | 4 +- .../signal/service/src/queues/cleanup.ts | 4 +- .../signal/service/src/queues/send/cleanup.ts | 2 +- .../service/src/queues/send/delivery.ts | 2 +- .../signal/service/src/queues/send/index.ts | 2 +- .../signal/service/src/queues/send/init.ts | 2 +- .../signal/service/src/queues/send/intent.ts | 2 +- .../service/src/queues/send/lifecycle.ts | 2 +- .../signal/service/src/services/event.ts | 6 +- .../src/services/eventDeliveryAttempt.ts | 6 +- .../src/services/eventDeliveryIntent.ts | 6 +- .../service/src/services/eventDestination.ts | 8 +- .../signal/service/src/services/sender.ts | 6 +- .../signal/service/src/services/tenant.ts | 4 +- src/systems/signal/service/src/storage.ts | 2 +- src/systems/signal/service/src/test/client.ts | 6 +- .../fixtures/eventDeliveryAttemptFixtures.ts | 2 +- .../fixtures/eventDeliveryIntentFixtures.ts | 2 +- .../test/fixtures/eventDestinationFixtures.ts | 2 +- .../src/test/fixtures/eventFixtures.ts | 2 +- .../src/test/fixtures/senderFixtures.ts | 2 +- .../src/test/fixtures/tenantFixtures.ts | 2 +- src/systems/signal/service/src/test/setup.ts | 2 +- src/systems/signal/service/src/worker.ts | 2 +- src/systems/signal/service/vitest.config.ts | 2 +- .../signal/service/vitest.e2e.config.ts | 2 +- src/systems/slates/apps/hub/Dockerfile | 4 +- .../slates/apps/hub/admin/src/hooks/client.ts | 4 +- src/systems/slates/apps/hub/package.json | 60 +- .../hub/src/apis/admin/controllers/_app.ts | 4 +- .../hub/src/apis/admin/controllers/auth.ts | 2 +- .../hub/src/apis/admin/controllers/index.ts | 2 +- .../hub/src/apis/admin/controllers/slate.ts | 4 +- .../apis/admin/controllers/slateDeployment.ts | 4 +- .../apis/admin/controllers/slateDiscovery.ts | 4 +- .../src/apis/admin/controllers/slateEvent.ts | 4 +- .../apis/admin/controllers/slateVersion.ts | 4 +- .../slates/apps/hub/src/apis/admin/index.ts | 2 +- .../slates/apps/hub/src/apis/internal/_app.ts | 2 +- .../src/apis/internal/changeNotification.ts | 4 +- .../apps/hub/src/apis/internal/index.ts | 4 +- .../apps/hub/src/apis/internal/registry.ts | 4 +- .../apps/hub/src/apis/internal/secret.ts | 4 +- .../apps/hub/src/apis/internal/slate.ts | 4 +- .../hub/src/apis/internal/slateAuthConfig.ts | 4 +- .../src/apis/internal/slateAuthConfigEvent.ts | 4 +- .../hub/src/apis/internal/slateDeployment.ts | 4 +- .../hub/src/apis/internal/slateDiscovery.ts | 4 +- .../apps/hub/src/apis/internal/slateError.ts | 4 +- .../apps/hub/src/apis/internal/slateEvent.ts | 4 +- .../hub/src/apis/internal/slateInstance.ts | 4 +- .../hub/src/apis/internal/slateInvocation.ts | 2 +- .../apis/internal/slateOAuthCredentials.ts | 4 +- .../hub/src/apis/internal/slateOAuthSetup.ts | 4 +- .../src/apis/internal/slateOAuthSetupEvent.ts | 4 +- .../hub/src/apis/internal/slateSession.ts | 4 +- .../src/apis/internal/slateSessionToolCall.ts | 4 +- .../src/apis/internal/slateSpecification.ts | 4 +- .../apis/internal/slateSpecificationChange.ts | 4 +- .../src/apis/internal/slateTriggerDelivery.ts | 4 +- .../apis/internal/slateTriggerDestination.ts | 4 +- .../src/apis/internal/slateTriggerEvent.ts | 4 +- .../apis/internal/slateTriggerEventInput.ts | 4 +- .../apis/internal/slateTriggerInvocation.ts | 4 +- .../src/apis/internal/slateTriggerReceiver.ts | 4 +- .../hub/src/apis/internal/slateVersion.ts | 4 +- .../apis/internal/slateVersionDiscovery.ts | 4 +- .../apps/hub/src/apis/internal/tenant.ts | 2 +- .../slates/apps/hub/src/apis/public/index.ts | 4 +- src/systems/slates/apps/hub/src/aresClient.ts | 4 +- src/systems/slates/apps/hub/src/encryption.ts | 2 +- src/systems/slates/apps/hub/src/endpoints.ts | 2 +- src/systems/slates/apps/hub/src/env.ts | 4 +- .../slates/apps/hub/src/functionBay.ts | 4 +- src/systems/slates/apps/hub/src/hub.ts | 4 +- src/systems/slates/apps/hub/src/id.ts | 4 +- src/systems/slates/apps/hub/src/instrument.ts | 4 +- src/systems/slates/apps/hub/src/keys.ts | 2 +- .../apps/hub/src/lib/invocation/stack.ts | 10 +- .../apps/hub/src/lib/invocation/store.ts | 4 +- .../apps/hub/src/lib/specificationHash.ts | 4 +- .../apps/hub/src/lib/validateHttpUrl.ts | 2 +- .../apps/hub/src/lib/validateJsonSchema.ts | 4 +- .../slates/apps/hub/src/lib/validator.ts | 2 +- .../src/presenters/slateAuthConfigEvent.ts | 2 +- .../hub/src/presenters/slateInvocation.ts | 2 +- .../hub/src/presenters/slateOAuthSetupLogs.ts | 2 +- .../apps/hub/src/presenters/slateVersion.ts | 2 +- .../apps/hub/src/queues/attachment/cleanup.ts | 4 +- .../apps/hub/src/queues/attachment/index.ts | 2 +- .../apps/hub/src/queues/cron/cleanup.ts | 2 +- .../apps/hub/src/queues/deployment/deploy.ts | 8 +- .../apps/hub/src/queues/deployment/index.ts | 2 +- .../queues/deployment/packageFiles.test.ts | 2 +- .../hub/src/queues/deployment/packageFiles.ts | 4 +- .../apps/hub/src/queues/discovery/discover.ts | 6 +- .../apps/hub/src/queues/discovery/index.ts | 2 +- .../hub/src/queues/discovery/rediscover.ts | 4 +- .../slates/apps/hub/src/queues/error/index.ts | 2 +- .../apps/hub/src/queues/error/record.ts | 2 +- .../hub/src/queues/instance/configChanged.ts | 2 +- .../hub/src/queues/instance/credentials.ts | 2 +- .../apps/hub/src/queues/instance/index.ts | 2 +- .../hub/src/queues/instance/processAuth.ts | 2 +- .../src/queues/instance/reconcileEventIds.ts | 2 +- .../hub/src/queues/instance/updateProfile.ts | 4 +- .../apps/hub/src/queues/registry/cron.ts | 4 +- .../apps/hub/src/queues/registry/index.ts | 2 +- .../hub/src/queues/registry/syncRegistry.ts | 4 +- .../apps/hub/src/queues/registry/syncSlate.ts | 6 +- .../apps/hub/src/queues/retention/cleanup.ts | 4 +- .../apps/hub/src/queues/retention/index.ts | 2 +- .../apps/hub/src/queues/trigger/archive.ts | 4 +- .../hub/src/queues/trigger/eventQueues.ts | 2 +- .../apps/hub/src/queues/trigger/index.ts | 2 +- .../apps/hub/src/queues/trigger/poll.ts | 8 +- .../apps/hub/src/queues/trigger/process.ts | 4 +- .../apps/hub/src/queues/trigger/register.ts | 4 +- .../apps/hub/src/queues/trigger/send.ts | 4 +- .../apps/hub/src/queues/trigger/webhook.ts | 6 +- src/systems/slates/apps/hub/src/registry.ts | 6 +- .../slates/apps/hub/src/services/adminAuth.ts | 4 +- .../hub/src/services/changeNotification.ts | 6 +- .../slates/apps/hub/src/services/registry.ts | 6 +- .../slates/apps/hub/src/services/secret.ts | 6 +- .../slates/apps/hub/src/services/slate.ts | 6 +- .../apps/hub/src/services/slateAuthConfig.ts | 6 +- .../hub/src/services/slateAuthConfigEvent.ts | 4 +- .../apps/hub/src/services/slateDeployment.ts | 6 +- .../apps/hub/src/services/slateDiscovery.ts | 6 +- .../apps/hub/src/services/slateError.ts | 6 +- .../apps/hub/src/services/slateEvent.ts | 6 +- .../apps/hub/src/services/slateInstance.ts | 6 +- .../src/services/slateInstanceAuthHandler.ts | 8 +- .../hub/src/services/slateInstanceConfig.ts | 6 +- .../hub/src/services/slateInstanceEvent.ts | 6 +- .../apps/hub/src/services/slateInvocation.ts | 4 +- .../hub/src/services/slateOAuthCredentials.ts | 6 +- .../hub/src/services/slateOAuthHandler.ts | 4 +- .../apps/hub/src/services/slateOAuthSetup.ts | 6 +- .../hub/src/services/slateOAuthSetupEvent.ts | 6 +- .../apps/hub/src/services/slateSession.ts | 6 +- .../hub/src/services/slateSessionToolCall.ts | 6 +- .../hub/src/services/slateSpecification.ts | 6 +- .../src/services/slateSpecificationChange.ts | 6 +- .../hub/src/services/slateTriggerDelivery.ts | 2 +- .../src/services/slateTriggerDestination.ts | 6 +- .../hub/src/services/slateTriggerEvent.ts | 6 +- .../src/services/slateTriggerEventInput.ts | 4 +- .../src/services/slateTriggerInvocation.ts | 6 +- .../hub/src/services/slateTriggerReceiver.ts | 8 +- .../src/services/slateTriggerReceiverCore.ts | 2 +- .../services/slateTriggerReceiverRuntime.ts | 4 +- .../services/slateTriggerReceiverShared.ts | 2 +- .../services/slateTriggerWebhookRequest.ts | 4 +- .../apps/hub/src/services/slateVersion.ts | 6 +- .../hub/src/services/slateVersionDiscovery.ts | 6 +- .../slates/apps/hub/src/services/tenant.ts | 4 +- src/systems/slates/apps/hub/src/signal.ts | 4 +- src/systems/slates/apps/hub/src/storage.ts | 2 +- .../slates/apps/hub/src/test/client.ts | 4 +- .../fixtures/changeNotificationFixtures.ts | 2 +- .../src/test/fixtures/deploymentFixtures.ts | 2 +- .../hub/src/test/fixtures/instanceFixtures.ts | 2 +- .../src/test/fixtures/invocationFixtures.ts | 2 +- .../hub/src/test/fixtures/registryFixtures.ts | 2 +- .../hub/src/test/fixtures/secretFixtures.ts | 2 +- .../test/fixtures/slateAuthConfigFixtures.ts | 2 +- .../test/fixtures/slateAuthMethodFixtures.ts | 2 +- .../src/test/fixtures/slateEventFixtures.ts | 2 +- .../hub/src/test/fixtures/slateFixtures.ts | 2 +- .../fixtures/slateOAuthCredentialsFixtures.ts | 2 +- .../test/fixtures/slateOAuthSetupFixtures.ts | 2 +- .../src/test/fixtures/slateSessionFixtures.ts | 2 +- .../fixtures/slateSessionToolCallFixtures.ts | 2 +- .../slateSpecificationChangeFixtures.ts | 2 +- .../fixtures/slateSpecificationFixtures.ts | 2 +- .../fixtures/slateTriggerDeliveryFixtures.ts | 2 +- .../slateTriggerDestinationFixtures.ts | 2 +- .../fixtures/slateTriggerEventFixtures.ts | 2 +- .../slateTriggerInvocationFixtures.ts | 2 +- .../fixtures/slateTriggerReceiverFixtures.ts | 2 +- .../fixtures/slateVersionDiscoveryFixtures.ts | 2 +- .../src/test/fixtures/slateVersionFixtures.ts | 2 +- .../hub/src/test/fixtures/tenantFixtures.ts | 2 +- src/systems/slates/apps/hub/src/test/setup.ts | 2 +- src/systems/slates/apps/hub/src/worker.ts | 2 +- src/systems/slates/apps/hub/vitest.config.ts | 2 +- .../slates/apps/hub/vitest.e2e.config.ts | 2 +- src/systems/slates/apps/registry/Dockerfile | 4 +- .../apps/registry/admin/src/hooks/client.ts | 4 +- src/systems/slates/apps/registry/package.json | 52 +- .../src/apis/admin/controllers/_app.ts | 4 +- .../src/apis/admin/controllers/auth.ts | 2 +- .../src/apis/admin/controllers/index.ts | 2 +- .../src/apis/admin/controllers/slate.ts | 4 +- .../src/apis/admin/controllers/subRegistry.ts | 4 +- .../src/apis/admin/controllers/tenant.ts | 4 +- .../src/apis/admin/controllers/user.ts | 4 +- .../src/apis/admin/controllers/workspace.ts | 4 +- .../apps/registry/src/apis/admin/index.ts | 2 +- .../apps/registry/src/apis/internal/_app.ts | 2 +- .../apps/registry/src/apis/internal/index.ts | 4 +- .../src/apis/internal/readerTokens.ts | 2 +- .../registry/src/apis/internal/subRegistry.ts | 4 +- .../apps/registry/src/apis/internal/tenant.ts | 2 +- .../apps/registry/src/apis/internal/user.ts | 4 +- .../registry/src/apis/internal/workspace.ts | 4 +- .../apps/registry/src/apis/public/_app.ts | 2 +- .../src/apis/public/changeNotification.ts | 4 +- .../apps/registry/src/apis/public/index.ts | 2 +- .../apps/registry/src/apis/public/info.ts | 2 +- .../apps/registry/src/apis/public/scope.ts | 4 +- .../apps/registry/src/apis/public/slate.ts | 4 +- .../apps/registry/src/apis/public/user.ts | 4 +- .../registry/src/apis/public/workspace.ts | 4 +- src/systems/slates/apps/registry/src/env.ts | 4 +- src/systems/slates/apps/registry/src/id.ts | 4 +- .../slates/apps/registry/src/instrument.ts | 2 +- src/systems/slates/apps/registry/src/keys.ts | 2 +- .../registry/src/lib/slatePackage/manifest.ts | 4 +- .../src/lib/slateVersion/promotion.ts | 2 +- .../slates/apps/registry/src/lib/validator.ts | 2 +- .../apps/registry/src/presenters/scope.ts | 2 +- .../apps/registry/src/queues/cleanup.ts | 2 +- .../apps/registry/src/queues/expiresTokens.ts | 2 +- .../apps/registry/src/queues/syncNpm.ts | 6 +- .../apps/registry/src/services/adminAuth.ts | 4 +- .../src/services/changeNotification.ts | 6 +- .../apps/registry/src/services/readerToken.ts | 4 +- .../apps/registry/src/services/scope.ts | 6 +- .../apps/registry/src/services/slate.ts | 6 +- .../registry/src/services/slateVersion.ts | 8 +- .../apps/registry/src/services/subRegistry.ts | 6 +- .../apps/registry/src/services/tenant.ts | 6 +- .../slates/apps/registry/src/services/user.ts | 6 +- .../apps/registry/src/services/userToken.ts | 6 +- .../apps/registry/src/services/workspace.ts | 6 +- .../slates/apps/registry/src/storage.ts | 2 +- .../slates/apps/registry/src/test/client.ts | 4 +- .../slates/apps/registry/src/test/setup.ts | 2 +- .../slates/apps/registry/src/worker.ts | 2 +- .../slates/apps/registry/vitest.e2e.config.ts | 2 +- .../dts-bundle-generator.config.json | 3 - .../clients/registry-internal/package.json | 4 +- .../clients/registry-internal/src/index.ts | 4 +- .../registry-internal/tsconfig.dts.json | 15 +- .../registry/dts-bundle-generator.config.json | 3 - .../slates/clients/registry/package.json | 4 +- .../slates/clients/registry/tsconfig.dts.json | 15 +- .../subspace/apps/controller/Dockerfile | 4 +- .../subspace/apps/controller/package.json | 34 +- .../controller/src/connection/api/index.ts | 2 +- .../apps/controller/src/connection/api/mcp.ts | 4 +- .../api/metorialIntegrationProtocol.ts | 4 +- .../src/connection/lib/validator.ts | 2 +- .../apps/controller/src/connection/server.ts | 2 +- .../src/connection/tests/mcp.e2e.test.ts | 2 +- .../apps/controller/src/controllers/_app.ts | 4 +- .../controller/src/controllers/_dateFilter.ts | 2 +- .../apps/controller/src/controllers/actor.ts | 2 +- .../src/controllers/adminProviderTelemetry.ts | 4 +- .../apps/controller/src/controllers/agent.ts | 4 +- .../controller/src/controllers/agentClient.ts | 4 +- .../src/controllers/agentInstance.ts | 4 +- .../src/controllers/authConfigError.ts | 4 +- .../src/controllers/authConfigErrorGlobal.ts | 4 +- .../src/controllers/authConfigEvent.ts | 4 +- .../apps/controller/src/controllers/brand.ts | 2 +- .../apps/controller/src/controllers/bucket.ts | 4 +- .../controller/src/controllers/callback.ts | 4 +- .../src/controllers/callbackDelivery.ts | 4 +- .../controllers/callbackDeliveryAttempt.ts | 4 +- .../src/controllers/callbackDestination.ts | 4 +- .../src/controllers/callbackEvent.ts | 4 +- .../src/controllers/callbackInstance.ts | 4 +- .../src/controllers/containerRegistry.ts | 4 +- .../src/controllers/containerRepository.ts | 4 +- .../src/controllers/customProvider.ts | 4 +- .../src/controllers/customProviderCommit.ts | 4 +- .../controllers/customProviderDeployment.ts | 4 +- .../controllers/customProviderEnvironment.ts | 4 +- .../src/controllers/customProviderVersion.ts | 4 +- .../controller/src/controllers/environment.ts | 2 +- .../controllers/ephemeralManagedSession.ts | 2 +- .../controller/src/controllers/identity.ts | 4 +- .../src/controllers/identityActor.ts | 4 +- .../src/controllers/identityCredential.ts | 4 +- .../src/controllers/identityDelegation.ts | 4 +- .../controllers/identityDelegationConfig.ts | 4 +- .../controllers/identityDelegationRequest.ts | 4 +- .../apps/controller/src/controllers/index.ts | 4 +- .../controller/src/controllers/integration.ts | 4 +- .../src/controllers/integrationInstance.ts | 4 +- .../controllers/integrationInstanceGroup.ts | 4 +- .../integrationInstanceGroupProvider.ts | 4 +- .../integrationInstanceProvider.ts | 4 +- .../src/controllers/integrationProvider.ts | 4 +- .../controllers/integrationSetupSession.ts | 4 +- .../src/controllers/integrationVersion.ts | 4 +- .../src/controllers/magicMcpBacking.ts | 6 +- .../src/controllers/magicMcpServerProvider.ts | 4 +- .../managedProviderAuthCredentials.ts | 4 +- .../src/controllers/networkingRuleset.ts | 4 +- .../controller/src/controllers/provider.ts | 4 +- .../src/controllers/providerAuthConfig.ts | 4 +- .../controllers/providerAuthCredentials.ts | 4 +- .../src/controllers/providerAuthExport.ts | 4 +- .../src/controllers/providerAuthImport.ts | 4 +- .../src/controllers/providerAuthMethod.ts | 4 +- .../src/controllers/providerCategory.ts | 4 +- .../src/controllers/providerCollection.ts | 4 +- .../src/controllers/providerConfig.ts | 4 +- .../src/controllers/providerConfigVault.ts | 4 +- .../src/controllers/providerDeployment.ts | 4 +- .../src/controllers/providerGroup.ts | 4 +- .../src/controllers/providerInvocation.ts | 2 +- .../src/controllers/providerListing.ts | 4 +- .../src/controllers/providerOAuthSetup.ts | 4 +- .../resolveAuthConfig.ts | 4 +- .../resolveConfig.ts | 4 +- .../resolveDeployment.ts | 2 +- .../resolveSessionProvider.ts | 2 +- .../controller/src/controllers/providerRun.ts | 4 +- .../src/controllers/providerRunUsageRecord.ts | 4 +- .../src/controllers/providerSetupSession.ts | 4 +- .../src/controllers/providerSpecification.ts | 4 +- .../src/controllers/providerTool.ts | 4 +- .../src/controllers/providerTrigger.ts | 4 +- .../src/controllers/providerVariant.ts | 4 +- .../src/controllers/providerVersion.ts | 4 +- .../controller/src/controllers/publisher.ts | 4 +- .../src/controllers/scmConnection.ts | 4 +- .../controllers/scmConnectionSetupSession.ts | 2 +- .../controller/src/controllers/scmProvider.ts | 4 +- .../controllers/scmProviderSetupSession.ts | 2 +- .../controller/src/controllers/scmPush.ts | 4 +- .../src/controllers/scmRepository.ts | 4 +- .../controller/src/controllers/session.ts | 4 +- .../src/controllers/sessionConnection.ts | 4 +- .../src/controllers/sessionError.ts | 4 +- .../src/controllers/sessionErrorGlobal.ts | 4 +- .../src/controllers/sessionEvent.ts | 4 +- .../src/controllers/sessionMessage.ts | 4 +- .../src/controllers/sessionParticipant.ts | 4 +- .../src/controllers/sessionProvider.ts | 4 +- .../src/controllers/sessionTemplate.ts | 4 +- .../controllers/sessionTemplateProvider.ts | 4 +- .../src/controllers/sessionUsageRecord.ts | 4 +- .../apps/controller/src/controllers/skill.ts | 4 +- .../controller/src/controllers/skillGroup.ts | 4 +- .../src/controllers/skillGroupItem.ts | 4 +- .../controller/src/controllers/skillItem.ts | 4 +- .../src/controllers/skillTemplate.ts | 4 +- .../src/controllers/skillTemplateItem.ts | 4 +- .../controller/src/controllers/solution.ts | 2 +- .../apps/controller/src/controllers/tenant.ts | 2 +- .../controller/src/controllers/toolCall.ts | 4 +- .../subspace/apps/controller/src/endpoints.ts | 2 +- .../subspace/apps/controller/src/env.ts | 2 +- .../apps/controller/src/instrument.ts | 4 +- .../apps/controller/src/test/client.ts | 6 +- .../src/test/fixtures/environmentFixtures.ts | 2 +- .../fixtures/remoteMcpProviderFixtures.ts | 4 +- .../src/test/fixtures/solutionFixtures.ts | 2 +- .../src/test/fixtures/tenantFixtures.ts | 2 +- .../src/test/helpers/voyagerStub.ts | 4 +- .../apps/controller/src/test/setup.ts | 2 +- .../subspace/apps/controller/tsconfig.json | 27 +- .../subspace/apps/controller/vitest.config.ts | 2 +- src/systems/subspace/apps/dev/package.json | 32 +- src/systems/subspace/apps/public/Dockerfile | 4 +- .../src/pages/_error/serviceError.tsx | 2 +- .../apps/public/frontend/src/state/client.ts | 2 +- .../public/frontend/src/state/setupSession.ts | 2 +- src/systems/subspace/apps/public/package.json | 22 +- .../apps/public/src/api/internal/_app.ts | 2 +- .../apps/public/src/api/internal/index.ts | 2 +- .../api/internal/integrationSetupSession.ts | 2 +- .../api/internal/presenters/setupSession.ts | 2 +- .../public/src/api/internal/setupSession.ts | 2 +- .../src/api/public/integrationSetupSession.ts | 4 +- .../public/src/api/public/oauthCallback.ts | 2 +- .../apps/public/src/api/public/oauthSetup.ts | 2 +- .../apps/public/src/api/public/pingApp.ts | 2 +- .../public/src/api/public/setupSession.ts | 4 +- .../public/src/api/public/toolCallArtifact.ts | 4 +- .../subspace/apps/public/src/endpoints.ts | 8 +- src/systems/subspace/apps/public/src/env.ts | 4 +- .../subspace/apps/public/src/instrument.ts | 4 +- .../subspace/apps/public/src/test/setup.ts | 2 +- .../subspace/apps/public/tsconfig.build.json | 1 + .../subspace/apps/public/vitest.e2e.config.ts | 2 +- src/systems/subspace/apps/worker/Dockerfile | 4 +- src/systems/subspace/apps/worker/package.json | 10 +- src/systems/subspace/apps/worker/src/env.ts | 2 +- .../subspace/apps/worker/src/health.ts | 2 +- .../subspace/apps/worker/src/instrument.ts | 4 +- .../subspace/apps/worker/src/test/setup.ts | 2 +- .../subspace/apps/worker/src/worker.ts | 2 +- .../subspace/apps/worker/tsconfig.build.json | 1 + .../subspace/apps/worker/vitest.e2e.config.ts | 2 +- src/systems/subspace/db/package.json | 16 +- src/systems/subspace/db/src/db.ts | 4 +- src/systems/subspace/db/src/env.ts | 4 +- src/systems/subspace/db/src/id.ts | 4 +- src/systems/subspace/db/src/transaction.ts | 2 +- .../subspace/modules/agent/package.json | 22 +- src/systems/subspace/modules/agent/src/env.ts | 4 +- .../subspace/modules/agent/src/queues.ts | 2 +- .../agent/src/queues/lifecycle/index.ts | 2 +- .../agent/src/queues/search/agentClient.ts | 2 +- .../modules/agent/src/queues/search/index.ts | 2 +- .../modules/agent/src/services/agent.ts | 12 +- .../modules/agent/src/services/agentClient.ts | 6 +- .../agent/src/services/agentInstance.ts | 8 +- .../subspace/modules/auth/package.json | 18 +- src/systems/subspace/modules/auth/src/env.ts | 4 +- .../src/lib/checkManagedCredentialsBlocked.ts | 2 +- .../managedProviderAuthCredentialsBacking.ts | 4 +- .../subspace/modules/auth/src/queues.ts | 2 +- .../auth/src/queues/cron/expireOAuthSetup.ts | 2 +- .../modules/auth/src/queues/cron/index.ts | 2 +- .../auth/src/queues/cron/reconcileScopes.ts | 4 +- .../modules/auth/src/queues/delete/index.ts | 2 +- .../src/queues/delete/providerAuthConfig.ts | 4 +- .../queues/delete/providerAuthCredentials.ts | 4 +- .../auth/src/queues/lifecycle/index.ts | 2 +- .../queues/lifecycle/providerAuthConfig.ts | 2 +- .../lifecycle/providerAuthCredentials.ts | 2 +- .../queues/lifecycle/providerOAuthSetup.ts | 2 +- .../queues/lifecycle/providerSetupSession.ts | 2 +- .../auth/src/queues/reconcile/index.ts | 2 +- .../reconcile/managedCredentialProvider.ts | 2 +- .../queues/reconcile/tenantManagedBackings.ts | 2 +- .../modules/auth/src/queues/search/index.ts | 2 +- .../src/queues/search/providerAuthConfig.ts | 2 +- .../queues/search/providerAuthCredentials.ts | 2 +- .../auth/src/services/authConfigError.ts | 6 +- .../src/services/authConfigErrorGlobal.ts | 6 +- .../auth/src/services/authConfigEvent.ts | 6 +- .../managedProviderAuthCredentials.ts | 6 +- .../auth/src/services/providerAuthConfig.ts | 6 +- .../services/providerAuthConfigInternal.ts | 4 +- .../src/services/providerAuthCredentials.ts | 8 +- .../auth/src/services/providerAuthExport.ts | 6 +- .../auth/src/services/providerAuthImport.ts | 6 +- .../auth/src/services/providerOAuthSetup.ts | 6 +- .../services/providerOAuthSetupInternal.ts | 6 +- .../auth/src/services/providerSetupSession.ts | 6 +- .../services/providerSetupSessionInternal.ts | 4 +- .../src/services/providerSetupSessionUi.ts | 6 +- .../subspace/modules/callback/package.json | 16 +- .../subspace/modules/callback/src/env.ts | 4 +- .../subspace/modules/callback/src/queues.ts | 2 +- .../callback/src/queues/delete/callback.ts | 4 +- .../callback/src/queues/delete/index.ts | 2 +- .../modules/callback/src/reconciler/index.ts | 2 +- .../callback/src/reconciler/lib/state.ts | 2 +- .../src/reconciler/queues/definitions.ts | 2 +- .../modules/callback/src/services/callback.ts | 6 +- .../callback/src/services/callbackDelivery.ts | 4 +- .../src/services/callbackDestination.ts | 6 +- .../callback/src/services/callbackEvent.ts | 4 +- .../callback/src/services/callbackInstance.ts | 6 +- .../src/services/callbackRegistration.ts | 2 +- .../subspace/modules/catalog/package.json | 20 +- .../modules/catalog/src/cron/cleanup.ts | 2 +- .../subspace/modules/catalog/src/env.ts | 4 +- .../subspace/modules/catalog/src/queues.ts | 2 +- .../modules/catalog/src/services/provider.ts | 6 +- .../src/services/providerAuthMethod.ts | 6 +- .../catalog/src/services/providerCategory.ts | 8 +- .../src/services/providerCollection.ts | 8 +- .../catalog/src/services/providerGroup.ts | 10 +- .../catalog/src/services/providerListing.ts | 6 +- .../src/services/providerSpecification.ts | 6 +- .../catalog/src/services/providerTool.ts | 6 +- .../catalog/src/services/providerTrigger.ts | 6 +- .../catalog/src/services/providerVariant.ts | 6 +- .../catalog/src/services/providerVersion.ts | 6 +- .../modules/catalog/src/services/publisher.ts | 6 +- .../subspace/modules/connection/package.json | 28 +- .../connection/src/controller/receiver.ts | 6 +- .../modules/connection/src/cron/cleanup.ts | 2 +- .../subspace/modules/connection/src/env.ts | 4 +- .../modules/connection/src/mcp/connection.ts | 4 +- .../modules/connection/src/mcp/control.ts | 2 +- .../modules/connection/src/mcp/sender.ts | 8 +- .../modules/connection/src/queueProcessor.ts | 2 +- .../expireSessionConnections.ts | 4 +- .../connectionCleanup/expireSessions.ts | 2 +- .../src/queues/error/createError.ts | 6 +- .../src/queues/error/createWarning.ts | 2 +- .../modules/connection/src/queues/index.ts | 2 +- .../src/queues/message/finalizeMessage.ts | 2 +- .../src/queues/message/messageCreated.ts | 2 +- .../src/queues/message/messageTimeout.ts | 2 +- .../src/queues/message/offloadMessage.ts | 4 +- .../src/queues/provderRun/providerRunStart.ts | 2 +- .../src/queues/provderRun/stopProviderRuns.ts | 2 +- .../connection/src/sender/connection.ts | 4 +- .../modules/connection/src/sender/manager.ts | 8 +- .../connection/src/shared/completeMessage.ts | 2 +- .../src/shared/upsertParticipant.ts | 4 +- .../modules/custom-provider/package.json | 18 +- .../modules/custom-provider/src/env.ts | 4 +- .../src/internal/createVersion.ts | 4 +- .../modules/custom-provider/src/origin.ts | 2 +- .../modules/custom-provider/src/queues.ts | 2 +- .../src/queues/commit/apply.ts | 4 +- .../src/queues/commit/index.ts | 2 +- .../src/queues/deployment/failed.ts | 2 +- .../src/queues/deployment/index.ts | 2 +- .../src/queues/deployment/monitor.ts | 2 +- .../propagateToOtherEnvironments.ts | 2 +- .../src/queues/deployment/succeeded.ts | 2 +- .../src/queues/lifecycle/customProvider.ts | 2 +- .../lifecycle/customProviderDeployment.ts | 2 +- .../src/queues/lifecycle/index.ts | 2 +- .../custom-provider/src/queues/scm/cron.ts | 2 +- .../src/queues/scm/handlePush.ts | 2 +- .../custom-provider/src/queues/scm/index.ts | 2 +- .../custom-provider/src/queues/scm/sync.ts | 2 +- .../src/queues/search/customProvider.ts | 2 +- .../src/queues/search/index.ts | 2 +- .../src/queues/upcoming/handle.ts | 2 +- .../src/queues/upcoming/index.ts | 2 +- .../custom-provider/src/services/bucket.ts | 6 +- .../src/services/customProvider.ts | 6 +- .../src/services/customProviderCommit.ts | 6 +- .../src/services/customProviderDeployment.ts | 8 +- .../src/services/customProviderEnvironment.ts | 6 +- .../src/services/customProviderVersion.ts | 6 +- .../src/services/scmConnection.ts | 4 +- .../src/services/scmConnectionSetupSession.ts | 2 +- .../src/services/scmProvider.ts | 4 +- .../src/services/scmProviderSetupSession.ts | 2 +- .../custom-provider/src/services/scmPush.ts | 6 +- .../src/services/scmRepository.ts | 6 +- .../subspace/modules/deployment/package.json | 16 +- .../subspace/modules/deployment/src/env.ts | 4 +- .../subspace/modules/deployment/src/queues.ts | 2 +- .../deployment/src/queues/delete/index.ts | 2 +- .../src/queues/delete/providerConfig.ts | 4 +- .../src/queues/delete/providerConfigVault.ts | 4 +- .../src/queues/delete/providerDeployment.ts | 4 +- .../deployment/src/queues/lifecycle/index.ts | 2 +- .../src/queues/lifecycle/providerConfig.ts | 2 +- .../queues/lifecycle/providerConfigVault.ts | 2 +- .../queues/lifecycle/providerDeployment.ts | 2 +- .../deployment/src/queues/search/index.ts | 2 +- .../src/queues/search/providerConfig.ts | 2 +- .../src/queues/search/providerConfigVault.ts | 2 +- .../src/queues/search/providerDeployment.ts | 2 +- .../deployment/src/services/providerConfig.ts | 8 +- .../src/services/providerConfigVault.ts | 6 +- .../src/services/providerDeployment.ts | 8 +- .../subspace/modules/identity/package.json | 24 +- .../subspace/modules/identity/src/env.ts | 4 +- .../identity/src/lib/delegationChecker.ts | 4 +- .../subspace/modules/identity/src/queues.ts | 2 +- .../identity/src/queues/archive/identity.ts | 2 +- .../identity/src/queues/archive/index.ts | 2 +- .../identity/src/queues/delete/actor.ts | 2 +- .../identity/src/queues/delete/agent.ts | 2 +- .../identity/src/queues/delete/identity.ts | 2 +- .../identity/src/queues/delete/index.ts | 2 +- .../identity/src/queues/expire/delegation.ts | 4 +- .../src/queues/expire/delegationCredential.ts | 4 +- .../identity/src/queues/expire/index.ts | 2 +- .../identity/src/queues/lifecycle/actor.ts | 2 +- .../identity/src/queues/lifecycle/agent.ts | 2 +- .../src/queues/lifecycle/delegation.ts | 2 +- .../identity/src/queues/lifecycle/identity.ts | 2 +- .../queues/lifecycle/identityCredential.ts | 2 +- .../lifecycle/identityDelegationConfig.ts | 2 +- .../identity/src/queues/lifecycle/index.ts | 2 +- .../integrationInstanceProviderCredential.ts | 4 +- .../identity/src/queues/reconciler/index.ts | 2 +- .../src/queues/reconciler/reconcile.ts | 4 +- .../identity/src/queues/search/actor.ts | 2 +- .../identity/src/queues/search/agent.ts | 2 +- .../identity/src/queues/search/identity.ts | 2 +- .../queues/search/identityDelegationConfig.ts | 2 +- .../identity/src/queues/search/index.ts | 2 +- .../modules/identity/src/services/actor.ts | 10 +- .../modules/identity/src/services/identity.ts | 6 +- .../src/services/identityCredential.ts | 6 +- .../src/services/identityDelegation.ts | 6 +- .../src/services/identityDelegationConfig.ts | 8 +- .../services/identityDelegationInternal.ts | 4 +- .../src/services/identityDelegationRequest.ts | 6 +- .../identity/src/services/identityInternal.ts | 6 +- .../subspace/modules/integration/package.json | 22 +- .../subspace/modules/integration/src/env.ts | 4 +- .../modules/integration/src/lib/material.ts | 2 +- .../modules/integration/src/queues.ts | 2 +- .../integration/src/queues/delete/index.ts | 2 +- .../src/queues/delete/integration.ts | 4 +- .../src/queues/delete/integrationInstance.ts | 4 +- .../lifecycle/archiveIntegrationInstance.ts | 2 +- .../integration/src/queues/lifecycle/index.ts | 2 +- .../src/queues/lifecycle/integration.ts | 2 +- .../queues/lifecycle/integrationInstance.ts | 2 +- .../lifecycle/integrationInstanceGroup.ts | 2 +- .../integrationInstanceGroupProvider.ts | 2 +- .../lifecycle/integrationInstanceProvider.ts | 2 +- .../queues/lifecycle/integrationProvider.ts | 2 +- .../lifecycle/magicMcpBackingReconcile.ts | 2 +- .../integration/src/queues/search/index.ts | 2 +- .../src/queues/search/integration.ts | 2 +- .../src/queues/search/integrationInstance.ts | 2 +- .../integration/src/services/integration.ts | 10 +- .../src/services/integrationInstance.ts | 6 +- .../src/services/integrationInstanceGroup.ts | 6 +- .../integrationInstanceGroupProvider.ts | 6 +- .../services/integrationInstanceProvider.ts | 6 +- .../src/services/integrationProvider.ts | 6 +- .../src/services/integrationSetupSession.ts | 6 +- .../src/services/integrationVersion.ts | 6 +- .../src/services/magicMcpBacking/endpoint.ts | 4 +- .../magicMcpBacking/providerTemplate.ts | 8 +- .../src/services/magicMcpBacking/server.ts | 4 +- .../magicMcpBacking/serverProvider.ts | 6 +- .../src/services/magicMcpBacking/shared.ts | 2 +- .../defaultSessionTemplateLifecycle.test.ts | 2 +- .../integrationInstanceProviderQueue.test.ts | 2 +- .../test/sharedSessionTemplate.test.ts | 4 +- .../modules/provider-internal/package.json | 24 +- .../provider-internal/src/cron/cleanup.ts | 2 +- .../modules/provider-internal/src/env.ts | 4 +- .../src/lib/checkProviderMatch.ts | 2 +- .../provider-internal/src/lib/createTag.ts | 2 +- .../modules/provider-internal/src/queues.ts | 2 +- .../src/queues/deploymentConfigPair/index.ts | 2 +- .../queues/deploymentConfigPair/setSpec.ts | 2 +- .../queues/deploymentConfigPair/syncSpec.ts | 2 +- .../queues/lifecycle/deploymentConfigPair.ts | 2 +- .../src/queues/lifecycle/index.ts | 2 +- .../src/queues/lifecycle/listing.ts | 2 +- .../src/queues/lifecycle/provider.ts | 2 +- .../src/queues/lifecycle/providerVersion.ts | 2 +- .../src/queues/lifecycle/publisher.ts | 2 +- .../src/queues/lifecycle/specification.ts | 2 +- .../src/queues/listing/index.ts | 2 +- .../src/queues/listing/rank.ts | 4 +- .../src/queues/listing/search.ts | 2 +- .../queues/reconciler/deprecateProvider.ts | 4 +- .../src/queues/reconciler/index.ts | 2 +- .../src/queues/search/index.ts | 2 +- .../src/queues/search/providerListing.ts | 2 +- .../src/queues/search/publisher.ts | 2 +- .../src/queues/version/cron.ts | 4 +- .../src/queues/version/index.ts | 2 +- .../src/queues/version/setSpec.ts | 2 +- .../src/queues/version/syncSpec.ts | 2 +- .../src/services/provider.ts | 4 +- .../src/services/providerCombination.ts | 4 +- .../src/services/providerDeployment.ts | 6 +- .../services/providerDeploymentConfigPair.ts | 4 +- .../src/services/providerSpecification.ts | 8 +- .../src/services/providerVersion.ts | 4 +- .../src/services/publisher.ts | 4 +- .../subspace/modules/search/package.json | 10 +- .../subspace/modules/search/src/env.ts | 4 +- .../subspace/modules/search/src/index.ts | 4 +- .../subspace/modules/session/package.json | 16 +- .../subspace/modules/session/src/env.ts | 4 +- .../session/src/lib/sessionTemplateSync.ts | 2 +- .../subspace/modules/session/src/queues.ts | 2 +- .../session/src/queues/delete/index.ts | 2 +- .../session/src/queues/delete/session.ts | 4 +- .../src/queues/delete/sessionTemplate.ts | 4 +- .../session/src/queues/lifecycle/index.ts | 2 +- .../linkedIntegrationInstanceGroupTemplate.ts | 2 +- .../queues/lifecycle/linkedSessionTemplate.ts | 2 +- .../session/src/queues/lifecycle/session.ts | 2 +- .../src/queues/lifecycle/sessionProvider.ts | 2 +- .../src/queues/lifecycle/sessionTemplate.ts | 2 +- .../lifecycle/sessionTemplateProvider.ts | 6 +- .../src/services/ephemeralManagedSession.ts | 6 +- .../src/services/providerInvocation.ts | 2 +- .../session/src/services/providerRun.ts | 6 +- .../session/src/services/providerRunLogs.ts | 4 +- .../src/services/providerRunUsageRecord.ts | 4 +- .../modules/session/src/services/session.ts | 6 +- .../session/src/services/sessionConnection.ts | 6 +- .../session/src/services/sessionError.ts | 6 +- .../session/src/services/sessionErrorGroup.ts | 6 +- .../session/src/services/sessionEvent.ts | 6 +- .../session/src/services/sessionMessage.ts | 6 +- .../src/services/sessionParticipant.ts | 6 +- .../session/src/services/sessionProvider.ts | 6 +- .../src/services/sessionProviderInput.ts | 6 +- .../services/sessionProviderNameTemplate.ts | 4 +- .../session/src/services/sessionTemplate.ts | 6 +- .../src/services/sessionTemplateProvider.ts | 6 +- .../src/services/sessionUsageRecord.ts | 4 +- .../modules/session/src/services/toolCall.ts | 8 +- .../subspace/modules/skills/package.json | 16 +- .../subspace/modules/skills/src/env.ts | 4 +- .../modules/skills/src/lib/clientMetadata.ts | 2 +- .../subspace/modules/skills/src/queues.ts | 2 +- .../skills/src/queues/lifecycle/index.ts | 2 +- .../skills/src/queues/lifecycle/skill.ts | 2 +- .../skills/src/queues/lifecycle/skillGroup.ts | 2 +- .../skills/src/queues/lifecycle/skillItem.ts | 2 +- .../src/queues/lifecycle/skillTemplate.ts | 2 +- .../skills/src/queues/reconciler/index.ts | 2 +- .../reconciler/reconcileSkillProviderLink.ts | 2 +- .../modules/skills/src/queues/search/index.ts | 2 +- .../modules/skills/src/queues/search/skill.ts | 2 +- .../skills/src/queues/search/skillGroup.ts | 2 +- .../skills/src/queues/search/skillTemplate.ts | 2 +- .../modules/skills/src/services/skill.ts | 10 +- .../modules/skills/src/services/skillGroup.ts | 6 +- .../skills/src/services/skillGroupItem.ts | 6 +- .../modules/skills/src/services/skillItem.ts | 6 +- .../skills/src/services/skillTemplate.ts | 10 +- .../skills/src/services/skillTemplateItem.ts | 6 +- .../subspace/modules/tenant/package.json | 18 +- .../subspace/modules/tenant/src/env.ts | 4 +- .../subspace/modules/tenant/src/queues.ts | 2 +- .../tenant/src/queues/retention/cleanup.ts | 4 +- .../tenant/src/queues/retention/index.ts | 2 +- .../tenant/src/queues/retention/sync.ts | 4 +- .../modules/tenant/src/services/actor.ts | 4 +- .../modules/tenant/src/services/brand.ts | 4 +- .../tenant/src/services/environment.ts | 4 +- .../modules/tenant/src/services/solution.ts | 6 +- .../modules/tenant/src/services/tenant.ts | 6 +- .../subspace/packages/conduit/package.json | 4 +- .../coordination/redisCoordination.ts | 2 +- .../src/adapters/transport/memoryTransport.ts | 2 +- .../src/adapters/transport/natsTransport.ts | 2 +- .../conduit/src/core/ownershipManager.ts | 2 +- .../packages/conduit/src/core/receiver.ts | 4 +- .../packages/conduit/src/core/sender.ts | 4 +- .../packages/connection-utils/package.json | 10 +- .../packages/connection-utils/src/env.ts | 4 +- .../src/serviceErrorToMcpError.ts | 2 +- .../packages/connection-utils/src/storage.ts | 2 +- .../subspace/packages/list-utils/package.json | 4 +- .../packages/list-utils/src/deleteCheck.ts | 2 +- .../packages/list-utils/src/linkGuards.ts | 2 +- .../subspace/packages/presenters/package.json | 10 +- .../presenters/src/authConfigError.ts | 2 +- .../subspace/packages/presenters/src/env.ts | 4 +- .../presenters/src/providerAuthMethod.ts | 2 +- .../packages/presenters/src/scmPush.ts | 2 +- .../packages/presenters/src/sessionError.ts | 2 +- .../packages/retry-utils/package.json | 2 +- .../packages/retry-utils/src/index.ts | 2 +- .../provider-manager/package.json | 4 +- .../provider-manager/src/index.ts | 2 +- .../provider-native/package.json | 10 +- .../provider-native/src/env.ts | 4 +- .../provider-native/src/impl/auth.ts | 2 +- .../provider-native/src/impl/deployment.ts | 2 +- .../provider-native/src/impl/run.ts | 2 +- .../provider-native/src/index.ts | 2 +- .../provider-native/src/sync.ts | 6 +- .../provider-shuttle/package.json | 30 +- .../provider-shuttle/src/client.ts | 2 +- .../provider-shuttle/src/env.ts | 4 +- .../provider-shuttle/src/impl/auth.ts | 4 +- .../provider-shuttle/src/impl/capabilities.ts | 4 +- .../provider-shuttle/src/impl/deployment.ts | 2 +- .../provider-shuttle/src/impl/run.ts | 2 +- .../provider-shuttle/src/index.ts | 2 +- .../src/lib/upsertShuttleVersion.ts | 4 +- .../src/queues/registry/index.ts | 2 +- .../src/queues/registry/setReadme.ts | 2 +- .../src/queues/registry/syncServers.ts | 8 +- .../src/queues/sync/authConfigEvents.ts | 8 +- .../src/queues/sync/changeNotifications.ts | 2 +- .../provider-shuttle/src/queues/sync/cron.ts | 2 +- .../provider-shuttle/src/queues/sync/index.ts | 2 +- .../src/queues/sync/oauthSetups.ts | 8 +- .../src/queues/sync/syncShuttleVersion.ts | 2 +- .../src/services/containerRegistry.ts | 4 +- .../src/services/containerRepository.ts | 4 +- .../src/services/containerTag.ts | 4 +- .../src/services/containerVersion.ts | 4 +- .../src/services/networkRuleset.ts | 4 +- .../provider-shuttle/src/shuttleRetry.test.ts | 2 +- .../provider-shuttle/src/shuttleRetry.ts | 2 +- .../provider-slates/package.json | 24 +- .../provider-slates/src/client.ts | 2 +- .../provider-slates/src/env.ts | 4 +- .../provider-slates/src/impl/auth.ts | 2 +- .../provider-slates/src/impl/capabilities.ts | 2 +- .../provider-slates/src/impl/deployment.ts | 2 +- .../provider-slates/src/index.ts | 2 +- .../src/queues/registry/index.ts | 2 +- .../src/queues/registry/syncCollections.ts | 4 +- .../src/queues/registry/syncRegistries.ts | 2 +- .../src/queues/sync/authConfigEvents.ts | 8 +- .../src/queues/sync/changeNotifications.ts | 2 +- .../provider-slates/src/queues/sync/cron.ts | 2 +- .../provider-slates/src/queues/sync/index.ts | 2 +- .../src/queues/sync/oauthSetups.ts | 10 +- .../src/queues/sync/syncSlateVersion.ts | 12 +- .../src/queues/sync/syncSlates.ts | 4 +- .../provider-utils/package.json | 4 +- .../src/lib/providerInvocationId.ts | 2 +- .../provider-utils/src/providerTypes.ts | 6 +- src/systems/synthesis/service/Dockerfile | 4 +- src/systems/synthesis/service/package.json | 36 +- .../synthesis/service/src/controllers/_app.ts | 2 +- .../service/src/controllers/assistant.ts | 4 +- .../service/src/controllers/conversation.ts | 6 +- .../service/src/controllers/index.ts | 4 +- .../service/src/controllers/message.ts | 4 +- .../service/src/controllers/request.ts | 4 +- .../service/src/controllers/tenant.ts | 6 +- src/systems/synthesis/service/src/db.ts | 2 +- .../synthesis/service/src/endpoints.ts | 4 +- src/systems/synthesis/service/src/env.ts | 4 +- src/systems/synthesis/service/src/http.ts | 4 +- src/systems/synthesis/service/src/id.ts | 4 +- .../synthesis/service/src/instrument.ts | 4 +- .../service/src/lib/history/getHistory.ts | 2 +- .../service/src/lib/run/redisDeltas.ts | 2 +- .../synthesis/service/src/lib/run/state.ts | 2 +- .../src/queues/generateConversationTitle.ts | 2 +- .../service/src/queues/processRequest.ts | 4 +- .../service/src/services/assistant.ts | 6 +- .../service/src/services/conversation.ts | 6 +- .../synthesis/service/src/services/message.ts | 6 +- .../service/src/services/participant.ts | 4 +- .../synthesis/service/src/services/request.ts | 4 +- .../synthesis/service/src/test/setup.ts | 2 +- src/systems/synthesis/service/src/worker.ts | 2 +- .../synthesis/service/vitest.e2e.config.ts | 2 +- src/systems/voyager/service/Dockerfile | 4 +- src/systems/voyager/service/package.json | 42 +- .../voyager/service/src/controllers/_app.ts | 2 +- .../voyager/service/src/controllers/_index.ts | 2 +- .../voyager/service/src/controllers/index.ts | 4 +- .../voyager/service/src/controllers/record.ts | 2 +- .../voyager/service/src/controllers/source.ts | 2 +- .../voyager/service/src/controllers/tenant.ts | 2 +- src/systems/voyager/service/src/env.ts | 4 +- src/systems/voyager/service/src/id.ts | 2 +- src/systems/voyager/service/src/instrument.ts | 2 +- .../voyager/service/src/queues/cleanup.ts | 2 +- .../voyager/service/src/queues/record.ts | 2 +- .../voyager/service/src/services/index_.ts | 6 +- .../voyager/service/src/services/record.ts | 10 +- .../voyager/service/src/services/source.ts | 6 +- .../voyager/service/src/services/tenant.ts | 4 +- .../voyager/service/src/test/client.ts | 6 +- src/systems/voyager/service/src/test/setup.ts | 2 +- src/systems/voyager/service/src/worker.ts | 2 +- .../voyager/service/vitest.e2e.config.ts | 2 +- 2402 files changed, 29489 insertions(+), 11256 deletions(-) create mode 100644 src/_shared/backend/api-key/package.json create mode 100644 src/_shared/backend/api-key/src/base62.test.ts create mode 100644 src/_shared/backend/api-key/src/base62.ts create mode 100644 src/_shared/backend/api-key/src/index.ts create mode 100644 src/_shared/backend/api-key/src/keys.ts create mode 100644 src/_shared/backend/api-key/tsconfig.json create mode 100644 src/_shared/backend/api-key/tsup.config.js create mode 100644 src/_shared/backend/api-mux/package.json create mode 100644 src/_shared/backend/api-mux/src/index.ts create mode 100644 src/_shared/backend/api-mux/src/mux.ts create mode 100644 src/_shared/backend/api-mux/tsconfig.json create mode 100644 src/_shared/backend/api-mux/tsup.config.js create mode 100644 src/_shared/backend/cache/package.json create mode 100644 src/_shared/backend/cache/src/index.ts create mode 100644 src/_shared/backend/cache/tsconfig.json create mode 100644 src/_shared/backend/cron/package.json create mode 100644 src/_shared/backend/cron/src/index.ts create mode 100644 src/_shared/backend/cron/tsconfig.json create mode 100644 src/_shared/backend/env/package.json create mode 100644 src/_shared/backend/env/src/env.test.ts create mode 100644 src/_shared/backend/env/src/env.ts create mode 100644 src/_shared/backend/env/src/index.ts create mode 100644 src/_shared/backend/env/tsconfig.json create mode 100644 src/_shared/backend/error/package.json create mode 100644 src/_shared/backend/error/src/defaultErrors.test.ts create mode 100644 src/_shared/backend/error/src/defaultErrors.ts create mode 100644 src/_shared/backend/error/src/error.test.ts create mode 100644 src/_shared/backend/error/src/error.ts create mode 100644 src/_shared/backend/error/src/index.ts create mode 100644 src/_shared/backend/error/tsconfig.json create mode 100644 src/_shared/backend/event/package.json create mode 100644 src/_shared/backend/event/src/eventObject.ts create mode 100644 src/_shared/backend/event/src/index.ts create mode 100644 src/_shared/backend/event/tsconfig.json create mode 100644 src/_shared/backend/execution-context/.gitignore create mode 100644 src/_shared/backend/execution-context/package.json create mode 100644 src/_shared/backend/execution-context/src/execution-context.ts create mode 100644 src/_shared/backend/execution-context/src/index.ts create mode 100644 src/_shared/backend/execution-context/src/with-execution-context.ts create mode 100644 src/_shared/backend/execution-context/tsconfig.json create mode 100644 src/_shared/backend/forwarded-for/package.json create mode 100644 src/_shared/backend/forwarded-for/src/index.ts create mode 100644 src/_shared/backend/forwarded-for/src/ip.ts create mode 100644 src/_shared/backend/forwarded-for/tsconfig.json create mode 100644 src/_shared/backend/hono/package.json create mode 100644 src/_shared/backend/hono/src/context.ts create mode 100644 src/_shared/backend/hono/src/hono.ts create mode 100644 src/_shared/backend/hono/src/index.ts create mode 100644 src/_shared/backend/hono/src/validation.ts create mode 100644 src/_shared/backend/hono/tsconfig.json create mode 100644 src/_shared/backend/lock/package.json create mode 100644 src/_shared/backend/lock/src/index.ts create mode 100644 src/_shared/backend/lock/tsconfig.json create mode 100644 src/_shared/backend/pagination/package.json create mode 100644 src/_shared/backend/pagination/src/cursor.ts create mode 100644 src/_shared/backend/pagination/src/index.ts create mode 100644 src/_shared/backend/pagination/src/paginatedProvider.ts create mode 100644 src/_shared/backend/pagination/src/paginator.ts create mode 100644 src/_shared/backend/pagination/src/types.ts create mode 100644 src/_shared/backend/pagination/tsconfig.json create mode 100644 src/_shared/backend/pagination/tsup.config.js create mode 100644 src/_shared/backend/presenter/package.json create mode 100644 src/_shared/backend/presenter/src/index.ts create mode 100644 src/_shared/backend/presenter/src/presenter.ts create mode 100644 src/_shared/backend/presenter/tsconfig.json create mode 100644 src/_shared/backend/presenter/tsup.config.js create mode 100644 src/_shared/backend/queue/package.json create mode 100644 src/_shared/backend/queue/src/drivers/bullmq.ts create mode 100644 src/_shared/backend/queue/src/index.ts create mode 100644 src/_shared/backend/queue/src/lib/queueRetryError.ts create mode 100644 src/_shared/backend/queue/src/types.ts create mode 100644 src/_shared/backend/queue/tsconfig.json create mode 100644 src/_shared/backend/redis/package.json create mode 100644 src/_shared/backend/redis/src/index.ts create mode 100644 src/_shared/backend/redis/src/redis.ts create mode 100644 src/_shared/backend/redis/src/redisStreams.ts create mode 100644 src/_shared/backend/redis/src/utils/parseRedisUrl.test.ts create mode 100644 src/_shared/backend/redis/src/utils/parseRedisUrl.ts create mode 100644 src/_shared/backend/redis/tsconfig.json create mode 100644 src/_shared/backend/service/package.json create mode 100644 src/_shared/backend/service/src/index.ts create mode 100644 src/_shared/backend/service/tsconfig.json create mode 100644 src/_shared/backend/telemetry/package.json create mode 100644 src/_shared/backend/telemetry/src/index.ts create mode 100644 src/_shared/backend/telemetry/tsconfig.json create mode 100644 src/_shared/backend/testing-tools/package.json create mode 100644 src/_shared/backend/testing-tools/src/factories.test.ts create mode 100644 src/_shared/backend/testing-tools/src/factories/index.ts create mode 100644 src/_shared/backend/testing-tools/src/http.test.ts create mode 100644 src/_shared/backend/testing-tools/src/http/index.ts create mode 100644 src/_shared/backend/testing-tools/src/index.ts create mode 100644 src/_shared/backend/testing-tools/src/prisma.test.ts create mode 100644 src/_shared/backend/testing-tools/src/prisma/index.ts create mode 100644 src/_shared/backend/testing-tools/src/vitest.test.ts create mode 100644 src/_shared/backend/testing-tools/src/vitest/ci.ts create mode 100644 src/_shared/backend/testing-tools/src/vitest/config.ts create mode 100644 src/_shared/backend/testing-tools/src/vitest/env.ts create mode 100644 src/_shared/backend/testing-tools/src/vitest/setup.ts create mode 100644 src/_shared/backend/testing-tools/tsconfig.json create mode 100644 src/_shared/backend/tokens/package.json create mode 100644 src/_shared/backend/tokens/src/index.ts create mode 100644 src/_shared/backend/tokens/src/tokens.test.ts create mode 100644 src/_shared/backend/tokens/src/tokens.ts create mode 100644 src/_shared/backend/tokens/tsconfig.json create mode 100644 src/_shared/rpc/rpc-client/package.json create mode 100644 src/_shared/rpc/rpc-client/src/index.ts create mode 100644 src/_shared/rpc/rpc-client/src/request.test.ts create mode 100644 src/_shared/rpc/rpc-client/src/request.ts create mode 100644 src/_shared/rpc/rpc-client/src/shared/clientBuilder.ts create mode 100644 src/_shared/rpc/rpc-client/src/shared/requester.ts create mode 100644 src/_shared/rpc/rpc-client/tsconfig.json create mode 100644 src/_shared/rpc/rpc-client/tsup.config.js create mode 100644 src/_shared/rpc/rpc-server/package.json create mode 100644 src/_shared/rpc/rpc-server/src/controller.test.ts create mode 100644 src/_shared/rpc/rpc-server/src/controller.ts create mode 100644 src/_shared/rpc/rpc-server/src/extractIp.ts create mode 100644 src/_shared/rpc/rpc-server/src/index.ts create mode 100644 src/_shared/rpc/rpc-server/src/rpcMux.ts create mode 100644 src/_shared/rpc/rpc-server/src/server.ts create mode 100644 src/_shared/rpc/rpc-server/tsconfig.json create mode 100644 src/_shared/rpc/rpc-server/tsup.config.js create mode 100644 src/_shared/util/anonymize-ip/package.json create mode 100644 src/_shared/util/anonymize-ip/src/anonymizeIp.test.ts create mode 100644 src/_shared/util/anonymize-ip/src/anonymizeIp.ts create mode 100644 src/_shared/util/anonymize-ip/src/index.ts create mode 100644 src/_shared/util/anonymize-ip/tsconfig.json create mode 100644 src/_shared/util/anonymize-ip/tsup.config.js create mode 100644 src/_shared/util/base62/package.json create mode 100644 src/_shared/util/base62/src/base62.test.ts create mode 100644 src/_shared/util/base62/src/base62.ts create mode 100644 src/_shared/util/base62/src/index.ts create mode 100644 src/_shared/util/base62/tsconfig.json create mode 100644 src/_shared/util/canonicalize/package.json create mode 100644 src/_shared/util/canonicalize/src/canonicalize.test.ts create mode 100644 src/_shared/util/canonicalize/src/canonicalize.ts create mode 100644 src/_shared/util/canonicalize/src/index.ts create mode 100644 src/_shared/util/canonicalize/tsconfig.json create mode 100644 src/_shared/util/case/package.json create mode 100644 src/_shared/util/case/src/cases.test.ts create mode 100644 src/_shared/util/case/src/cases.ts create mode 100644 src/_shared/util/case/src/index.ts create mode 100644 src/_shared/util/case/src/normalize.test.ts create mode 100644 src/_shared/util/case/src/normalize.ts create mode 100644 src/_shared/util/case/src/special.ts create mode 100644 src/_shared/util/case/tsconfig.json create mode 100644 src/_shared/util/delay/.gitignore create mode 100644 src/_shared/util/delay/package.json create mode 100644 src/_shared/util/delay/src/index.ts create mode 100644 src/_shared/util/delay/tsconfig.json create mode 100644 src/_shared/util/emitter/package.json create mode 100644 src/_shared/util/emitter/src/emitter.test.ts create mode 100644 src/_shared/util/emitter/src/emitter.ts create mode 100644 src/_shared/util/emitter/src/index.ts create mode 100644 src/_shared/util/emitter/tsconfig.json create mode 100644 src/_shared/util/encryption/package.json create mode 100644 src/_shared/util/encryption/src/base86.ts create mode 100644 src/_shared/util/encryption/src/crypto.ts create mode 100644 src/_shared/util/encryption/src/index.ts create mode 100644 src/_shared/util/encryption/tsconfig.json create mode 100644 src/_shared/util/flatten/package.json create mode 100644 src/_shared/util/flatten/src/deepen.test.ts create mode 100644 src/_shared/util/flatten/src/deepen.ts create mode 100644 src/_shared/util/flatten/src/flatten.test.ts create mode 100644 src/_shared/util/flatten/src/flatten.ts create mode 100644 src/_shared/util/flatten/src/index.ts create mode 100644 src/_shared/util/flatten/tsconfig.json create mode 100644 src/_shared/util/hash/package.json create mode 100644 src/_shared/util/hash/src/hash.test.ts create mode 100644 src/_shared/util/hash/src/hash.ts create mode 100644 src/_shared/util/hash/src/index.ts create mode 100644 src/_shared/util/hash/tsconfig.json create mode 100644 src/_shared/util/id/package.json create mode 100644 src/_shared/util/id/src/id.test.ts create mode 100644 src/_shared/util/id/src/id.ts create mode 100644 src/_shared/util/id/src/index.ts create mode 100644 src/_shared/util/id/tsconfig.json create mode 100644 src/_shared/util/ip-info/package.json create mode 100644 src/_shared/util/ip-info/src/index.ts create mode 100644 src/_shared/util/ip-info/src/ip.test.ts create mode 100644 src/_shared/util/ip-info/src/ip.ts create mode 100644 src/_shared/util/ip-info/tsconfig.json create mode 100644 src/_shared/util/join-paths/package.json create mode 100644 src/_shared/util/join-paths/src/index.ts create mode 100644 src/_shared/util/join-paths/src/joinPaths.test.ts create mode 100644 src/_shared/util/join-paths/src/joinPaths.ts create mode 100644 src/_shared/util/join-paths/tsconfig.json create mode 100644 src/_shared/util/jwt/package.json create mode 100644 src/_shared/util/jwt/src/index.ts create mode 100644 src/_shared/util/jwt/src/jwt.test.ts create mode 100644 src/_shared/util/jwt/src/jwt.ts create mode 100644 src/_shared/util/jwt/tsconfig.json create mode 100644 src/_shared/util/memo/package.json create mode 100644 src/_shared/util/memo/src/index.ts create mode 100644 src/_shared/util/memo/src/memo.test.ts create mode 100644 src/_shared/util/memo/src/memo.ts create mode 100644 src/_shared/util/memo/tsconfig.json create mode 100644 src/_shared/util/merge/package.json create mode 100644 src/_shared/util/merge/src/index.ts create mode 100644 src/_shared/util/merge/src/merge.test.ts create mode 100644 src/_shared/util/merge/src/merge.ts create mode 100644 src/_shared/util/merge/tsconfig.json create mode 100644 src/_shared/util/murmur3/package.json create mode 100644 src/_shared/util/murmur3/src/index.ts create mode 100644 src/_shared/util/murmur3/src/murmur3.test.ts create mode 100644 src/_shared/util/murmur3/src/murmur3.ts create mode 100644 src/_shared/util/murmur3/tsconfig.json create mode 100644 src/_shared/util/normalize-email/package.json create mode 100644 src/_shared/util/normalize-email/src/index.ts create mode 100644 src/_shared/util/normalize-email/src/normalizeEmail.test.ts create mode 100644 src/_shared/util/normalize-email/src/normalizeEmail.ts create mode 100644 src/_shared/util/normalize-email/tsconfig.json create mode 100644 src/_shared/util/once/package.json create mode 100644 src/_shared/util/once/src/index.ts create mode 100644 src/_shared/util/once/src/once.test.ts create mode 100644 src/_shared/util/once/src/once.ts create mode 100644 src/_shared/util/once/tsconfig.json create mode 100644 src/_shared/util/programmable-promise/.gitignore create mode 100644 src/_shared/util/programmable-promise/package.json create mode 100644 src/_shared/util/programmable-promise/src/index.test.ts create mode 100644 src/_shared/util/programmable-promise/src/index.ts create mode 100644 src/_shared/util/programmable-promise/tsconfig.json create mode 100644 src/_shared/util/proxy/package.json create mode 100644 src/_shared/util/proxy/src/index.ts create mode 100644 src/_shared/util/proxy/src/proxy.test.ts create mode 100644 src/_shared/util/proxy/src/proxy.ts create mode 100644 src/_shared/util/proxy/tsconfig.json create mode 100644 src/_shared/util/random-from-array/.gitignore create mode 100644 src/_shared/util/random-from-array/package.json create mode 100644 src/_shared/util/random-from-array/src/index.test.ts create mode 100644 src/_shared/util/random-from-array/src/index.ts create mode 100644 src/_shared/util/random-from-array/tsconfig.json create mode 100644 src/_shared/util/random-number/package.json create mode 100644 src/_shared/util/random-number/src/index.ts create mode 100644 src/_shared/util/random-number/src/randomNumber.test.ts create mode 100644 src/_shared/util/random-number/src/randomNumber.ts create mode 100644 src/_shared/util/random-number/tsconfig.json create mode 100644 src/_shared/util/sentry/package.json create mode 100644 src/_shared/util/sentry/src/index.ts create mode 100644 src/_shared/util/sentry/tsconfig.json create mode 100644 src/_shared/util/serialize/package.json create mode 100644 src/_shared/util/serialize/src/index.ts create mode 100644 src/_shared/util/serialize/src/json.test.ts create mode 100644 src/_shared/util/serialize/src/json.ts create mode 100644 src/_shared/util/serialize/tsconfig.json create mode 100644 src/_shared/util/shadow-id/package.json create mode 100644 src/_shared/util/shadow-id/src/index.ts create mode 100644 src/_shared/util/shadow-id/tsconfig.json create mode 100644 src/_shared/util/sign/package.json create mode 100644 src/_shared/util/sign/src/index.ts create mode 100644 src/_shared/util/sign/src/sign.test.ts create mode 100644 src/_shared/util/sign/src/sign.ts create mode 100644 src/_shared/util/sign/tsconfig.json create mode 100644 src/_shared/util/slugify/package.json create mode 100644 src/_shared/util/slugify/src/index.ts create mode 100644 src/_shared/util/slugify/tsconfig.json create mode 100644 src/_shared/util/snowflake/package.json create mode 100644 src/_shared/util/snowflake/src/index.ts create mode 100644 src/_shared/util/snowflake/src/snowflake.ts create mode 100644 src/_shared/util/snowflake/tsconfig.json create mode 100644 src/_shared/util/timezone/package.json create mode 100644 src/_shared/util/timezone/src/data.ts create mode 100644 src/_shared/util/timezone/src/getUtcOffset.ts create mode 100644 src/_shared/util/timezone/src/index.ts create mode 100644 src/_shared/util/timezone/tsconfig.json create mode 100644 src/_shared/util/unique/.gitignore create mode 100644 src/_shared/util/unique/package.json create mode 100644 src/_shared/util/unique/src/index.test.ts create mode 100644 src/_shared/util/unique/src/index.ts create mode 100644 src/_shared/util/unique/tsconfig.json create mode 100644 src/_shared/util/validation/package.json create mode 100644 src/_shared/util/validation/src/index.ts create mode 100644 src/_shared/util/validation/src/lib/introspect.ts create mode 100644 src/_shared/util/validation/src/lib/result.test.ts create mode 100644 src/_shared/util/validation/src/lib/result.ts create mode 100644 src/_shared/util/validation/src/lib/types.ts create mode 100644 src/_shared/util/validation/src/lib/validator.test.ts create mode 100644 src/_shared/util/validation/src/lib/validator.ts create mode 100644 src/_shared/util/validation/src/modifiers/color.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/color.ts create mode 100644 src/_shared/util/validation/src/modifiers/email.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/email.ts create mode 100644 src/_shared/util/validation/src/modifiers/emoji.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/emoji.ts create mode 100644 src/_shared/util/validation/src/modifiers/endsWith.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/endsWith.ts create mode 100644 src/_shared/util/validation/src/modifiers/equals.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/equals.ts create mode 100644 src/_shared/util/validation/src/modifiers/includes.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/includes.ts create mode 100644 src/_shared/util/validation/src/modifiers/index.ts create mode 100644 src/_shared/util/validation/src/modifiers/integer.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/integer.ts create mode 100644 src/_shared/util/validation/src/modifiers/ip.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/ip.ts create mode 100644 src/_shared/util/validation/src/modifiers/isoDate.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/isoDate.ts create mode 100644 src/_shared/util/validation/src/modifiers/length.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/length.ts create mode 100644 src/_shared/util/validation/src/modifiers/multipleOf.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/multipleOf.ts create mode 100644 src/_shared/util/validation/src/modifiers/oneOf.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/oneOf.ts create mode 100644 src/_shared/util/validation/src/modifiers/positive.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/positive.ts create mode 100644 src/_shared/util/validation/src/modifiers/regex.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/regex.ts create mode 100644 src/_shared/util/validation/src/modifiers/size.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/size.ts create mode 100644 src/_shared/util/validation/src/modifiers/startsWith.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/startsWith.ts create mode 100644 src/_shared/util/validation/src/modifiers/url.test.ts create mode 100644 src/_shared/util/validation/src/modifiers/url.ts create mode 100644 src/_shared/util/validation/src/transformers/case.test.ts create mode 100644 src/_shared/util/validation/src/transformers/case.ts create mode 100644 src/_shared/util/validation/src/transformers/index.ts create mode 100644 src/_shared/util/validation/src/transformers/trim.test.ts create mode 100644 src/_shared/util/validation/src/transformers/trim.ts create mode 100644 src/_shared/util/validation/src/validators/any.test.ts create mode 100644 src/_shared/util/validation/src/validators/any.ts create mode 100644 src/_shared/util/validation/src/validators/array.test.ts create mode 100644 src/_shared/util/validation/src/validators/array.ts create mode 100644 src/_shared/util/validation/src/validators/boolean.test.ts create mode 100644 src/_shared/util/validation/src/validators/boolean.ts create mode 100644 src/_shared/util/validation/src/validators/date.test.ts create mode 100644 src/_shared/util/validation/src/validators/date.ts create mode 100644 src/_shared/util/validation/src/validators/enum.test.ts create mode 100644 src/_shared/util/validation/src/validators/enum.ts create mode 100644 src/_shared/util/validation/src/validators/index.ts create mode 100644 src/_shared/util/validation/src/validators/intersection.test.ts create mode 100644 src/_shared/util/validation/src/validators/intersection.ts create mode 100644 src/_shared/util/validation/src/validators/literal.test.ts create mode 100644 src/_shared/util/validation/src/validators/literal.ts create mode 100644 src/_shared/util/validation/src/validators/null.test.ts create mode 100644 src/_shared/util/validation/src/validators/null.ts create mode 100644 src/_shared/util/validation/src/validators/nullable.test.ts create mode 100644 src/_shared/util/validation/src/validators/nullable.ts create mode 100644 src/_shared/util/validation/src/validators/number.test.ts create mode 100644 src/_shared/util/validation/src/validators/number.ts create mode 100644 src/_shared/util/validation/src/validators/object.test.ts create mode 100644 src/_shared/util/validation/src/validators/object.ts create mode 100644 src/_shared/util/validation/src/validators/optional.test.ts create mode 100644 src/_shared/util/validation/src/validators/optional.ts create mode 100644 src/_shared/util/validation/src/validators/record.test.ts create mode 100644 src/_shared/util/validation/src/validators/record.ts create mode 100644 src/_shared/util/validation/src/validators/string.test.ts create mode 100644 src/_shared/util/validation/src/validators/string.ts create mode 100644 src/_shared/util/validation/src/validators/union.test.ts create mode 100644 src/_shared/util/validation/src/validators/union.ts create mode 100644 src/_shared/util/validation/src/validators/void.ts create mode 100644 src/_shared/util/validation/tsconfig.json create mode 100644 src/_shared/util/websocket-client/package.json create mode 100644 src/_shared/util/websocket-client/src/index.ts create mode 100644 src/_shared/util/websocket-client/tsconfig.json diff --git a/.gitignore b/.gitignore index 8e4e3285e..f4ffb858a 100644 --- a/.gitignore +++ b/.gitignore @@ -162,6 +162,9 @@ wheels/ # Cache cache/ +!src/_shared/backend/cache/ +!src/_shared/backend/cache/** +src/_shared/backend/cache/node_modules/ generated/ # Virtual Environment diff --git a/bun.lock b/bun.lock index f8961d61a..0c747b5d5 100644 --- a/bun.lock +++ b/bun.lock @@ -89,991 +89,662 @@ "typescript": "^5", }, }, - "src/backend/apis/auth": { - "name": "@metorial/api-auth", + "src/_shared/backend/api-key": { + "name": "@mtsrc/api-key", "version": "1.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/validation": "^1.0.10", - "@metorial/auth": "^1.0.0", - "@metorial/context": "^1.0.0", - "@metorial/module-user": "^1.0.0", + "@mtsrc/id": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4", }, }, - "src/backend/apis/connection": { - "name": "@metorial/api-connection", + "src/_shared/backend/api-mux": { + "name": "@mtsrc/api-mux", "version": "1.0.0", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/hono": "^1.0.10", - "@metorial/bearer": "^1.0.0", - "@metorial/config": "^1.0.0", - "@metorial/context": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/mcp-utils": "^1.0.0", - "@metorial/module-access": "^1.0.0", - "@metorial/module-magic": "^1.0.0", - "@metorial/module-protect": "^1.0.0", - "@metorial/module-subspace": "1.0.0", - "@metorial/rest": "^1.0.0", - "hono": "^4.0.0", + "@mtsrc/error": "1.0.0", + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4", }, }, - "src/backend/apis/core": { - "name": "@metorial/api-core", + "src/_shared/backend/cache": { + "name": "@mtsrc/cache", "version": "1.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/shadow-id": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial/auth": "^1.0.0", - "@metorial/config": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/module-access": "^1.0.0", - "@metorial/module-assistant": "^1.0.0", - "@metorial/module-consumer": "^1.0.0", - "@metorial/module-file": "^1.0.0", - "@metorial/module-machine-access": "^1.0.0", - "@metorial/module-magic": "^1.0.0", - "@metorial/module-organization": "^1.0.0", - "@metorial/module-usage": "^1.0.0", - "@metorial/module-user": "^1.0.0", - "@metorial/presenter": "^1.0.0", - "@metorial/rest": "^1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "lru-cache": "^11.2.4", + "superjson": "^2.2.6", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/apis/custom-portal": { - "name": "@metorial/api-custom-portal", + "src/_shared/backend/cron": { + "name": "@mtsrc/cron", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/validation": "^1.0.10", - "@metorial/config": "1.0.0", - "@metorial/db": "1.0.0", - "@metorial/module-consumer": "1.0.0", - "@metorial/rpc": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "bullmq": "^5.34.3", }, "devDependencies": { - "@lowerdeck/serialize": "^1.0.4", - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/apis/files": { - "name": "@metorial/api-files", + "src/_shared/backend/env": { + "name": "@mtsrc/env", "version": "1.0.0", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/forwarded-for": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@metorial/auth": "^1.0.0", - "@metorial/config": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/module-access": "^1.0.0", - "@metorial/module-file": "^1.0.0", - "@metorial/module-organization": "^1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/apis/oauth": { - "name": "@metorial/api-oauth", + "src/_shared/backend/error": { + "name": "@mtsrc/error", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/validation": "^1.0.10", - "@metorial/config": "^1.0.0", - "@metorial/context": "^1.0.0", - "@metorial/module-machine-access": "^1.0.0", + "@mtsrc/case": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/apps/api": { - "name": "@metorial/app-api", + "src/_shared/backend/event": { + "name": "@mtsrc/event", "version": "1.0.0", "dependencies": { - "@lowerdeck/api-mux": "1.0.4", - "@metorial/api-auth": "1.0.0", - "@metorial/api-connection": "1.0.0", - "@metorial/api-core": "1.0.0", - "@metorial/api-custom-portal": "1.0.0", - "@metorial/api-files": "1.0.0", - "@metorial/auth": "1.0.0", - "@metorial/logging": "1.0.0", - "@metorial/module-access": "1.0.0", - "@metorial/module-email": "1.0.0", - "@metorial/module-event": "1.0.0", - "@metorial/module-file": "1.0.0", - "@metorial/module-machine-access": "1.0.0", - "@metorial/module-organization": "1.0.0", - "@metorial/module-usage": "1.0.0", - "@metorial/module-user": "1.0.0", - "@metorial/queue": "1.0.0", - "@vercel/ncc": "^0.38.4", + "@mtsrc/memo": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "p-queue": "^9.1.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/auth": { - "name": "@metorial/auth", + "src/_shared/backend/execution-context": { + "name": "@mtsrc/execution-context", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/forwarded-for": "1.0.4", - "@metorial/bearer": "1.0.0", - "@metorial/config": "1.0.0", - "@metorial/context": "1.0.0", - "@metorial/module-access": "1.0.0", - "@metorial/module-flags": "1.0.0", - "cookie": "^1.0.2", + "@mtsrc/id": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@opentelemetry/api": "^1.9.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/backend/config": { - "name": "@metorial/config", + "src/_shared/backend/forwarded-for": { + "name": "@mtsrc/forwarded-for", "version": "1.0.0", - "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "^5.8.3", + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/db": { - "name": "@metorial/db", + "src/_shared/backend/hono": { + "name": "@mtsrc/hono", "version": "1.0.0", "dependencies": { - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/snowflake": "^1.0.2", - "@metorial/id": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.11.4", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", - "@prisma/extension-read-replicas": "^0.5.0", - "@types/json-schema": "^7.0.15", - "json-schema": "^0.4.0", - "lru-cache": "^11.1.0", - "p-queue": "^8.1.0", - "prisma": "^7.4.1", - "prisma-json-types-generator": "^4.1.1", + "@mtsrc/error": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/validation": "1.0.0", + "hono": "^4.5.5", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/internal-clients": { - "name": "@metorial/internal-clients", + "src/_shared/backend/lock": { + "name": "@mtsrc/lock", "version": "1.0.0", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/cargo-client": "1.0.0", - "@metorial-platform-systems/subspace-client": "1.0.0", - "@metorial-platform-systems/synthesis-client": "1.0.0", - "@metorial/db": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@types/bun": "^1.2.11", + "ioredis": "^5.4.1", + "redlock": "^5.0.0-beta.2", + "superjson": "^2.2.5", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/access": { - "name": "@metorial/module-access", + "src/_shared/backend/pagination": { + "name": "@mtsrc/pagination", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "1.0.4", - "@lowerdeck/service": "^1.0.7", - "@metorial/api-keys": "1.0.0", - "@metorial/config": "1.0.0", - "@metorial/consumer-auth": "1.0.0", - "@metorial/context": "1.0.0", - "@metorial/db": "1.0.0", - "@metorial/module-machine-access": "1.0.0", - "@metorial/module-organization": "1.0.0", - "@metorial/module-user": "1.0.0", - "@metorial/queue": "1.0.0", + "@mtsrc/base62": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@metorial/tsconfig": "1.0.0", + "mongoose": "^9.0.2", + "typescript": "^5.9.3", + "vitest": "^3.2.4", }, }, - "src/backend/modules/assistant": { - "name": "@metorial/module-assistant", + "src/_shared/backend/presenter": { + "name": "@mtsrc/presenter", "version": "1.0.0", "dependencies": { - "@ai-sdk/anthropic": "^3.0.75", - "@ai-sdk/google": "^3.0.68", - "@ai-sdk/openai": "^3.0.62", - "@ai-sdk/xai": "^3.0.88", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "1.0.4", - "@lowerdeck/service": "^1.0.7", - "@metorial-platform-systems/synthesis-client": "1.0.0", - "@metorial-services/scout-client": "^1.0.0", - "@metorial/api-keys": "1.0.0", - "@metorial/config": "1.0.0", - "@metorial/consumer-auth": "1.0.0", - "@metorial/context": "1.0.0", - "@metorial/db": "1.0.0", - "@metorial/internal-clients": "1.0.0", - "@metorial/module-machine-access": "1.0.0", - "@metorial/module-organization": "1.0.0", - "@metorial/module-user": "1.0.0", - "@metorial/queue": "1.0.0", - "@metorial/redis": "1.0.0", - "@openharness/core": "^0.6.2", - "ai": "^6.0.175", - "just-bash": "^2.14.4", - "zod": "^4.4.3", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4", }, }, - "src/backend/modules/community": { - "name": "@metorial/module-community", + "src/_shared/backend/queue": { + "name": "@mtsrc/queue", "version": "1.0.0", "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/queue": "^1.0.0", - "@types/fs-extra": "^11.0.4", - "fs-extra": "^11.3.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/memo": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "bullmq": "^5.66.0", + "superjson": "^2.2.6", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/consumer": { - "name": "@metorial/module-consumer", + "src/_shared/backend/redis": { + "name": "@mtsrc/redis", "version": "1.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/tokens": "^1.0.5", - "@metorial-platform-systems/ares-client": "^1.0.0", - "@metorial/config": "1.0.0", - "@metorial/consumer-auth": "1.0.0", - "@metorial/context": "1.0.0", - "@metorial/db": "1.0.0", - "@metorial/module-access": "1.0.0", - "@metorial/module-file": "1.0.0", - "@metorial/module-machine-access": "1.0.0", - "@metorial/module-magic": "1.0.0", - "@metorial/module-organization": "1.0.0", - "@metorial/module-search": "^1.0.0", - "@metorial/module-subspace": "1.0.0", - "@metorial/queue": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/memo": "1.0.0", + "@mtsrc/random-number": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "ioredis": "^5.8.2", + "p-queue": "^9.0.1", + "redis": "^5.10.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/email": { - "name": "@metorial/module-email", + "src/_shared/backend/service": { + "name": "@mtsrc/service", "version": "1.0.0", "dependencies": { - "@lowerdeck/programmable-promise": "1.0.6", - "@lowerdeck/service": "^1.0.7", - "@metorial-platform-systems/relay-client": "workspace:*", - "@metorial/db": "^1.0.0", - "@metorial/queue": "^1.0.0", + "@mtsrc/telemetry": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/event": { - "name": "@metorial/module-event", + "src/_shared/backend/telemetry": { + "name": "@mtsrc/telemetry", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/queue": "^1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^2.5.0", + "@opentelemetry/core": "^2.5.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.211.0", + "@opentelemetry/instrumentation": "^0.212.0", + "@opentelemetry/resources": "^2.5.0", + "@opentelemetry/sdk-trace-base": "^2.5.0", + "@opentelemetry/sdk-trace-node": "^2.5.0", + "@opentelemetry/semantic-conventions": "^1.39.0", + "@prisma/instrumentation": "^7.4.1", + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4", + }, + }, + "src/_shared/backend/testing-tools": { + "name": "@mtsrc/testing-tools", + "version": "1.0.0", + "dependencies": { + "vite": "^5.4.1", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, + "peerDependencies": { + "vitest": ">=3.0.0", + }, }, - "src/backend/modules/file": { - "name": "@metorial/module-file", + "src/_shared/backend/tokens": { + "name": "@mtsrc/tokens", "version": "1.0.0", "dependencies": { - "@aws-sdk/client-s3": "^3.808.0", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@metorial/config": "^1.0.0", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/internal-clients": "1.0.0", - "@metorial/queue": "^1.0.0", + "@mtsrc/base62": "1.0.0", + "@mtsrc/memo": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/flags": { - "name": "@metorial/module-flags", + "src/_shared/rpc/rpc-client": { + "name": "@mtsrc/rpc-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/queue": "^1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/memo": "1.0.0", + "@mtsrc/proxy": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@opentelemetry/api": "^1.9.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4", }, }, - "src/backend/modules/machine-access": { - "name": "@metorial/module-machine-access", + "src/_shared/rpc/rpc-server": { + "name": "@mtsrc/rpc-server", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@metorial/api-keys": "^1.0.0", - "@metorial/config": "^1.0.0", - "@metorial/context": "^1.0.0", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/module-organization": "^1.0.0", - "@metorial/multi-region": "^1.0.0", - "@metorial/queue": "^1.0.0", - "date-fns": "^4.1.0", - "ipaddr.js": "^2.2.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/memo": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "cookie": "^1.1.1", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4", + }, + }, + "src/_shared/util/anonymize-ip": { + "name": "@mtsrc/anonymize-ip", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/backend/modules/magic": { - "name": "@metorial/module-magic", + "src/_shared/util/base62": { + "name": "@mtsrc/base62", "version": "1.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "1.0.6", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@metorial/api-keys": "^1.0.0", - "@metorial/config": "^1.0.0", - "@metorial/context": "^1.0.0", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/mcp-utils": "1.0.0", - "@metorial/module-event": "1.0.0", - "@metorial/module-search": "^1.0.0", - "@metorial/module-subspace": "1.0.0", - "@metorial/queue": "^1.0.0", - "@metorial/redis": "1.0.0", - "@metorial/unified-id": "^1.0.0", - "ajv": "^8.17.1", - "date-fns": "^4.1.0", - "mitt": "^3.0.1", - "mongoose": "^8.14.2", - "redis": "^5.6.0", + "base-x": "^5.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/backend/modules/markdown": { - "name": "@metorial/module-markdown", + "src/_shared/util/canonicalize": { + "name": "@mtsrc/canonicalize", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/case": { + "name": "@mtsrc/case", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/delay": { + "name": "@mtsrc/delay", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/emitter": { + "name": "@mtsrc/emitter", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/encryption": { + "name": "@mtsrc/encryption", "version": "1.0.0", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/queue": "^1.0.0", - "date-fns": "^4.1.0", - "mongoose": "^8.14.2", - "rehype-parse": "^9.0.1", - "rehype-raw": "^7.0.0", - "rehype-remark": "^10.0.1", - "rehype-sanitize": "^6.0.0", - "rehype-stringify": "^10.0.1", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.1", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.1.2", - "remark-stringify": "^11.0.0", - "unified": "^11.0.5", - "unist-util-visit": "^5.0.0", + "@mtsrc/base62": "1.0.0", + "@mtsrc/id": "1.0.0", + "base-x": "^5.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/organization": { - "name": "@metorial/module-organization", + "src/_shared/util/flatten": { + "name": "@mtsrc/flatten", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/hash": { + "name": "@mtsrc/hash", "version": "1.0.0", "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@metorial/config": "^1.0.0", - "@metorial/context": "^1.0.0", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/internal-clients": "^1.0.0", - "@metorial/module-email": "^1.0.0", - "@metorial/module-file": "^1.0.0", - "@metorial/queue": "^1.0.0", - "date-fns": "^4.1.0", - "react": "^19.1.0", + "@mtsrc/base62": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/backend/modules/protect": { - "name": "@metorial/module-protect", + "src/_shared/util/id": { + "name": "@mtsrc/id", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/service": "1.0.7", - "@metorial/context": "1.0.0", - "@metorial/db": "1.0.0", - "@metorial/module-machine-access": "1.0.0", - "@metorial/module-organization": "1.0.0", - "@metorial/module-user": "1.0.0", - "@metorial/queue": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "nanoid": "^5.0.7", + "short-uuid": "^5.2.0", + "snowflake-uuid": "^1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/ip-info": { + "name": "@mtsrc/ip-info", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/search": { - "name": "@metorial/module-search", + "src/_shared/util/join-paths": { + "name": "@mtsrc/join-paths", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/jwt": { + "name": "@mtsrc/jwt", "version": "1.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/voyager-client": "workspace:*", + "jose": "^5.6.3", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/subspace": { - "name": "@metorial/module-subspace", + "src/_shared/util/memo": { + "name": "@mtsrc/memo", "version": "1.0.0", - "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/subspace-client": "^1.0.0", - "@metorial/context": "1.0.0", - "@metorial/db": "1.0.0", - "@metorial/internal-clients": "1.0.0", - "@metorial/module-access": "1.0.0", - "@metorial/module-machine-access": "1.0.0", - "@metorial/module-organization": "1.0.0", - "@metorial/module-usage": "1.0.0", - "@metorial/module-user": "1.0.0", - "@metorial/queue": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, + }, + "src/_shared/util/merge": { + "name": "@mtsrc/merge", + "version": "1.0.0", "devDependencies": { - "@lowerdeck/rpc-server": "^1.0.11", - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/murmur3": { + "name": "@mtsrc/murmur3", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/normalize-email": { + "name": "@mtsrc/normalize-email", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/usage": { - "name": "@metorial/module-usage", + "src/_shared/util/once": { + "name": "@mtsrc/once", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/programmable-promise": { + "name": "@mtsrc/programmable-promise", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/proxy": { + "name": "@mtsrc/proxy", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/random-from-array": { + "name": "@mtsrc/random-from-array", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/random-number": { + "name": "@mtsrc/random-number", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/sentry": { + "name": "@mtsrc/sentry", "version": "1.0.0", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/queue": "^1.0.0", - "date-fns": "^4.1.0", - "mongoose": "^8.14.2", + "@sentry/core": "^10.32.1", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/modules/user": { - "name": "@metorial/module-user", + "src/_shared/util/serialize": { + "name": "@mtsrc/serialize", "version": "1.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/service": "^1.0.7", - "@metorial/context": "^1.0.0", - "@metorial/cron": "^1.0.0", - "@metorial/db": "^1.0.0", - "@metorial/fabric": "^1.0.0", - "@metorial/id": "^1.0.0", - "@metorial/module-file": "^1.0.0", - "@metorial/queue": "^1.0.0", + "superjson": "^2.2.5", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/backend/multi-region": { - "name": "@metorial/multi-region", + "src/_shared/util/shadow-id": { + "name": "@mtsrc/shadow-id", "version": "1.0.0", "dependencies": { - "@aws-sdk/rds-signer": "^3.1018.0", - "@lowerdeck/base62": "^1.0.4", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/shadow-id": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial/cache": "^1.0.0", - "@metorial/context": "^1.0.0", - "@metorial/cron": "^1.0.0", - "@metorial/id": "^1.0.0", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", - "@prisma/extension-read-replicas": "^0.5.0", - "@types/bun": "^1.2.12", - "@types/pg": "^8.11.11", - "pg": "^8.11.3", - "prisma": "^7.4.1", - "prisma-json-types-generator": "^4.1.1", - "stripe": "^18.5.0", + "@mtsrc/base62": "1.0.0", + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/_shared/util/sign": { + "name": "@mtsrc/sign", + "version": "1.0.0", + "dependencies": { + "@mtsrc/base62": "1.0.0", + "@mtsrc/id": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "@types/bun": "^1.1.6", - "typescript": "^5.1.6", + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/frontend/apps/dashboard": { - "name": "@metorial/app-dashboard", + "src/_shared/util/slugify": { + "name": "@mtsrc/slugify", "version": "1.0.0", "dependencies": { - "@floating-ui/react": "^0.27.16", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/case": "^1.0.9", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/sentry": "^1.0.2", - "@metorial-platform-systems/synthesis-client": "1.0.0", - "@metorial/chart": "^1.0.0", - "@metorial/code-editor": "^1.0.0", - "@metorial/dashboard-sdk": "1.0.0-internal", - "@metorial/data-hooks": "^1.0.0", - "@metorial/frontend-config": "^1.0.0", - "@metorial/layout": "^1.0.0", - "@metorial/microfrontend": "^1.0.0", - "@metorial/pages": "^1.0.0", - "@metorial/scene-docs": "^1.0.0", - "@metorial/state": "^1.0.0", - "@metorial/storage": "^1.0.0", - "@metorial/ui": "^1.0.0", - "@metorial/ui-product": "^1.0.0", - "@radix-ui/react-dropdown-menu": "^2.1.16", - "@radix-ui/react-popover": "^1.1.15", - "@remixicon/react": "^4.2.0", - "@sentry/react": "^8.54.0", - "@tanstack/react-virtual": "^3.13.12", - "@tiptap/extension-color": "^3.6.1", - "@tiptap/extension-highlight": "^3.6.1", - "@tiptap/extension-horizontal-rule": "^3.6.1", - "@tiptap/extension-image": "^3.6.1", - "@tiptap/extension-list": "^3.6.1", - "@tiptap/extension-placeholder": "^3.6.1", - "@tiptap/extension-subscript": "^3.6.1", - "@tiptap/extension-superscript": "^3.6.1", - "@tiptap/extension-text-align": "^3.6.1", - "@tiptap/extension-text-style": "^3.6.1", - "@tiptap/extension-typography": "^3.6.1", - "@tiptap/extensions": "^3.6.1", - "@tiptap/pm": "^3.6.1", - "@tiptap/react": "^3.6.1", - "@tiptap/starter-kit": "^3.6.1", - "@types/lodash": "^4.17.10", - "@types/react-dom": "^19.0.4", - "@types/react-helmet": "^6.1.11", - "@visual-json/core": "^0.4.0", - "@visual-json/react": "^0.4.0", - "ansi-to-react": "^6.1.6", - "copy-to-clipboard": "^3.3.3", - "date-fns": "^3.6.0", - "dedent": "^1.6.0", - "framer-motion": "^11.5.4", - "json-schema": "^0.4.0", - "lodash": "^4.17.21", - "lodash.throttle": "^4.1.1", - "nanoid": "^5.0.7", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "react-helmet": "^6.1.0", - "react-hotkeys-hook": "^5.1.0", - "react-markdown": "^9.0.1", - "react-router-dom": "^6.26.1", - "react-textarea-autosize": "^8.5.9", - "react-trend": "^1.2.5", - "react-use": "^17.5.1", - "remark-gfm": "^4.0.1", - "styled-components": "^6.1.13", - "tiptap-markdown": "^0.9.0", - }, - "devDependencies": { - "@sentry/vite-plugin": "^3.1.1", - "@types/lodash.throttle": "^4.1.9", - "@types/react": "^19.0.8", - "@vitejs/plugin-react": "4.3.1", - "babel-plugin-styled-components": "^2.1.4", - "sass-embedded": "^1.93.2", - "typescript": "^5.5.3", - "vite": "5.4.21", - "vite-plugin-html": "^3.2.2", - }, - }, - "src/frontend/apps/explorer": { - "name": "@metorial/explorer", - "version": "1.0.0", - "dependencies": { - "@metorial/ui": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.19.1", - "@remixicon/react": "^4.2.0", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "formik": "^2.4.6", - "framer-motion": "^12.35.0", - "json-schema": "^0.4.0", - "react": "19.1.1", - "react-dom": "19.1.1", - "react-markdown": "^10.1.0", - "styled-components": "^6.1.13", - }, - "devDependencies": { - "@sentry/vite-plugin": "^3.1.1", - "@types/lodash.throttle": "^4.1.9", - "@types/react": "^19.0.8", - "@vitejs/plugin-react": "4.3.1", - "babel-plugin-styled-components": "^2.1.4", - "sass-embedded": "^1.93.2", - "typescript": "^5.5.3", - "vite": "5.4.21", - "vite-plugin-html": "^3.2.2", + "@mtsrc/id": "1.0.0", + "slugify": "^1.6.6", }, - }, - "src/frontend/config": { - "name": "@metorial/frontend-config", - "version": "1.0.0", "devDependencies": { - "@lowerdeck/join-paths": "^1.0.4", - "@lowerdeck/programmable-promise": "^1.0.6", - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/frontend/layout": { - "name": "@metorial/layout", + "src/_shared/util/snowflake": { + "name": "@mtsrc/snowflake", "version": "1.0.0", - "dependencies": { - "@metorial/data-hooks": "^1.0.0", - "@metorial/frontend-config": "^1.0.0", - "@metorial/state": "^1.0.0", - "@metorial/ui": "^1.0.0", - "@radix-ui/react-popover": "^1.1.13", - "@remixicon/react": "^4.6.0", - "clsx": "^2.1.1", - "framer-motion": "^12.12.1", - "react": "^19.1.0", - "react-router-dom": "^6.26.1", - "react-use": "^17.6.0", - "styled-components": "^6.1.13", - }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", + "@metorial/tsconfig": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/frontend/scenes/assistant": { - "name": "@metorial/scene-assistant", + "src/_shared/util/timezone": { + "name": "@mtsrc/timezone", "version": "1.0.0", - "dependencies": { - "@metorial/code": "^1.0.0", - "@metorial/data-hooks": "^1.0.0", - "@metorial/dynamic-component": "^1.0.0", - "@metorial/frontend-config": "^1.0.0", - "@metorial/state": "^1.0.0", - "@metorial/ui": "^1.0.0", - "@radix-ui/react-popover": "^1.1.13", - "@remixicon/react": "^4.6.0", - "clsx": "^2.1.1", - "framer-motion": "^12.12.1", - "react": "^19.1.0", - "react-markdown": "^9.0.1", - "react-router-dom": "^6.26.1", - "react-textarea-autosize": "^8.5.9", - "react-use": "^17.6.0", - "remark-gfm": "^4.0.1", - "styled-components": "^6.1.13", - }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/frontend/scenes/docs": { - "name": "@metorial/scene-docs", + "src/_shared/util/unique": { + "name": "@mtsrc/unique", "version": "1.0.0", - "dependencies": { - "@metorial/code": "^1.0.0", - "@metorial/data-hooks": "^1.0.0", - "@metorial/dynamic-component": "^1.0.0", - "@metorial/frontend-config": "^1.0.0", - "@metorial/state": "^1.0.0", - "@metorial/ui": "^1.0.0", - "@radix-ui/react-popover": "^1.1.13", - "@remixicon/react": "^4.6.0", - "@tiptap/core": "3.6.1", - "@tiptap/extension-character-count": "3.6.1", - "@tiptap/extension-code-block-lowlight": "3.6.1", - "@tiptap/extension-collaboration": "3.6.1", - "@tiptap/extension-drag-handle": "3.6.1", - "@tiptap/extension-drag-handle-react": "3.6.1", - "@tiptap/extension-heading": "3.6.1", - "@tiptap/extension-highlight": "3.6.1", - "@tiptap/extension-image": "3.6.1", - "@tiptap/extension-node-range": "3.6.1", - "@tiptap/extension-placeholder": "3.6.1", - "@tiptap/extension-subscript": "3.6.1", - "@tiptap/extension-superscript": "3.6.1", - "@tiptap/extension-table": "3.6.1", - "@tiptap/extension-table-cell": "3.6.1", - "@tiptap/extension-table-header": "3.6.1", - "@tiptap/extension-table-row": "3.6.1", - "@tiptap/extension-task-item": "3.6.1", - "@tiptap/extension-task-list": "3.6.1", - "@tiptap/extension-text-align": "3.6.1", - "@tiptap/extension-typography": "3.6.1", - "@tiptap/pm": "3.6.1", - "@tiptap/react": "3.6.1", - "@tiptap/starter-kit": "3.6.1", - "@tiptap/suggestion": "3.6.1", - "clsx": "^2.1.1", - "diff": "^9.0.0", - "dompurify": "^3.4.2", - "framer-motion": "^12.12.1", - "katex": "^0.16.45", - "lowlight": "^3.3.0", - "marked": "^18.0.3", - "mermaid": "^11.14.0", - "react": "^19.1.0", - "react-markdown": "^9.0.1", - "react-router-dom": "^6.26.1", - "react-textarea-autosize": "^8.5.9", - "react-use": "^17.6.0", - "remark-gfm": "^4.0.1", - "styled-components": "^6.1.13", - "tiptap-markdown": "^0.9.0", - "yaml": "^2.9.0", - }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "@types/diff": "^7.0.2", - "typescript": "5.8.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/frontend/scenes/skills": { - "name": "@metorial/scene-skills", + "src/_shared/util/validation": { + "name": "@mtsrc/validation", "version": "1.0.0", - "dependencies": { - "@metorial/code": "^1.0.0", - "@metorial/data-hooks": "^1.0.0", - "@metorial/dynamic-component": "^1.0.0", - "@metorial/frontend-config": "^1.0.0", - "@metorial/layout": "^1.0.0", - "@metorial/state": "^1.0.0", - "@metorial/ui": "^1.0.0", - "@metorial/ui-product": "^1.0.0", - "@radix-ui/react-dialog": "^1.1.11", - "@radix-ui/react-popover": "^1.1.13", - "@remixicon/react": "^4.6.0", - "clsx": "^2.1.1", - "framer-motion": "^12.12.1", - "pdfjs-dist": "^5.7.284", - "react": "^19.1.0", - "react-avatar-editor": "^13.0.2", - "react-dropzone": "^14.3.8", - "react-markdown": "^9.0.1", - "react-router-dom": "^6.26.1", - "react-textarea-autosize": "^8.5.9", - "react-use": "^17.6.0", - "remark-gfm": "^4.0.1", - "styled-components": "^6.1.13", - }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "@types/react-avatar-editor": "^13.0.4", - "typescript": "5.8.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/frontend/state": { - "name": "@metorial/state", + "src/_shared/util/websocket-client": { + "name": "@mtsrc/websocket-client", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/sentry": "^1.0.2", - "@metorial-platform-systems/synthesis-client": "1.0.0", - "@metorial/dashboard-sdk": "1.0.0-internal", - "@metorial/data-hooks": "^1.0.0", - "@metorial/frontend-config": "^1.0.0", - "@metorial/generated": "latest", - "@metorial/storage": "^1.0.0", - "@metorial/util-endpoint": "^1.0.0-rc.5", - "react": "^19.1.0", - "react-router-dom": "^6.26.1", + "@mtsrc/emitter": "1.0.0", }, "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/packages/backend/cache": { - "name": "@metorial/cache", + "src/backend/apis/auth": { + "name": "@metorial/api-auth", "version": "1.0.0", "dependencies": { - "@lowerdeck/cache": "^1.0.2", + "@metorial/auth": "^1.0.0", + "@metorial/context": "^1.0.0", + "@metorial/module-user": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1081,28 +752,51 @@ "vitest": "^3.1.2", }, }, - "src/packages/backend/consumer-auth": { - "name": "@metorial/consumer-auth", + "src/backend/apis/connection": { + "name": "@metorial/api-connection", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "1.2.3", - "@lowerdeck/tokens": "^1.0.5", - "@metorial-platform-systems/ares-client": "^1.0.0", - "@metorial/config": "1.0.0", - "@metorial/db": "1.0.0", - }, - "devDependencies": { - "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@metorial/bearer": "^1.0.0", + "@metorial/config": "^1.0.0", + "@metorial/context": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/mcp-utils": "^1.0.0", + "@metorial/module-access": "^1.0.0", + "@metorial/module-magic": "^1.0.0", + "@metorial/module-protect": "^1.0.0", + "@metorial/module-subspace": "1.0.0", + "@metorial/rest": "^1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/hono": "1.0.0", + "hono": "^4.0.0", }, }, - "src/packages/backend/cron": { - "name": "@metorial/cron", + "src/backend/apis/core": { + "name": "@metorial/api-core", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@metorial/queue": "^1.0.0", + "@metorial/auth": "^1.0.0", + "@metorial/config": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/module-access": "^1.0.0", + "@metorial/module-assistant": "^1.0.0", + "@metorial/module-consumer": "^1.0.0", + "@metorial/module-file": "^1.0.0", + "@metorial/module-machine-access": "^1.0.0", + "@metorial/module-magic": "^1.0.0", + "@metorial/module-organization": "^1.0.0", + "@metorial/module-usage": "^1.0.0", + "@metorial/module-user": "^1.0.0", + "@metorial/presenter": "^1.0.0", + "@metorial/rest": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1110,27 +804,39 @@ "vitest": "^3.1.2", }, }, - "src/packages/backend/event": { - "name": "@metorial/event", + "src/backend/apis/custom-portal": { + "name": "@metorial/api-custom-portal", "version": "1.0.0", "dependencies": { - "@lowerdeck/memo": "^1.0.4", - "@metorial/redis": "^1.0.0", - "p-queue": "^8.0.1", + "@metorial/config": "1.0.0", + "@metorial/db": "1.0.0", + "@metorial/module-consumer": "1.0.0", + "@metorial/rpc": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", + "@mtsrc/serialize": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/packages/backend/fabric": { - "name": "@metorial/fabric", + "src/backend/apis/files": { + "name": "@metorial/api-files", "version": "1.0.0", "dependencies": { - "@lowerdeck/emitter": "^1.0.4", - "@metorial/context": "^1.0.0", - "@metorial/db": "^1.0.0", + "@metorial/auth": "^1.0.0", + "@metorial/config": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/module-access": "^1.0.0", + "@metorial/module-file": "^1.0.0", + "@metorial/module-organization": "^1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/hono": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1138,14 +844,16 @@ "vitest": "^3.1.2", }, }, - "src/packages/backend/lock": { - "name": "@metorial/lock", + "src/backend/apis/oauth": { + "name": "@metorial/api-oauth", "version": "1.0.0", "dependencies": { - "@lowerdeck/lock": "^1.0.6", - "@metorial/redis": "^1.0.0", - "@types/bun": "^1.2.11", - "superjson": "^2.2.5", + "@metorial/config": "^1.0.0", + "@metorial/context": "^1.0.0", + "@metorial/module-machine-access": "^1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1153,11 +861,28 @@ "vitest": "^3.1.2", }, }, - "src/packages/backend/logging": { - "name": "@metorial/logging", + "src/backend/apps/api": { + "name": "@metorial/app-api", "version": "1.0.0", "dependencies": { - "@axiomhq/js": "^1.3.1", + "@metorial/api-auth": "1.0.0", + "@metorial/api-connection": "1.0.0", + "@metorial/api-core": "1.0.0", + "@metorial/api-custom-portal": "1.0.0", + "@metorial/api-files": "1.0.0", + "@metorial/auth": "1.0.0", + "@metorial/logging": "1.0.0", + "@metorial/module-access": "1.0.0", + "@metorial/module-email": "1.0.0", + "@metorial/module-event": "1.0.0", + "@metorial/module-file": "1.0.0", + "@metorial/module-machine-access": "1.0.0", + "@metorial/module-organization": "1.0.0", + "@metorial/module-usage": "1.0.0", + "@metorial/module-user": "1.0.0", + "@metorial/queue": "1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@vercel/ncc": "^0.38.4", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1165,55 +890,56 @@ "vitest": "^3.1.2", }, }, - "src/packages/backend/queue": { - "name": "@metorial/queue", + "src/backend/auth": { + "name": "@metorial/auth", "version": "1.0.0", "dependencies": { - "@lowerdeck/queue": "^1.0.11", - "@metorial/config": "^1.0.0", + "@metorial/bearer": "1.0.0", + "@metorial/config": "1.0.0", + "@metorial/context": "1.0.0", + "@metorial/module-access": "1.0.0", + "@metorial/module-flags": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "cookie": "^1.0.2", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", + "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/packages/backend/redis": { - "name": "@metorial/redis", + "src/backend/config": { + "name": "@metorial/config", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/random-number": "^1.0.4", - "@lowerdeck/serialize": "^1.0.4", - "@metorial/config": "^1.0.0", - "@metorial/id": "^1.0.0", - "bullmq": "^5.34.3", - "mitt": "^3.0.1", - "nanoid": "^5.0.7", - "p-queue": "^8.0.1", - "redis": "^5.6.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", - "typescript": "5.8.2", + "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/packages/backend/rpc": { - "name": "@metorial/rpc", + "src/backend/db": { + "name": "@metorial/db", "version": "1.0.0", "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/memo": "^1.0.4", - "@lowerdeck/proxy": "^1.0.4", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/validation": "^1.0.10", "@metorial/id": "^1.0.0", - "@sentry/core": "^8.22.0", - "cookie": "^1.0.2", + "@modelcontextprotocol/sdk": "^1.11.4", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@prisma/adapter-pg": "6.19.0", + "@prisma/client": "^7.4.1", + "@prisma/extension-read-replicas": "^0.5.0", + "@types/json-schema": "^7.0.15", + "json-schema": "^0.4.0", + "lru-cache": "^11.1.0", + "p-queue": "^8.1.0", + "prisma": "^7.4.1", + "prisma-json-types-generator": "^4.1.1", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1221,14 +947,18 @@ "vitest": "^3.1.2", }, }, - "src/packages/frontend/chart": { - "name": "@metorial/chart", + "src/backend/internal-clients": { + "name": "@metorial/internal-clients", "version": "1.0.0", "dependencies": { - "@metorial/ui": "^1.0.0", - "apexcharts": "^4.7.0", - "react": "^19.1.0", - "react-apexcharts": "^1.7.0", + "@metorial-platform-systems/cargo-client": "1.0.0", + "@metorial-platform-systems/subspace-client": "1.0.0", + "@metorial-platform-systems/synthesis-client": "1.0.0", + "@metorial/db": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1236,16 +966,22 @@ "vitest": "^3.1.2", }, }, - "src/packages/frontend/code": { - "name": "@metorial/code", + "src/backend/modules/access": { + "name": "@metorial/module-access", "version": "1.0.0", "dependencies": { - "@metorial/dynamic-component": "^1.0.0", - "@metorial/ui": "^1.0.0", - "prism-react-renderer": "^2.4.1", - "react": "^19.0.0", - "react-use": "^17.5.1", - "styled-components": "^6.1.13", + "@metorial/api-keys": "1.0.0", + "@metorial/config": "1.0.0", + "@metorial/consumer-auth": "1.0.0", + "@metorial/context": "1.0.0", + "@metorial/db": "1.0.0", + "@metorial/module-machine-access": "1.0.0", + "@metorial/module-organization": "1.0.0", + "@metorial/module-user": "1.0.0", + "@metorial/queue": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/service": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1253,40 +989,56 @@ "vitest": "^3.1.2", }, }, - "src/packages/frontend/code-editor": { - "name": "@metorial/code-editor", + "src/backend/modules/assistant": { + "name": "@metorial/module-assistant", "version": "1.0.0", "dependencies": { - "@codemirror/autocomplete": "^6.9.0", - "@codemirror/lang-javascript": "^6.1.9", - "@codemirror/lang-json": "^6.0.1", - "@codemirror/language": "^6.8.0", - "@lezer/highlight": "^1.1.6", - "@lezer/lr": "^1.3.9", - "@metorial/ui": "^1.0.0", - "@uiw/codemirror-themes": "^4.21.8", - "@uiw/react-codemirror": "^4.21.8", - "clsx": "^2.0.0", - "react": "^19.0.0", + "@ai-sdk/anthropic": "^3.0.75", + "@ai-sdk/google": "^3.0.68", + "@ai-sdk/openai": "^3.0.62", + "@ai-sdk/xai": "^3.0.88", + "@metorial-platform-systems/synthesis-client": "1.0.0", + "@metorial-services/scout-client": "^1.0.0", + "@metorial/api-keys": "1.0.0", + "@metorial/config": "1.0.0", + "@metorial/consumer-auth": "1.0.0", + "@metorial/context": "1.0.0", + "@metorial/db": "1.0.0", + "@metorial/internal-clients": "1.0.0", + "@metorial/module-machine-access": "1.0.0", + "@metorial/module-organization": "1.0.0", + "@metorial/module-user": "1.0.0", + "@metorial/queue": "1.0.0", + "@metorial/redis": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/service": "1.0.0", + "@openharness/core": "^0.6.2", + "ai": "^6.0.175", + "just-bash": "^2.14.4", + "zod": "^4.4.3", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", - "tsup": "^7.1.0", - "typescript": "^5.1.6", - "vitest": "^0.34.6", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/packages/frontend/data-hooks": { - "name": "@metorial/data-hooks", + "src/backend/modules/community": { + "name": "@metorial/module-community", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/memo": "1.0.4", - "@metorial/ui": "1.0.0", - "formik": "^2.4.6", - "react": "^19.1.0", - "react-router-dom": "^6.26.1", - "yup": "^1.4.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@types/fs-extra": "^11.0.4", + "fs-extra": "^11.3.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1294,12 +1046,30 @@ "vitest": "^3.1.2", }, }, - "src/packages/frontend/dynamic-component": { - "name": "@metorial/dynamic-component", + "src/backend/modules/consumer": { + "name": "@metorial/module-consumer", "version": "1.0.0", "dependencies": { - "@metorial/ui": "^1.0.0", - "p-queue": "^8.1.0", + "@metorial-platform-systems/ares-client": "^1.0.0", + "@metorial/config": "1.0.0", + "@metorial/consumer-auth": "1.0.0", + "@metorial/context": "1.0.0", + "@metorial/db": "1.0.0", + "@metorial/module-access": "1.0.0", + "@metorial/module-file": "1.0.0", + "@metorial/module-machine-access": "1.0.0", + "@metorial/module-magic": "1.0.0", + "@metorial/module-organization": "1.0.0", + "@metorial/module-search": "^1.0.0", + "@metorial/module-subspace": "1.0.0", + "@metorial/queue": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/tokens": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1307,19 +1077,15 @@ "vitest": "^3.1.2", }, }, - "src/packages/frontend/markdown": { - "name": "@metorial/markdown", + "src/backend/modules/email": { + "name": "@metorial/module-email", "version": "1.0.0", "dependencies": { - "@looped/hooks": "^0.1.3", - "@metorial/ui": "^1.0.0", - "apexcharts": "^4.7.0", - "react": "^19.1.0", - "react-apexcharts": "^1.7.0", - "react-markdown": "^10.1.0", - "react-medium-image-zoom": "^5.2.14", - "remark-gfm": "^4.0.1", - "striptags": "^3.2.0", + "@metorial-platform-systems/relay-client": "workspace:*", + "@metorial/db": "^1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/service": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1327,12 +1093,18 @@ "vitest": "^3.1.2", }, }, - "src/packages/frontend/microfrontend": { - "name": "@metorial/microfrontend", + "src/backend/modules/event": { + "name": "@metorial/module-event", "version": "1.0.0", "dependencies": { - "@metorial/ui": "^1.0.0", - "p-queue": "^8.1.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1340,13 +1112,24 @@ "vitest": "^3.1.2", }, }, - "src/packages/frontend/pages": { - "name": "@metorial/pages", + "src/backend/modules/file": { + "name": "@metorial/module-file", "version": "1.0.0", "dependencies": { - "react": "^19.1.0", - "react-wrap-balancer": "^1.1.1", - "styled-components": "^6.1.13", + "@aws-sdk/client-s3": "^3.808.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial/config": "^1.0.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/internal-clients": "1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1354,11 +1137,18 @@ "vitest": "^3.1.2", }, }, - "src/packages/frontend/storage": { - "name": "@metorial/storage", + "src/backend/modules/flags": { + "name": "@metorial/module-flags", "version": "1.0.0", "dependencies": { - "idb": "^8.0.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1366,60 +1156,26 @@ "vitest": "^3.1.2", }, }, - "src/packages/frontend/ui": { - "name": "@metorial/ui", + "src/backend/modules/machine-access": { + "name": "@metorial/module-machine-access", "version": "1.0.0", "dependencies": { - "@base-ui/react": "^1.3.0", - "@dnd-kit/core": "^6.3.1", - "@dnd-kit/sortable": "^10.0.0", - "@dnd-kit/utilities": "^3.2.2", - "@looped/hooks": "^0.1.3", - "@lowerdeck/memo": "^1.0.4", - "@radix-ui/react-accordion": "^1.2.8", - "@radix-ui/react-alert-dialog": "^1.1.11", - "@radix-ui/react-checkbox": "^1.2.3", - "@radix-ui/react-dialog": "^1.1.11", - "@radix-ui/react-dropdown-menu": "^2.1.12", - "@radix-ui/react-popover": "^1.1.11", - "@radix-ui/react-select": "^2.2.2", - "@radix-ui/react-slider": "^1.3.2", - "@radix-ui/react-switch": "^1.2.2", - "@radix-ui/react-toggle-group": "^1.1.7", - "@radix-ui/react-tooltip": "^1.2.4", - "@radix-ui/react-visually-hidden": "^1.2.0", - "@remixicon/react": "^4.6.0", - "clsx": "^2.1.1", - "copy-to-clipboard": "^3.3.3", + "@metorial/api-keys": "^1.0.0", + "@metorial/config": "^1.0.0", + "@metorial/context": "^1.0.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/module-organization": "^1.0.0", + "@metorial/multi-region": "^1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", "date-fns": "^4.1.0", - "framer-motion": "^12.9.4", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "react-feather": "^2.0.10", - "react-textarea-autosize": "^8.5.9", - "react-use": "^17.6.0", - "react-wrap-balancer": "^1.1.1", - "shleemy": "^1.2.2", - "sonner": "^2.0.3", - "styled-components": "^6.1.13", - "use-delayed": "^0.1.0", - }, - "devDependencies": { - "esbuild-plugin-styled-components": "^3.0.1", - "tsup": "^8.4.0", - "typescript": "^5.8.3", - }, - }, - "src/packages/frontend/ui-product": { - "name": "@metorial/ui-product", - "version": "1.0.0", - "dependencies": { - "@metorial/ui": "^1.0.0", - "@remixicon/react": "^4.2.0", - "copy-to-clipboard": "^3.3.3", - "react": "^19.0.0", - "react-use": "^17.5.1", - "styled-components": "^6.1.13", + "ipaddr.js": "^2.2.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1427,20 +1183,71 @@ "vitest": "^3.1.2", }, }, - "src/packages/mcp/mcp-utils": { - "name": "@metorial/mcp-utils", + "src/backend/modules/magic": { + "name": "@metorial/module-magic", "version": "1.0.0", + "dependencies": { + "@metorial/api-keys": "^1.0.0", + "@metorial/config": "^1.0.0", + "@metorial/context": "^1.0.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/mcp-utils": "1.0.0", + "@metorial/module-event": "1.0.0", + "@metorial/module-search": "^1.0.0", + "@metorial/module-subspace": "1.0.0", + "@metorial/queue": "^1.0.0", + "@metorial/redis": "1.0.0", + "@metorial/unified-id": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "ajv": "^8.17.1", + "date-fns": "^4.1.0", + "mitt": "^3.0.1", + "mongoose": "^8.14.2", + "redis": "^5.6.0", + }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/packages/mcp/unified-id": { - "name": "@metorial/unified-id", + "src/backend/modules/markdown": { + "name": "@metorial/module-markdown", "version": "1.0.0", "dependencies": { - "@metorial/mcp-utils": "^1.0.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0", + "date-fns": "^4.1.0", + "mongoose": "^8.14.2", + "rehype-parse": "^9.0.1", + "rehype-raw": "^7.0.0", + "rehype-remark": "^10.0.1", + "rehype-sanitize": "^6.0.0", + "rehype-stringify": "^10.0.1", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-stringify": "^11.0.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1448,11 +1255,27 @@ "vitest": "^3.1.2", }, }, - "src/packages/server/api-keys": { - "name": "@metorial/api-keys", + "src/backend/modules/organization": { + "name": "@metorial/module-organization", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", + "@metorial/config": "^1.0.0", + "@metorial/context": "^1.0.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/internal-clients": "^1.0.0", + "@metorial/module-email": "^1.0.0", + "@metorial/module-file": "^1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "date-fns": "^4.1.0", + "react": "^19.1.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1460,20 +1283,32 @@ "vitest": "^3.1.2", }, }, - "src/packages/server/bearer": { - "name": "@metorial/bearer", + "src/backend/modules/protect": { + "name": "@metorial/module-protect", "version": "1.0.0", + "dependencies": { + "@metorial/context": "1.0.0", + "@metorial/db": "1.0.0", + "@metorial/module-machine-access": "1.0.0", + "@metorial/module-organization": "1.0.0", + "@metorial/module-user": "1.0.0", + "@metorial/queue": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/service": "1.0.0", + }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/packages/server/context": { - "name": "@metorial/context", + "src/backend/modules/search": { + "name": "@metorial/module-search", "version": "1.0.0", "dependencies": { - "@metorial/db": "^1.0.0", + "@metorial-platform-systems/voyager-client": "workspace:*", + "@mtsrc/env": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1481,23 +1316,48 @@ "vitest": "^3.1.2", }, }, - "src/packages/server/presenter": { - "name": "@metorial/presenter", + "src/backend/modules/subspace": { + "name": "@metorial/module-subspace", "version": "1.0.0", + "dependencies": { + "@metorial-platform-systems/subspace-client": "^1.0.0", + "@metorial/context": "1.0.0", + "@metorial/db": "1.0.0", + "@metorial/internal-clients": "1.0.0", + "@metorial/module-access": "1.0.0", + "@metorial/module-machine-access": "1.0.0", + "@metorial/module-organization": "1.0.0", + "@metorial/module-usage": "1.0.0", + "@metorial/module-user": "1.0.0", + "@metorial/queue": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", + "@mtsrc/rpc-server": "1.0.0", "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/packages/server/rest": { - "name": "@metorial/rest", + "src/backend/modules/usage": { + "name": "@metorial/module-usage", "version": "1.0.0", "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@types/qs": "^6.9.18", - "async-ratelimiter": "^1.3.13", - "qs": "^6.14.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0", + "date-fns": "^4.1.0", + "mongoose": "^8.14.2", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", @@ -1505,10900 +1365,12857 @@ "vitest": "^3.1.2", }, }, - "src/packages/shared/debug": { - "name": "@metorial/debug", + "src/backend/modules/user": { + "name": "@metorial/module-user", "version": "1.0.0", + "dependencies": { + "@metorial/context": "^1.0.0", + "@metorial/cron": "^1.0.0", + "@metorial/db": "^1.0.0", + "@metorial/fabric": "^1.0.0", + "@metorial/id": "^1.0.0", + "@metorial/module-file": "^1.0.0", + "@metorial/queue": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/service": "1.0.0", + }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", - "typescript": "^5.8.3", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/packages/shared/id": { - "name": "@metorial/id", + "src/backend/multi-region": { + "name": "@metorial/multi-region", "version": "1.0.0", "dependencies": { - "@lowerdeck/base62": "^1.0.4", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/snowflake": "^1.0.2", - "nanoid": "^5.0.7", - "short-uuid": "^5.2.0", + "@aws-sdk/rds-signer": "^3.1018.0", + "@metorial/cache": "^1.0.0", + "@metorial/context": "^1.0.0", + "@metorial/cron": "^1.0.0", + "@metorial/id": "^1.0.0", + "@mtsrc/base62": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "6.19.0", + "@prisma/client": "^7.4.1", + "@prisma/extension-read-replicas": "^0.5.0", + "@types/bun": "^1.2.12", + "@types/pg": "^8.11.11", + "pg": "^8.11.3", + "prisma": "^7.4.1", + "prisma-json-types-generator": "^4.1.1", + "stripe": "^18.5.0", + "typescript": "^5.8.3", }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", - "typescript": "^5.8.3", - "vitest": "^3.1.2", + "@types/bun": "^1.1.6", + "typescript": "^5.1.6", }, }, - "src/packages/shared/tsconfig": { - "name": "@metorial/tsconfig", - "version": "1.0.0", - "dependencies": { - "@types/node": "^22.15.3", - }, - }, - "src/systems/_clients/ares": { - "name": "@metorial-platform-systems/ares-client", + "src/frontend/apps/dashboard": { + "name": "@metorial/app-dashboard", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", + "@floating-ui/react": "^0.27.16", + "@metorial-platform-systems/synthesis-client": "1.0.0", + "@metorial/chart": "^1.0.0", + "@metorial/code-editor": "^1.0.0", + "@metorial/dashboard-sdk": "1.0.0-internal", + "@metorial/data-hooks": "^1.0.0", + "@metorial/frontend-config": "^1.0.0", + "@metorial/layout": "^1.0.0", + "@metorial/microfrontend": "^1.0.0", + "@metorial/pages": "^1.0.0", + "@metorial/scene-docs": "^1.0.0", + "@metorial/state": "^1.0.0", + "@metorial/storage": "^1.0.0", + "@metorial/ui": "^1.0.0", + "@metorial/ui-product": "^1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/case": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-popover": "^1.1.15", + "@remixicon/react": "^4.2.0", + "@sentry/react": "^8.54.0", + "@tanstack/react-virtual": "^3.13.12", + "@tiptap/extension-color": "^3.6.1", + "@tiptap/extension-highlight": "^3.6.1", + "@tiptap/extension-horizontal-rule": "^3.6.1", + "@tiptap/extension-image": "^3.6.1", + "@tiptap/extension-list": "^3.6.1", + "@tiptap/extension-placeholder": "^3.6.1", + "@tiptap/extension-subscript": "^3.6.1", + "@tiptap/extension-superscript": "^3.6.1", + "@tiptap/extension-text-align": "^3.6.1", + "@tiptap/extension-text-style": "^3.6.1", + "@tiptap/extension-typography": "^3.6.1", + "@tiptap/extensions": "^3.6.1", + "@tiptap/pm": "^3.6.1", + "@tiptap/react": "^3.6.1", + "@tiptap/starter-kit": "^3.6.1", + "@types/lodash": "^4.17.10", + "@types/react-dom": "^19.0.4", + "@types/react-helmet": "^6.1.11", + "@visual-json/core": "^0.4.0", + "@visual-json/react": "^0.4.0", + "ansi-to-react": "^6.1.6", + "copy-to-clipboard": "^3.3.3", + "date-fns": "^3.6.0", + "dedent": "^1.6.0", + "framer-motion": "^11.5.4", + "json-schema": "^0.4.0", + "lodash": "^4.17.21", + "lodash.throttle": "^4.1.1", + "nanoid": "^5.0.7", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-helmet": "^6.1.0", + "react-hotkeys-hook": "^5.1.0", + "react-markdown": "^9.0.1", + "react-router-dom": "^6.26.1", + "react-textarea-autosize": "^8.5.9", + "react-trend": "^1.2.5", + "react-use": "^17.5.1", + "remark-gfm": "^4.0.1", + "styled-components": "^6.1.13", + "tiptap-markdown": "^0.9.0", }, "devDependencies": { - "tsup": "^8.5.1", - "typescript": "^5.8.3", - "vitest": "^3.1.2", + "@sentry/vite-plugin": "^3.1.1", + "@types/lodash.throttle": "^4.1.9", + "@types/react": "^19.0.8", + "@vitejs/plugin-react": "4.3.1", + "babel-plugin-styled-components": "^2.1.4", + "sass-embedded": "^1.93.2", + "typescript": "^5.5.3", + "vite": "5.4.21", + "vite-plugin-html": "^3.2.2", }, }, - "src/systems/_clients/cargo": { - "name": "@metorial-platform-systems/cargo-client", + "src/frontend/apps/explorer": { + "name": "@metorial/explorer", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@types/bun": "^1.3.7", - }, - "devDependencies": { - "@types/minimatch": "^5", - "tsup": "^8.5.1", - "typescript": "^5.8.3", - "vitest": "^3.1.2", - }, - }, - "src/systems/_clients/forge": { - "name": "@metorial-platform-systems/forge-client", - "version": "1.0.4", - "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10", - "@metorial/util-websocket": "^1.0.0", - "@types/bun": "^1.3.7", + "@metorial/ui": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.19.1", + "@remixicon/react": "^4.2.0", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "formik": "^2.4.6", + "framer-motion": "^12.35.0", + "json-schema": "^0.4.0", + "react": "19.1.1", + "react-dom": "19.1.1", + "react-markdown": "^10.1.0", + "styled-components": "^6.1.13", }, "devDependencies": { - "@types/minimatch": "^5", - "tsup": "^8.5.1", - "typescript": "^5.8.3", - "vitest": "^3.1.2", + "@sentry/vite-plugin": "^3.1.1", + "@types/lodash.throttle": "^4.1.9", + "@types/react": "^19.0.8", + "@vitejs/plugin-react": "4.3.1", + "babel-plugin-styled-components": "^2.1.4", + "sass-embedded": "^1.93.2", + "typescript": "^5.5.3", + "vite": "5.4.21", + "vite-plugin-html": "^3.2.2", }, }, - "src/systems/_clients/function-bay": { - "name": "@metorial-platform-systems/function-bay-client", + "src/frontend/config": { + "name": "@metorial/frontend-config", "version": "1.0.0", - "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - }, "devDependencies": { - "@types/minimatch": "^5", - "tsup": "^8.5.1", - "typescript": "^5.8.3", + "@metorial/tsconfig": "^1.0.0", + "@mtsrc/join-paths": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/_clients/object-storage": { - "name": "@metorial-platform-systems/object-storage-client", + "src/frontend/layout": { + "name": "@metorial/layout", "version": "1.0.0", "dependencies": { - "axios": "^1.6.0", + "@metorial/data-hooks": "^1.0.0", + "@metorial/frontend-config": "^1.0.0", + "@metorial/state": "^1.0.0", + "@metorial/ui": "^1.0.0", + "@radix-ui/react-popover": "^1.1.13", + "@remixicon/react": "^4.6.0", + "clsx": "^2.1.1", + "framer-motion": "^12.12.1", + "react": "^19.1.0", + "react-router-dom": "^6.26.1", + "react-use": "^17.6.0", + "styled-components": "^6.1.13", }, "devDependencies": { - "axios-mock-adapter": "^1.22.0", - "tsup": "^8.5.1", - "typescript": "^5.8.3", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/_clients/origin-client": { - "name": "@metorial-platform-systems/origin-client", + "src/frontend/scenes/assistant": { + "name": "@metorial/scene-assistant", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", + "@metorial/code": "^1.0.0", + "@metorial/data-hooks": "^1.0.0", + "@metorial/dynamic-component": "^1.0.0", + "@metorial/frontend-config": "^1.0.0", + "@metorial/state": "^1.0.0", + "@metorial/ui": "^1.0.0", + "@radix-ui/react-popover": "^1.1.13", + "@remixicon/react": "^4.6.0", + "clsx": "^2.1.1", + "framer-motion": "^12.12.1", + "react": "^19.1.0", + "react-markdown": "^9.0.1", + "react-router-dom": "^6.26.1", + "react-textarea-autosize": "^8.5.9", + "react-use": "^17.6.0", + "remark-gfm": "^4.0.1", + "styled-components": "^6.1.13", }, "devDependencies": { - "@types/node": "^25.0.3", - "dts-bundle-generator": "^9.5.1", - "microbundle": "^0.15.1", - "typescript": "^5.8.3", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/_clients/relay": { - "name": "@metorial-platform-systems/relay-client", + "src/frontend/scenes/docs": { + "name": "@metorial/scene-docs", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@react-email/components": "^1.0.7", - "react": "^19.2.4", + "@metorial/code": "^1.0.0", + "@metorial/data-hooks": "^1.0.0", + "@metorial/dynamic-component": "^1.0.0", + "@metorial/frontend-config": "^1.0.0", + "@metorial/state": "^1.0.0", + "@metorial/ui": "^1.0.0", + "@radix-ui/react-popover": "^1.1.13", + "@remixicon/react": "^4.6.0", + "@tiptap/core": "3.6.1", + "@tiptap/extension-character-count": "3.6.1", + "@tiptap/extension-code-block-lowlight": "3.6.1", + "@tiptap/extension-collaboration": "3.6.1", + "@tiptap/extension-drag-handle": "3.6.1", + "@tiptap/extension-drag-handle-react": "3.6.1", + "@tiptap/extension-heading": "3.6.1", + "@tiptap/extension-highlight": "3.6.1", + "@tiptap/extension-image": "3.6.1", + "@tiptap/extension-node-range": "3.6.1", + "@tiptap/extension-placeholder": "3.6.1", + "@tiptap/extension-subscript": "3.6.1", + "@tiptap/extension-superscript": "3.6.1", + "@tiptap/extension-table": "3.6.1", + "@tiptap/extension-table-cell": "3.6.1", + "@tiptap/extension-table-header": "3.6.1", + "@tiptap/extension-table-row": "3.6.1", + "@tiptap/extension-task-item": "3.6.1", + "@tiptap/extension-task-list": "3.6.1", + "@tiptap/extension-text-align": "3.6.1", + "@tiptap/extension-typography": "3.6.1", + "@tiptap/pm": "3.6.1", + "@tiptap/react": "3.6.1", + "@tiptap/starter-kit": "3.6.1", + "@tiptap/suggestion": "3.6.1", + "clsx": "^2.1.1", + "diff": "^9.0.0", + "dompurify": "^3.4.2", + "framer-motion": "^12.12.1", + "katex": "^0.16.45", + "lowlight": "^3.3.0", + "marked": "^18.0.3", + "mermaid": "^11.14.0", + "react": "^19.1.0", + "react-markdown": "^9.0.1", + "react-router-dom": "^6.26.1", + "react-textarea-autosize": "^8.5.9", + "react-use": "^17.6.0", + "remark-gfm": "^4.0.1", + "styled-components": "^6.1.13", + "tiptap-markdown": "^0.9.0", + "yaml": "^2.9.0", }, "devDependencies": { - "@types/react": "^19.0.0", - "tsup": "^8.5.1", - "typescript": "^5.8.3", + "@metorial/tsconfig": "^1.0.0", + "@types/diff": "^7.0.2", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/_clients/shuttle": { - "name": "@metorial-platform-systems/shuttle-client", + "src/frontend/scenes/skills": { + "name": "@metorial/scene-skills", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10", - "@metorial/util-websocket": "^1.0.0", - "@types/bun": "^1.3.7", - }, - "devDependencies": { - "@types/minimatch": "^5", - "tsup": "^8.5.1", - "typescript": "^5.8.3", + "@metorial/code": "^1.0.0", + "@metorial/data-hooks": "^1.0.0", + "@metorial/dynamic-component": "^1.0.0", + "@metorial/frontend-config": "^1.0.0", + "@metorial/layout": "^1.0.0", + "@metorial/state": "^1.0.0", + "@metorial/ui": "^1.0.0", + "@metorial/ui-product": "^1.0.0", + "@radix-ui/react-dialog": "^1.1.11", + "@radix-ui/react-popover": "^1.1.13", + "@remixicon/react": "^4.6.0", + "clsx": "^2.1.1", + "framer-motion": "^12.12.1", + "pdfjs-dist": "^5.7.284", + "react": "^19.1.0", + "react-avatar-editor": "^13.0.2", + "react-dropzone": "^14.3.8", + "react-markdown": "^9.0.1", + "react-router-dom": "^6.26.1", + "react-textarea-autosize": "^8.5.9", + "react-use": "^17.6.0", + "remark-gfm": "^4.0.1", + "styled-components": "^6.1.13", + }, + "devDependencies": { + "@metorial/tsconfig": "^1.0.0", + "@types/react-avatar-editor": "^13.0.4", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/_clients/signal": { - "name": "@metorial-platform-systems/signal-client", + "src/frontend/state": { + "name": "@metorial/state", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10", + "@metorial-platform-systems/synthesis-client": "1.0.0", + "@metorial/dashboard-sdk": "1.0.0-internal", + "@metorial/data-hooks": "^1.0.0", + "@metorial/frontend-config": "^1.0.0", + "@metorial/generated": "latest", + "@metorial/storage": "^1.0.0", + "@metorial/util-endpoint": "^1.0.0-rc.5", + "@mtsrc/error": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "react": "^19.1.0", + "react-router-dom": "^6.26.1", }, "devDependencies": { - "@types/minimatch": "^5", - "tsup": "^8.5.1", - "typescript": "^5.8.3", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/_clients/slates": { - "name": "@metorial-platform-systems/slates-client", + "src/packages/backend/cache": { + "name": "@metorial/cache", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/function-bay-client": "workspace:*", + "@mtsrc/cache": "1.0.0", }, "devDependencies": { - "@types/minimatch": "^5", - "tsup": "^8.5.1", - "typescript": "^5.8.3", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/_clients/subspace": { - "name": "@metorial-platform-systems/subspace-client", + "src/packages/backend/consumer-auth": { + "name": "@metorial/consumer-auth", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10", + "@metorial-platform-systems/ares-client": "^1.0.0", + "@metorial/config": "1.0.0", + "@metorial/db": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/tokens": "1.0.0", }, "devDependencies": { - "@types/minimatch": "^5", - "tsup": "^8.5.1", - "typescript": "^5.8.3", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/_clients/synthesis": { - "name": "@metorial-platform-systems/synthesis-client", + "src/packages/backend/cron": { + "name": "@metorial/cron", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", + "@metorial/queue": "^1.0.0", + "@mtsrc/cron": "1.0.0", }, "devDependencies": { - "@types/minimatch": "^5", - "tsup": "^8.5.1", - "typescript": "^5.8.3", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/_clients/voyager": { - "name": "@metorial-platform-systems/voyager-client", + "src/packages/backend/event": { + "name": "@metorial/event", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", + "@metorial/redis": "^1.0.0", + "@mtsrc/memo": "1.0.0", + "p-queue": "^8.0.1", }, "devDependencies": { - "tsup": "^8.5.1", - "typescript": "^5.8.3", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", "vitest": "^3.1.2", }, }, - "src/systems/ares/service": { - "name": "@metorial/ares", + "src/packages/backend/fabric": { + "name": "@metorial/fabric", + "version": "1.0.0", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.957.0", - "@aws-sdk/client-iam": "^3.957.0", - "@aws-sdk/client-lambda": "^3.958.0", - "@boxyhq/saml-jackson": "^1.52.2", - "@looped/hooks": "^0.1.3", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/event": "^1.0.3", - "@lowerdeck/forwarded-for": "^1.0.4", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/ip-info": "^1.0.4", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/tokens": "^1.0.5", - "@lowerdeck/validation": "^1.0.10", - "@marsidev/react-turnstile": "^1.4.2", - "@metorial-io/data-hooks": "^1.0.1", - "@metorial-io/layout": "^1.0.1", - "@metorial-io/pages": "^1.0.0", - "@metorial-io/ui": "^1.0.0", - "@metorial-io/ui-product": "^1.0.0", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@metorial-platform-systems/relay-client": "workspace:*", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", - "@sentry/bun": "^10.38.0", - "@sentry/cli": "^3.2.0", - "@types/ua-parser-js": "^0.7.39", - "axios": "^1.13.2", - "date-fns": "^4.1.0", - "input-otp": "^1.4.2", - "ipaddr.js": "^2.3.0", - "jszip": "^3.10.1", - "prisma": "^7.4.1", - "prisma-json-types-generator": "^4.0.1", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "react-router-dom": "^6.26.1", - "sonner": "^2.0.7", - "styled-components": "^6.1.13", - "ua-parser-js": "1", - "vite": "5.4.21", - "yaml": "^2.8.2", + "@metorial/context": "^1.0.0", + "@metorial/db": "^1.0.0", + "@mtsrc/emitter": "1.0.0", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", - "@types/bun": "latest", - "@types/node": "^25.0.3", - "@vercel/ncc": "^0.38.1", - "@vitejs/plugin-react": "4.3.1", - "vitest": "4.0.17", - }, - "peerDependencies": { - "typescript": "^5.5.3", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/cargo/db": { - "name": "@metorial-cargo/db", + "src/packages/backend/lock": { + "name": "@metorial/lock", "version": "1.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "1.0.10", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@prisma/extension-read-replicas": "^0.5.0", - "p-queue": "^9.1.0", - "prisma": "^7.2.0", + "@metorial/redis": "^1.0.0", + "@mtsrc/lock": "1.0.0", + "@types/bun": "^1.2.11", + "superjson": "^2.2.5", }, "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/cargo/modules/doc": { - "name": "@metorial-cargo/module-doc", + "src/packages/backend/logging": { + "name": "@metorial/logging", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/redis": "^1.0.6", - "@lowerdeck/service": "^1.0.7", - "@metorial-cargo/db": "^1.0.0", - "@metorial-cargo/list-utils": "^1.0.0", - "@metorial-cargo/module-file": "^1.0.0", - "@metorial-cargo/module-store": "^1.0.0", - "hono": "^4.11.3", + "@axiomhq/js": "^1.3.1", }, "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/cargo/modules/file": { - "name": "@metorial-cargo/module-file", + "src/packages/backend/queue": { + "name": "@metorial/queue", "version": "1.0.0", "dependencies": { - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/forwarded-for": "^1.0.4", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/tokens": "^1.0.5", - "@lowerdeck/validation": "1.0.10", - "@metorial-cargo/db": "^1.0.0", - "@metorial-cargo/list-utils": "^1.0.0", - "object-storage-client": "^0.2.5", + "@metorial/config": "^1.0.0", + "@mtsrc/queue": "1.0.0", }, "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/cargo/modules/search": { - "name": "@metorial-cargo/module-search", + "src/packages/backend/redis": { + "name": "@metorial/redis", "version": "1.0.0", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-services/voyager-client": "^1.0.1", + "@metorial/config": "^1.0.0", + "@metorial/id": "^1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/random-number": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "bullmq": "^5.34.3", + "mitt": "^3.0.1", + "nanoid": "^5.0.7", + "p-queue": "^8.0.1", + "redis": "^5.6.0", }, "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/cargo/modules/skill": { - "name": "@metorial-cargo/module-skill", + "src/packages/backend/rpc": { + "name": "@metorial/rpc", "version": "1.0.0", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@metorial-cargo/db": "^1.0.0", - "@metorial-cargo/list-utils": "^1.0.0", - "@metorial-cargo/module-doc": "^1.0.0", - "@metorial-cargo/module-file": "^1.0.0", - "@metorial-cargo/module-search": "^1.0.0", - "@metorial-cargo/module-store": "^1.0.0", - "@metorial-platform-systems/origin-client": "^1.0.0", - "@metorial/code-bucket-service-generated": "^1.0.0", - "yaml": "^2.9.0", + "@metorial/id": "^1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/memo": "1.0.0", + "@mtsrc/proxy": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@sentry/core": "^8.22.0", + "cookie": "^1.0.2", }, "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/cargo/modules/store": { - "name": "@metorial-cargo/module-store", + "src/packages/frontend/chart": { + "name": "@metorial/chart", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@metorial-cargo/db": "^1.0.0", - "@metorial-cargo/list-utils": "^1.0.0", + "@metorial/ui": "^1.0.0", + "apexcharts": "^4.7.0", + "react": "^19.1.0", + "react-apexcharts": "^1.7.0", }, "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/cargo/packages/list-utils": { - "name": "@metorial-cargo/list-utils", + "src/packages/frontend/code": { + "name": "@metorial/code", "version": "1.0.0", "dependencies": { - "@metorial-cargo/db": "^1.0.0", - }, - "devDependencies": { - "@types/bun": "latest", + "@metorial/dynamic-component": "^1.0.0", + "@metorial/ui": "^1.0.0", + "prism-react-renderer": "^2.4.1", + "react": "^19.0.0", + "react-use": "^17.5.1", + "styled-components": "^6.1.13", }, - "peerDependencies": { - "typescript": "^5", + "devDependencies": { + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/cargo/service": { - "name": "@metorial-cargo/service", + "src/packages/frontend/code-editor": { + "name": "@metorial/code-editor", + "version": "1.0.0", "dependencies": { - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/forwarded-for": "^1.0.4", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/redis": "^1.0.6", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/tokens": "^1.0.5", - "@lowerdeck/validation": "1.0.10", - "@metorial-cargo/db": "^1.0.0", - "@metorial-cargo/module-doc": "^1.0.0", - "@metorial-cargo/module-file": "^1.0.0", - "@metorial-cargo/module-skill": "^1.0.0", - "@metorial-cargo/module-store": "^1.0.0", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@prisma/extension-read-replicas": "^0.5.0", - "@sentry/bun": "^10.38.0", - "@sentry/cli": "^3.2.0", - "prisma": "^7.2.0", + "@codemirror/autocomplete": "^6.9.0", + "@codemirror/lang-javascript": "^6.1.9", + "@codemirror/lang-json": "^6.0.1", + "@codemirror/language": "^6.8.0", + "@lezer/highlight": "^1.1.6", + "@lezer/lr": "^1.3.9", + "@metorial/ui": "^1.0.0", + "@uiw/codemirror-themes": "^4.21.8", + "@uiw/react-codemirror": "^4.21.8", + "clsx": "^2.0.0", + "react": "^19.0.0", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", - "@types/bun": "latest", - "@types/node": "^25.0.3", - "@vercel/ncc": "^0.38.1", - "vitest": "^4.0.17", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/tsconfig": "^1.0.0", + "tsup": "^7.1.0", + "typescript": "^5.1.6", + "vitest": "^0.34.6", }, }, - "src/systems/forge/service": { - "name": "@metorial/forge", + "src/packages/frontend/data-hooks": { + "name": "@metorial/data-hooks", + "version": "1.0.0", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.957.0", - "@aws-sdk/client-codebuild": "^3.957.0", - "@aws-sdk/client-iam": "^3.957.0", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "1.0.10", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@prisma/extension-read-replicas": "^0.5.0", - "@sentry/bun": "^10.38.0", - "@sentry/cli": "^3.2.0", - "@types/mongoose": "^5.11.97", - "date-fns": "^4.1.0", - "jszip": "^3.10.1", - "mongoose": "^9.0.2", - "prisma": "^7.2.0", - "yaml": "^2.8.2", + "@metorial/ui": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/memo": "1.0.0", + "formik": "^2.4.6", + "react": "^19.1.0", + "react-router-dom": "^6.26.1", + "yup": "^1.4.0", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", - "@types/bun": "latest", - "@types/lodash": "^4.17.0", - "@vercel/ncc": "^0.38.1", - "lodash": "^4.17.21", - "vitest": "^4.0.17", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/function-bay/packages/build": { - "name": "@function-bay/build", + "src/packages/frontend/dynamic-component": { + "name": "@metorial/dynamic-component", "version": "1.0.0", "dependencies": { - "@function-bay/utils": "^1.0.0", - "@lowerdeck/env": "^1.0.4", - "@lowerdeck/validation": "^1.0.4", - "jszip": "^3.10.1", + "@metorial/ui": "^1.0.0", + "p-queue": "^8.1.0", }, "devDependencies": { - "@function-bay/tsconfig": "^1.0.0", - "microbundle": "^0.15.1", - "typescript": "^5.5.3", - "vitest": "4.0.17", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/function-bay/packages/function-bay": { - "name": "function-bay", - "version": "1.0.16", - "bin": { - "function-bay": "./cli.js", + "src/packages/frontend/markdown": { + "name": "@metorial/markdown", + "version": "1.0.0", + "dependencies": { + "@looped/hooks": "^0.1.3", + "@metorial/ui": "^1.0.0", + "apexcharts": "^4.7.0", + "react": "^19.1.0", + "react-apexcharts": "^1.7.0", + "react-markdown": "^10.1.0", + "react-medium-image-zoom": "^5.2.14", + "remark-gfm": "^4.0.1", + "striptags": "^3.2.0", + }, + "devDependencies": { + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, + }, + "src/packages/frontend/microfrontend": { + "name": "@metorial/microfrontend", + "version": "1.0.0", "dependencies": { - "@function-bay/build": "^1.0.0", - "@function-bay/types": "^1.0.0", - "@function-bay/utils": "^1.0.0", - "@lowerdeck/validation": "^1.0.10", - "@types/bun": "^1.3.5", + "@metorial/ui": "^1.0.0", + "p-queue": "^8.1.0", }, "devDependencies": { - "@function-bay/tsconfig": "^1.0.0", - "microbundle": "^0.15.1", - "tsup": "^8.5.1", - "typescript": "^5.9.3", - "vitest": "^3.2.4", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/function-bay/packages/nodejs": { - "name": "@function-bay/nodejs", - "version": "1.0.13", + "src/packages/frontend/pages": { + "name": "@metorial/pages", + "version": "1.0.0", "dependencies": { - "@function-bay/build": "^1.0.0", - "@function-bay/types": "^1.0.0", - "@function-bay/utils": "^1.0.0", - "@lowerdeck/validation": "^1.0.10", - "@types/bun": "^1.3.5", + "react": "^19.1.0", + "react-wrap-balancer": "^1.1.1", + "styled-components": "^6.1.13", }, "devDependencies": { - "@function-bay/tsconfig": "^1.0.0", - "@types/bun": "latest", - "microbundle": "^0.15.1", - "tsup": "^8.5.1", - "typescript": "^5.9.3", - "vitest": "^3.2.4", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/function-bay/packages/tsconfig": { - "name": "@function-bay/tsconfig", + "src/packages/frontend/storage": { + "name": "@metorial/storage", "version": "1.0.0", "dependencies": { - "@types/node": "^22.15.3", + "idb": "^8.0.0", + }, + "devDependencies": { + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/function-bay/packages/types": { - "name": "@function-bay/types", + "src/packages/frontend/ui": { + "name": "@metorial/ui", "version": "1.0.0", "dependencies": { - "@lowerdeck/validation": "^1.0.10", + "@base-ui/react": "^1.3.0", + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/sortable": "^10.0.0", + "@dnd-kit/utilities": "^3.2.2", + "@looped/hooks": "^0.1.3", + "@mtsrc/memo": "1.0.0", + "@radix-ui/react-accordion": "^1.2.8", + "@radix-ui/react-alert-dialog": "^1.1.11", + "@radix-ui/react-checkbox": "^1.2.3", + "@radix-ui/react-dialog": "^1.1.11", + "@radix-ui/react-dropdown-menu": "^2.1.12", + "@radix-ui/react-popover": "^1.1.11", + "@radix-ui/react-select": "^2.2.2", + "@radix-ui/react-slider": "^1.3.2", + "@radix-ui/react-switch": "^1.2.2", + "@radix-ui/react-toggle-group": "^1.1.7", + "@radix-ui/react-tooltip": "^1.2.4", + "@radix-ui/react-visually-hidden": "^1.2.0", + "@remixicon/react": "^4.6.0", + "clsx": "^2.1.1", + "copy-to-clipboard": "^3.3.3", + "date-fns": "^4.1.0", + "framer-motion": "^12.9.4", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-feather": "^2.0.10", + "react-textarea-autosize": "^8.5.9", + "react-use": "^17.6.0", + "react-wrap-balancer": "^1.1.1", + "shleemy": "^1.2.2", + "sonner": "^2.0.3", + "styled-components": "^6.1.13", + "use-delayed": "^0.1.0", }, "devDependencies": { - "@function-bay/tsconfig": "^1.0.0", - "microbundle": "^0.15.1", - "typescript": "^5.9.3", - "vitest": "^3.2.4", + "esbuild-plugin-styled-components": "^3.0.1", + "tsup": "^8.4.0", + "typescript": "^5.8.3", }, }, - "src/systems/function-bay/packages/utils": { - "name": "@function-bay/utils", + "src/packages/frontend/ui-product": { + "name": "@metorial/ui-product", "version": "1.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "jszip": "^3.10.1", + "@metorial/ui": "^1.0.0", + "@remixicon/react": "^4.2.0", + "copy-to-clipboard": "^3.3.3", + "react": "^19.0.0", + "react-use": "^17.5.1", + "styled-components": "^6.1.13", }, "devDependencies": { - "@function-bay/tsconfig": "^1.0.0", - "microbundle": "^0.15.1", - "typescript": "^5.9.3", - "vitest": "^3.2.4", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/function-bay/service": { - "name": "@metorial/function-bay", + "src/packages/mcp/mcp-utils": { + "name": "@metorial/mcp-utils", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/packages/mcp/unified-id": { + "name": "@metorial/unified-id", + "version": "1.0.0", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.957.0", - "@aws-sdk/client-iam": "^3.957.0", - "@aws-sdk/client-kms": "^3.1037.0", - "@aws-sdk/client-lambda": "^3.958.0", - "@function-bay/types": "^1.0.0", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/forge-client": "workspace:*", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@prisma/extension-read-replicas": "^0.5.0", - "@sentry/bun": "^10.38.0", - "@sentry/cli": "^3.2.0", - "date-fns": "^4.1.0", - "ecdsa-sig-formatter": "^1.0.11", - "http-proxy-agent": "^9.0.0", - "https-proxy-agent": "^9.0.0", - "jose": "^6.2.2", - "jszip": "^3.10.1", - "lodash": "4.17.21", - "prisma": "^7.2.0", - "prisma-json-types-generator": "^4.0.1", - "undici": "^8.1.0", - "yaml": "^2.8.2", + "@metorial/mcp-utils": "^1.0.0", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", - "@metorial-platform-systems/function-bay-client": "workspace:*", - "@types/bun": "latest", - "@types/lodash": "^4.17.23", - "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/origin/apps/code-bucket": { - "name": "@metorial/code-bucket-service-generated", + "src/packages/server/api-keys": { + "name": "@metorial/api-keys", "version": "1.0.0", "dependencies": { - "@grpc/grpc-js": "^1.13.4", - "long": "^5.3.2", - "nice-grpc": "^2.1.12", - "protobufjs": "^7.5.3", + "@mtsrc/error": "1.0.0", }, "devDependencies": { - "@types/bun": "latest", - "grpc-tools": "^1.13.0", - "grpc_tools_node_protoc_ts": "^5.3.3", - "ts-proto": "^2.7.5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, - "peerDependencies": { - "typescript": "^5", + }, + "src/packages/server/bearer": { + "name": "@metorial/bearer", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/origin/apps/code-workspace": { - "name": "@metorial/code-workspace", - "version": "0.0.0", + "src/packages/server/context": { + "name": "@metorial/context", + "version": "1.0.0", "dependencies": { - "vscode-oniguruma": "^2.0.1", - "vscode-textmate": "^9.2.0", + "@metorial/db": "^1.0.0", }, "devDependencies": { - "@types/node": "*", - "@types/vscode": "*", - "rollup": "^4.28.1", - "typescript": "~5.8.3", - "vite": "^5.4.1", - "vscode": "*", - "vscode-web": "^1.91.1", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - "src/systems/origin/apps/code-workspace/extensions/memfs": { - "name": "memfs", - "version": "0.0.1", + "src/packages/server/presenter": { + "name": "@metorial/presenter", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/packages/server/rest": { + "name": "@metorial/rest", + "version": "1.0.0", "dependencies": { - "esbuild-plugin-alias": "^0.2.1", - "p-queue": "^8.1.0", - "path-browserify": "^1.0.1", + "@opentelemetry/api": "^1.9.0", + "@types/qs": "^6.9.18", + "async-ratelimiter": "^1.3.13", + "qs": "^6.14.0", }, "devDependencies": { - "@types/mocha": "^10.0.10", - "@types/node": "20.x", - "@types/vscode": "^1.102.0", - "@typescript-eslint/eslint-plugin": "^8.31.1", - "@typescript-eslint/parser": "^8.31.1", - "@vscode/test-cli": "^0.0.11", - "@vscode/test-electron": "^2.5.2", - "esbuild": "^0.25.3", - "eslint": "^9.25.1", - "npm-run-all": "^4.1.5", + "@metorial/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/packages/shared/debug": { + "name": "@metorial/debug", + "version": "1.0.0", + "devDependencies": { + "@metorial/tsconfig": "^1.0.0", "typescript": "^5.8.3", + "vitest": "^3.1.2", }, }, - "src/systems/origin/apps/service": { - "name": "@metorial/origin", + "src/packages/shared/id": { + "name": "@metorial/id", + "version": "1.0.0", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.957.0", - "@aws-sdk/client-iam": "^3.957.0", - "@aws-sdk/client-lambda": "^3.958.0", - "@bufbuild/protobuf": "^2.11.0", - "@gitbeaker/rest": "^43.8.0", - "@grpc/grpc-js": "^1.13.4", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@octokit/auth-app": "^8.1.2", - "@octokit/core": "^7.0.6", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", - "@sentry/bun": "^10.38.0", - "@sentry/cli": "^3.2.0", - "axios": "^1.13.2", - "date-fns": "^4.1.0", - "ipaddr.js": "^2.3.0", - "jszip": "^3.10.1", - "long": "^5.3.2", - "nice-grpc": "^2.1.12", - "pg": "^8.18.0", - "prisma": "^7.4.1", - "prisma-json-types-generator": "^4.0.1", - "protobufjs": "^7.5.3", - "yaml": "^2.8.2", + "@mtsrc/base62": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "nanoid": "^5.0.7", + "short-uuid": "^5.2.0", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", - "@types/bun": "latest", - "@types/node": "^25.0.3", - "@vercel/ncc": "^0.38.1", - "@vitest/coverage-v8": "^4.0.16", - "@vitest/ui": "^4.0.16", - "vitest": "^4.0.16", + "@metorial/tsconfig": "^1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, - "peerDependencies": { - "typescript": "^5", + }, + "src/packages/shared/tsconfig": { + "name": "@metorial/tsconfig", + "version": "1.0.0", + "dependencies": { + "@types/node": "^22.15.3", }, }, - "src/systems/relay/service": { - "name": "@metorial/relay", + "src/systems/_clients/ares": { + "name": "@metorial-platform-systems/ares-client", + "version": "1.0.0", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.957.0", - "@aws-sdk/client-iam": "^3.957.0", - "@aws-sdk/client-lambda": "^3.958.0", - "@aws-sdk/client-ses": "^3.985.0", - "@lowerdeck/api-mux": "^1.0.1", - "@lowerdeck/cache": "^1.0.0", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.0.4", - "@lowerdeck/encryption": "^1.0.6", - "@lowerdeck/env": "^1.0.4", - "@lowerdeck/error": "^1.0.8", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.5", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.4", - "@lowerdeck/queue": "^1.0.4", - "@lowerdeck/rpc-client": "^1.0.2", - "@lowerdeck/rpc-server": "^1.0.4", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.3", - "@lowerdeck/slugify": "^1.0.4", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "^1.0.4", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@metorial-services/forge-client": "^1.0.3", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@sentry/bun": "^10.38.0", - "@types/nodemailer": "^7.0.9", - "axios": "^1.13.2", - "date-fns": "^4.1.0", - "ipaddr.js": "^2.3.0", - "jszip": "^3.10.1", - "nodemailer": "^8.0.1", - "prisma": "^7.2.0", - "prisma-json-types-generator": "^4.0.1", - "yaml": "^2.8.2", + "@mtsrc/rpc-client": "1.0.0", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", - "@types/bun": "latest", - "@types/node": "^25.0.3", - "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17", - }, - "peerDependencies": { - "typescript": "^5", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, }, - "src/systems/shuttle/sdk": { - "name": "@metorial/root", + "src/systems/_clients/cargo": { + "name": "@metorial-platform-systems/cargo-client", + "version": "1.0.0", "dependencies": { - "npm-run-all": "^4.1.5", + "@mtsrc/rpc-client": "1.0.0", + "@types/bun": "^1.3.7", }, "devDependencies": { - "prettier": "^3.5.3", - "turbo": "^2.5.5", - "typescript": "5.8.2", + "@types/minimatch": "^5", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, }, - "src/systems/shuttle/sdk/packages/mcp": { - "name": "@metorial/mcp", - "version": "1.0.0-rc.2", + "src/systems/_clients/forge": { + "name": "@metorial-platform-systems/forge-client", + "version": "1.0.4", "dependencies": { - "@modelcontextprotocol/sdk": "^1.25.3", - "zod": "^4.3.6", + "@metorial/util-websocket": "^1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@types/bun": "^1.3.7", }, "devDependencies": { + "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/systems/shuttle/sdk/packages/mcp-server": { - "name": "@metorial/mcp-server", - "version": "1.0.0-rc.11", + "src/systems/_clients/function-bay": { + "name": "@metorial-platform-systems/function-bay-client", + "version": "1.0.0", "dependencies": { - "@lowerdeck/proxy": "^1.0.4", - "@lowerdeck/serialize": "^1.0.4", - "@metorial/mcp": "^1.0.0-rc.2", - "@metorial/mcp-transport-memory": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.25.3", - "zod": "^4.3.6", + "@mtsrc/rpc-client": "1.0.0", }, "devDependencies": { + "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/systems/shuttle/sdk/packages/mcp-transport-memory": { - "name": "@metorial/mcp-transport-memory", + "src/systems/_clients/object-storage": { + "name": "@metorial-platform-systems/object-storage-client", "version": "1.0.0", "dependencies": { - "@modelcontextprotocol/sdk": "^1.25.3", + "axios": "^1.6.0", }, "devDependencies": { + "axios-mock-adapter": "^1.22.0", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", }, }, - "src/systems/shuttle/service": { - "name": "@metorial/shuttle", + "src/systems/_clients/origin-client": { + "name": "@metorial-platform-systems/origin-client", + "version": "1.0.0", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.957.0", - "@aws-sdk/client-iam": "^3.957.0", - "@aws-sdk/client-lambda": "^3.958.0", - "@bufbuild/protobuf": "^2.10.2", - "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/tokens": "^1.0.5", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/function-bay-client": "workspace:*", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@metorial/mcp-server": "^1.0.0-rc.11", - "@modelcontextprotocol/sdk": "^1.25.3", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@prisma/extension-read-replicas": "^0.5.0", - "@sentry/bun": "^10.38.0", - "@sentry/cli": "^3.2.0", - "@types/pg": "^8.16.0", - "axios": "^1.13.2", - "date-fns": "^4.1.0", - "drizzle-orm": "^0.45.1", - "hono": "^4.11.3", - "ipaddr.js": "^2.3.0", - "jsonata": "^2.1.0", - "jszip": "^3.10.1", - "p-queue": "^9.1.0", - "pg": "^8.16.3", - "prisma": "^7.2.0", - "prisma-json-types-generator": "^4.0.1", - "ws": "^8.19.0", - "yaml": "^2.8.2", - "zod": "^4.3.6", + "@mtsrc/rpc-client": "1.0.0", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", - "@types/bun": "latest", "@types/node": "^25.0.3", - "@types/ws": "^8.18.1", - "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17", + "dts-bundle-generator": "^9.5.1", + "microbundle": "^0.15.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, - "peerDependencies": { - "typescript": "^5", + }, + "src/systems/_clients/relay": { + "name": "@metorial-platform-systems/relay-client", + "version": "1.0.0", + "dependencies": { + "@mtsrc/rpc-client": "1.0.0", + "@react-email/components": "^1.0.7", + "react": "^19.2.4", + }, + "devDependencies": { + "@types/react": "^19.0.0", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, }, - "src/systems/signal/service": { - "name": "@metorial/signal", + "src/systems/_clients/shuttle": { + "name": "@metorial-platform-systems/shuttle-client", + "version": "1.0.0", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.957.0", - "@aws-sdk/client-iam": "^3.957.0", - "@aws-sdk/client-lambda": "^3.958.0", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@prisma/extension-read-replicas": "^0.5.0", - "@sentry/bun": "^10.38.0", - "@sentry/cli": "^3.2.0", - "axios": "^1.13.2", - "date-fns": "^4.1.0", - "ipaddr.js": "^2.3.0", - "jszip": "^3.10.1", - "prisma": "^7.2.0", - "prisma-json-types-generator": "^4.0.1", - "yaml": "^2.8.2", + "@metorial/util-websocket": "^1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@types/bun": "^1.3.7", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", - "@types/bun": "latest", - "@types/node": "^25.0.3", - "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17", + "@types/minimatch": "^5", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, - "peerDependencies": { - "typescript": "^5", + }, + "src/systems/_clients/signal": { + "name": "@metorial-platform-systems/signal-client", + "version": "1.0.0", + "dependencies": { + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@types/minimatch": "^5", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, }, - "src/systems/slates/apps/hub": { - "name": "@metorial/slates", + "src/systems/_clients/slates": { + "name": "@metorial-platform-systems/slates-client", + "version": "1.0.0", + "dependencies": { + "@metorial-platform-systems/function-bay-client": "workspace:*", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@types/minimatch": "^5", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/systems/_clients/subspace": { + "name": "@metorial-platform-systems/subspace-client", + "version": "1.0.0", + "dependencies": { + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@types/minimatch": "^5", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/systems/_clients/synthesis": { + "name": "@metorial-platform-systems/synthesis-client", + "version": "1.0.0", + "dependencies": { + "@mtsrc/rpc-client": "1.0.0", + }, + "devDependencies": { + "@types/minimatch": "^5", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/systems/_clients/voyager": { + "name": "@metorial-platform-systems/voyager-client", + "version": "1.0.0", + "dependencies": { + "@mtsrc/rpc-client": "1.0.0", + }, + "devDependencies": { + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/systems/ares/service": { + "name": "@metorial/ares", "dependencies": { "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", - "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-key": "^1.0.3", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/shadow-id": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", + "@boxyhq/saml-jackson": "^1.52.2", + "@looped/hooks": "^0.1.3", + "@marsidev/react-turnstile": "^1.4.2", "@metorial-io/data-hooks": "^1.0.1", "@metorial-io/layout": "^1.0.1", + "@metorial-io/pages": "^1.0.0", "@metorial-io/ui": "^1.0.0", "@metorial-io/ui-product": "^1.0.0", - "@metorial-platform-systems/ares-client": "^1.0.0", - "@metorial-platform-systems/function-bay-client": "workspace:*", "@metorial-platform-systems/object-storage-client": "workspace:*", - "@metorial-platform-systems/signal-client": "workspace:*", - "@metorial-services/slates-registry-client": "latest", - "@metorial-services/slates-registry-internal-client": "^1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@prisma/extension-read-replicas": "^0.5.0", - "@remixicon/react": "^4.0.0", - "@sentry/bun": "^10.36.0", + "@metorial-platform-systems/relay-client": "workspace:*", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/event": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/ip-info": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/tokens": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.4.1", + "@prisma/client": "^7.4.1", + "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", - "@slates/proto": "^1.0.0-rc.8", - "@types/semver": "^7.7.1", - "@types/unzipper": "^0.10.11", + "@types/ua-parser-js": "^0.7.39", + "axios": "^1.13.2", "date-fns": "^4.1.0", - "hono": "^4.11.3", + "input-otp": "^1.4.2", + "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "lodash": "4.17.21", - "p-queue": "^9.0.1", - "prisma": "^7.2.0", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", - "react": "^19.2.3", - "react-dom": "^19.2.3", + "react": "^19.0.0", + "react-dom": "^19.0.0", "react-router-dom": "^6.26.1", - "semver": "^7.7.3", - "sonner": "^1.5.0", + "sonner": "^2.0.7", "styled-components": "^6.1.13", - "unzipper": "^0.12.3", + "ua-parser-js": "1", + "vite": "5.4.21", "yaml": "^2.8.2", - "zod": "^4.2.1", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", + "@mtsrc/testing-tools": "1.0.0", "@types/bun": "latest", - "@types/lodash": "^4.17.23", - "@types/minimatch": "^6.0.0", - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.0", + "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", - "@vitejs/plugin-react": "^4.3.0", - "vite": "^5.4.0", + "@vitejs/plugin-react": "4.3.1", "vitest": "4.0.17", }, "peerDependencies": { - "typescript": "^5", + "typescript": "^5.5.3", }, }, - "src/systems/slates/apps/registry": { - "name": "@metorial/slates-registry", + "src/systems/cargo/db": { + "name": "@metorial-cargo/db", + "version": "1.0.0", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.957.0", - "@aws-sdk/client-iam": "^3.957.0", - "@aws-sdk/client-lambda": "^3.958.0", - "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-key": "^1.0.3", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/shadow-id": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "^1.0.10", - "@metorial-io/data-hooks": "^1.0.1", - "@metorial-io/layout": "^1.0.1", - "@metorial-io/ui": "^1.0.0", - "@metorial-io/ui-product": "^1.0.0", - "@metorial-platform-systems/ares-client": "^1.0.0", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@metorial/util-endpoint": "^1.0.1", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", - "@remixicon/react": "^4.0.0", - "@sentry/bun": "^10.36.0", - "@sentry/cli": "^3.2.0", - "@types/semver": "^7.7.1", - "@types/unzipper": "^0.10.11", - "date-fns": "^4.1.0", - "hono": "^4.11.3", - "jszip": "^3.10.1", - "lodash-es": "^4.17.22", + "@prisma/extension-read-replicas": "^0.5.0", + "p-queue": "^9.1.0", "prisma": "^7.2.0", - "prisma-json-types-generator": "^4.0.1", - "react": "^19.2.3", - "react-dom": "^19.2.3", - "react-router-dom": "^6.26.1", - "semver": "^7.7.3", - "styled-components": "^6.1.13", - "tar-stream": "^3.1.8", - "unzipper": "^0.12.3", - "yaml": "^2.8.2", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", - "@types/minimatch": "^6.0.0", - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.0", - "@types/tar-stream": "^3.1.4", - "@vercel/ncc": "^0.38.1", - "@vitejs/plugin-react": "^4.3.0", - "autoprefixer": "^10.4.0", - "vite": "^5.4.0", - "vitest": "^4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/slates/clients/registry": { - "name": "@metorial-services/slates-registry-client", - "version": "1.0.1", + "src/systems/cargo/modules/doc": { + "name": "@metorial-cargo/module-doc", + "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", + "@metorial-cargo/db": "^1.0.0", + "@metorial-cargo/list-utils": "^1.0.0", + "@metorial-cargo/module-file": "^1.0.0", + "@metorial-cargo/module-store": "^1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/service": "1.0.0", + "hono": "^4.11.3", }, "devDependencies": { - "dts-bundle-generator": "^9.5.1", - "microbundle": "^0.15.1", - "typescript": "^5.8.3", - "vitest": "^3.1.2", + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", }, }, - "src/systems/slates/clients/registry-internal": { - "name": "@metorial-services/slates-registry-internal-client", + "src/systems/cargo/modules/file": { + "name": "@metorial-cargo/module-file", "version": "1.0.0", "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", + "@metorial-cargo/db": "^1.0.0", + "@metorial-cargo/list-utils": "^1.0.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/tokens": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { - "dts-bundle-generator": "^9.5.1", - "microbundle": "^0.15.1", - "typescript": "^5.8.3", - "vitest": "^3.1.2", + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", }, }, - "src/systems/subspace/apps/controller": { - "name": "@metorial-subspace/app-controller", + "src/systems/cargo/modules/search": { + "name": "@metorial-cargo/module-search", + "version": "1.0.0", "dependencies": { - "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/signal-client": "workspace:*", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/module-agent": "^1.0.0", - "@metorial-subspace/module-auth": "^1.0.0", - "@metorial-subspace/module-callback": "^1.0.0", - "@metorial-subspace/module-catalog": "^1.0.0", - "@metorial-subspace/module-connection": "^1.0.0", - "@metorial-subspace/module-custom-provider": "^1.0.0", - "@metorial-subspace/module-deployment": "^1.0.0", - "@metorial-subspace/module-identity": "^1.0.0", - "@metorial-subspace/module-integration": "^1.0.0", - "@metorial-subspace/module-session": "^1.0.0", - "@metorial-subspace/module-skills": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/presenters": "^1.0.0", - "@metorial-subspace/provider-native": "^1.0.0", - "@metorial-subspace/provider-shuttle": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.26.0", - "@sentry/bun": "^10.34.0", - "@sentry/cli": "^3.2.0", - "@types/minimatch": "^6.0.0", - "@vercel/ncc": "^0.38.3", - "hono": "^4.11.3", - "zod": "^4.3.6", + "@metorial-platform-systems/voyager-client": "workspace:*", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/testing-tools": "^1.0.1", - "@metorial-platform-systems/shuttle-client": "^1.0.0", - "@metorial-subspace/connection-utils": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0", - "@metorial-subspace/retry-utils": "^1.0.0", - "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", - "express": "^5.2.1", - "vitest": "4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/apps/dev": { - "name": "@metorial/subspace-dev", + "src/systems/cargo/modules/skill": { + "name": "@metorial-cargo/module-skill", + "version": "1.0.0", "dependencies": { - "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/module-auth": "^1.0.0", - "@metorial-subspace/module-catalog": "^1.0.0", - "@metorial-subspace/module-connection": "^1.0.0", - "@metorial-subspace/module-custom-provider": "^1.0.0", - "@metorial-subspace/module-deployment": "^1.0.0", - "@metorial-subspace/module-session": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/presenters": "^1.0.0", - "@metorial-subspace/provider-shuttle": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.26.0", - "@sentry/bun": "^10.34.0", - "@sentry/cli": "^3.2.0", - "@vercel/ncc": "^0.38.3", - "hono": "^4.11.3", - "zod": "^4.3.6", + "@metorial-cargo/db": "^1.0.0", + "@metorial-cargo/list-utils": "^1.0.0", + "@metorial-cargo/module-doc": "^1.0.0", + "@metorial-cargo/module-file": "^1.0.0", + "@metorial-cargo/module-search": "^1.0.0", + "@metorial-cargo/module-store": "^1.0.0", + "@metorial-platform-systems/origin-client": "^1.0.0", + "@metorial/code-bucket-service-generated": "^1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "yaml": "^2.9.0", }, "devDependencies": { - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/testing-tools": "^1.0.1", - "@metorial-platform-systems/shuttle-client": "^1.0.0", - "@metorial-subspace/connection-utils": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0", - "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", - "express": "^5.2.1", - "vitest": "4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/apps/public": { - "name": "@metorial-subspace/app-public", + "src/systems/cargo/modules/store": { + "name": "@metorial-cargo/module-store", + "version": "1.0.0", "dependencies": { - "@aws-sdk/client-cloudwatch-logs": "^3.957.0", - "@aws-sdk/client-iam": "^3.957.0", - "@aws-sdk/client-lambda": "^3.958.0", - "@hono/zod-validator": "^0.7.6", - "@hookform/resolvers": "^5.2.2", - "@lowerdeck/api-key": "^1.0.3", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", - "@metorial-io/data-hooks": "^1.0.1", - "@metorial-io/pages": "^1.0.0", - "@metorial-subspace/app-controller": "workspace:*", - "@metorial-subspace/module-auth": "^1.0.0", - "@metorial-subspace/module-integration": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/presenters": "^1.0.0", - "@metorial-subspace/provider-native": "^1.0.0", - "@sentry/bun": "^10.34.0", - "@sentry/cli": "^3.2.0", - "@types/react-dom": "^19.2.3", - "@vercel/ncc": "^0.38.3", - "@vitejs/plugin-react": "^4.3.1", - "framer-motion": "^12.9.4", - "react": "^19.2.3", - "react-dom": "^19.2.3", - "react-router-dom": "^6.26.1", - "semver": "^7.7.3", - "snowflake-uuid": "^1.0.0", - "styled-components": "^6.1.13", - "unzipper": "^0.12.3", - "vite": "^5.4.1", - "yaml": "^2.8.2", - "yup": "^1.7.1", + "@metorial-cargo/db": "^1.0.0", + "@metorial-cargo/list-utils": "^1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", - "vitest": "^4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/apps/worker": { - "name": "@metorial-subspace/app-worker", + "src/systems/cargo/packages/list-utils": { + "name": "@metorial-cargo/list-utils", + "version": "1.0.0", "dependencies": { - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/telemetry": "^1.1.1", - "@metorial-subspace/app-controller": "workspace:*", - "@metorial-subspace/module-auth": "^1.0.0", - "@metorial-subspace/module-callback": "^1.0.0", - "@metorial-subspace/module-catalog": "^1.0.0", - "@metorial-subspace/module-connection": "^1.0.0", - "@metorial-subspace/module-deployment": "^1.0.0", - "@metorial-subspace/module-integration": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/module-skills": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/provider-native": "^1.0.0", - "@metorial-subspace/provider-slates": "^1.0.0", - "@sentry/bun": "^10.34.0", - "@sentry/cli": "^3.2.0", - "@vercel/ncc": "^0.38.3", + "@metorial-cargo/db": "^1.0.0", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", - "vitest": "^4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/db": { - "name": "@metorial-subspace/db", - "version": "1.0.0", + "src/systems/cargo/service": { + "name": "@metorial-cargo/service", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/tsconfig": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.25.2", + "@metorial-cargo/db": "^1.0.0", + "@metorial-cargo/module-doc": "^1.0.0", + "@metorial-cargo/module-file": "^1.0.0", + "@metorial-cargo/module-skill": "^1.0.0", + "@metorial-cargo/module-store": "^1.0.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/tokens": "1.0.0", + "@mtsrc/validation": "1.0.0", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", - "dotenv": "^17.2.3", - "p-queue": "^9.1.0", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", "prisma": "^7.2.0", - "prisma-json-types-generator": "^4.0.1", }, "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", "@types/bun": "latest", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "vitest": "^4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/modules/agent": { - "name": "@metorial-subspace/module-agent", - "version": "1.0.0", + "src/systems/forge/service": { + "name": "@metorial/forge", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-identity": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/module-search": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0", + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-codebuild": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", + "@types/mongoose": "^5.11.97", + "date-fns": "^4.1.0", + "jszip": "^3.10.1", + "mongoose": "^9.0.2", + "prisma": "^7.2.0", + "yaml": "^2.8.2", }, "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@mtsrc/testing-tools": "1.0.0", + "@types/bun": "latest", + "@types/lodash": "^4.17.0", + "@vercel/ncc": "^0.38.1", + "lodash": "^4.17.21", + "vitest": "^4.0.17", + }, + "peerDependencies": { + "typescript": "^5", }, }, - "src/systems/subspace/modules/auth": { - "name": "@metorial-subspace/module-auth", + "src/systems/function-bay/packages/build": { + "name": "@function-bay/build", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-deployment": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/module-search": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0", - "date-fns": "^4.1.0", + "@function-bay/utils": "^1.0.0", + "@lowerdeck/env": "^1.0.4", + "@lowerdeck/validation": "^1.0.4", + "jszip": "^3.10.1", }, "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@function-bay/tsconfig": "^1.0.0", + "microbundle": "^0.15.1", + "typescript": "^5.5.3", + "vitest": "4.0.17", }, }, - "src/systems/subspace/modules/callback": { - "name": "@metorial-subspace/module-callback", - "version": "1.0.0", + "src/systems/function-bay/packages/function-bay": { + "name": "function-bay", + "version": "1.0.16", + "bin": { + "function-bay": "./cli.js", + }, "dependencies": { - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/provider-slates": "^1.0.0", + "@function-bay/build": "^1.0.0", + "@function-bay/types": "^1.0.0", + "@function-bay/utils": "^1.0.0", + "@mtsrc/validation": "1.0.0", + "@types/bun": "^1.3.5", }, "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", - }, - }, - "src/systems/subspace/modules/catalog": { - "name": "@metorial-subspace/module-catalog", - "version": "1.0.0", - "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-services/registry-client": "^1.0.0", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/module-search": "^1.0.0", - "date-fns": "^4.1.0", - }, - "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@function-bay/tsconfig": "^1.0.0", + "microbundle": "^0.15.1", + "tsup": "^8.5.1", + "typescript": "^5.9.3", + "vitest": "^3.2.4", }, }, - "src/systems/subspace/modules/connection": { - "name": "@metorial-subspace/module-connection", - "version": "1.0.0", + "src/systems/function-bay/packages/nodejs": { + "name": "@function-bay/nodejs", + "version": "1.0.13", "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/case": "^1.0.9", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/unique": "^1.0.4", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/conduit": "^1.0.0", - "@metorial-subspace/connection-utils": "^1.0.0", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/generator": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-agent": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0", - "@metorial-subspace/redis-url": "^1.0.0", - "@metorial-subspace/store": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.25.2", - "@types/lodash": "^4.17.23", - "date-fns": "^4.1.0", - "lodash": "^4.17.23", - "nats": "^2.29.3", - "uuid": "^13.0.0", - "zod": "^4.3.5", + "@function-bay/build": "^1.0.0", + "@function-bay/types": "^1.0.0", + "@function-bay/utils": "^1.0.0", + "@mtsrc/validation": "1.0.0", + "@types/bun": "^1.3.5", }, "devDependencies": { - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@function-bay/tsconfig": "^1.0.0", + "@types/bun": "latest", + "microbundle": "^0.15.1", + "tsup": "^8.5.1", + "typescript": "^5.9.3", + "vitest": "^3.2.4", }, }, - "src/systems/subspace/modules/custom-provider": { - "name": "@metorial-subspace/module-custom-provider", + "src/systems/function-bay/packages/tsconfig": { + "name": "@function-bay/tsconfig", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/origin-client": "^1.0.0", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/module-search": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0", - }, - "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@types/node": "^22.15.3", }, }, - "src/systems/subspace/modules/deployment": { - "name": "@metorial-subspace/module-deployment", + "src/systems/function-bay/packages/types": { + "name": "@function-bay/types", "version": "1.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/module-search": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/validation": "1.0.0", }, "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@function-bay/tsconfig": "^1.0.0", + "microbundle": "^0.15.1", + "typescript": "^5.9.3", + "vitest": "^3.2.4", }, }, - "src/systems/subspace/modules/identity": { - "name": "@metorial-subspace/module-identity", + "src/systems/function-bay/packages/utils": { + "name": "@function-bay/utils", "version": "1.0.0", "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/module-search": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0", - "date-fns": "^4.1.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/validation": "1.0.0", + "jszip": "^3.10.1", }, "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@function-bay/tsconfig": "^1.0.0", + "microbundle": "^0.15.1", + "typescript": "^5.9.3", + "vitest": "^3.2.4", }, }, - "src/systems/subspace/modules/integration": { - "name": "@metorial-subspace/module-integration", - "version": "1.0.0", + "src/systems/function-bay/service": { + "name": "@metorial/function-bay", "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-auth": "^1.0.0", - "@metorial-subspace/module-catalog": "^1.0.0", - "@metorial-subspace/module-deployment": "^1.0.0", - "@metorial-subspace/module-identity": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/module-search": "^1.0.0", - "@metorial-subspace/module-session": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-kms": "^3.1037.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@function-bay/types": "^1.0.0", + "@metorial-platform-systems/forge-client": "workspace:*", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", "date-fns": "^4.1.0", + "ecdsa-sig-formatter": "^1.0.11", + "http-proxy-agent": "^9.0.0", + "https-proxy-agent": "^9.0.0", + "jose": "^6.2.2", + "jszip": "^3.10.1", + "lodash": "4.17.21", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "undici": "^8.1.0", + "yaml": "^2.8.2", }, "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", - }, - }, - "src/systems/subspace/modules/provider-internal": { - "name": "@metorial-subspace/module-provider-internal", - "version": "1.0.0", - "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/module-search": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0", - "date-fns": "^4.1.0", - "safe-regex2": "^5.0.0", + "@metorial-platform-systems/function-bay-client": "workspace:*", + "@mtsrc/testing-tools": "1.0.0", + "@types/bun": "latest", + "@types/lodash": "^4.17.23", + "@vercel/ncc": "^0.38.1", + "vitest": "4.0.17", }, - "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "peerDependencies": { + "typescript": "^5", }, }, - "src/systems/subspace/modules/search": { - "name": "@metorial-subspace/module-search", + "src/systems/origin/apps/code-bucket": { + "name": "@metorial/code-bucket-service-generated", "version": "1.0.0", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-services/voyager-client": "^1.0.1", + "@grpc/grpc-js": "^1.13.4", + "long": "^5.3.2", + "nice-grpc": "^2.1.12", + "protobufjs": "^7.5.3", }, "devDependencies": { "@types/bun": "latest", + "grpc-tools": "^1.13.0", + "grpc_tools_node_protoc_ts": "^5.3.3", + "ts-proto": "^2.7.5", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/modules/session": { - "name": "@metorial-subspace/module-session", - "version": "1.0.0", + "src/systems/origin/apps/code-workspace": { + "name": "@metorial/code-workspace", + "version": "0.0.0", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-agent": "^1.0.0", - "@metorial-subspace/module-catalog": "^1.0.0", - "@metorial-subspace/module-deployment": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0", - "p-queue": "^8.0.1", + "vscode-oniguruma": "^2.0.1", + "vscode-textmate": "^9.2.0", }, "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@types/node": "*", + "@types/vscode": "*", + "rollup": "^4.28.1", + "typescript": "~5.8.3", + "vite": "^5.4.1", + "vscode": "*", + "vscode-web": "^1.91.1", }, }, - "src/systems/subspace/modules/skills": { - "name": "@metorial-subspace/module-skills", - "version": "1.0.0", + "src/systems/origin/apps/code-workspace/extensions/memfs": { + "name": "memfs", + "version": "0.0.1", "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/cargo-client": "^1.0.0", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - "@metorial-subspace/module-catalog": "^1.0.0", - "@metorial-subspace/module-integration": "^1.0.0", - "@metorial-subspace/module-search": "^1.0.0", - "@metorial-subspace/module-tenant": "^1.0.0", + "esbuild-plugin-alias": "^0.2.1", + "p-queue": "^8.1.0", + "path-browserify": "^1.0.1", }, "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", + "@types/mocha": "^10.0.10", + "@types/node": "20.x", + "@types/vscode": "^1.102.0", + "@typescript-eslint/eslint-plugin": "^8.31.1", + "@typescript-eslint/parser": "^8.31.1", + "@vscode/test-cli": "^0.0.11", + "@vscode/test-electron": "^2.5.2", + "esbuild": "^0.25.3", + "eslint": "^9.25.1", + "npm-run-all": "^4.1.5", + "typescript": "^5.8.3", }, }, - "src/systems/subspace/modules/tenant": { - "name": "@metorial-subspace/module-tenant", - "version": "1.0.0", + "src/systems/origin/apps/service": { + "name": "@metorial/origin", "dependencies": { - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/connection-utils": "^1.0.0", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0", - }, - "devDependencies": { - "@metorial-subspace/tsconfig": "^1.0.0", - "typescript": "5.8.2", - "vitest": "^3.1.2", - }, - }, - "src/systems/subspace/packages/conduit": { - "name": "@metorial-subspace/conduit", - "version": "1.0.0", - "dependencies": { - "@lowerdeck/serialize": "^1.0.4", - "ioredis": "^5.4.2", - "nats": "^2.28.2", + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@bufbuild/protobuf": "^2.11.0", + "@gitbeaker/rest": "^43.8.0", + "@grpc/grpc-js": "^1.13.4", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@octokit/auth-app": "^8.1.2", + "@octokit/core": "^7.0.6", + "@prisma/adapter-pg": "^7.4.1", + "@prisma/client": "^7.4.1", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "ipaddr.js": "^2.3.0", + "jszip": "^3.10.1", + "long": "^5.3.2", + "nice-grpc": "^2.1.12", + "pg": "^8.18.0", + "prisma": "^7.4.1", + "prisma-json-types-generator": "^4.0.1", + "protobufjs": "^7.5.3", + "yaml": "^2.8.2", }, "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", "@types/bun": "latest", - "vitest": "^2.1.8", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "@vitest/coverage-v8": "^4.0.16", + "@vitest/ui": "^4.0.16", + "vitest": "^4.0.16", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/packages/connection-utils": { - "name": "@metorial-subspace/connection-utils", - "version": "1.0.0", + "src/systems/relay/service": { + "name": "@metorial/relay", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/validation": "^1.0.10", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.25.2", - "object-storage-client": "^0.2.5", - "zod": "^4.3.5", - }, - "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@aws-sdk/client-ses": "^3.985.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial-services/forge-client": "^1.0.3", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@sentry/bun": "^10.38.0", + "@types/nodemailer": "^7.0.9", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "ipaddr.js": "^2.3.0", + "jszip": "^3.10.1", + "nodemailer": "^8.0.1", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "yaml": "^2.8.2", }, - }, - "src/systems/subspace/packages/generator": { - "name": "@metorial-subspace/generator", - "version": "1.0.0", "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", "@types/bun": "latest", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "vitest": "4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/packages/list-utils": { - "name": "@metorial-subspace/list-utils", - "version": "1.0.0", + "src/systems/shuttle/sdk": { + "name": "@metorial/root", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@metorial-subspace/db": "^1.0.0", - "date-fns": "^4.1.0", + "npm-run-all": "^4.1.5", }, "devDependencies": { - "@types/bun": "latest", - "vitest": "^3.1.2", - }, - "peerDependencies": { - "typescript": "^5", + "prettier": "^3.5.3", + "turbo": "^2.5.5", + "typescript": "5.8.2", }, }, - "src/systems/subspace/packages/presenters": { - "name": "@metorial-subspace/presenters", - "version": "1.0.0", + "src/systems/shuttle/sdk/packages/mcp": { + "name": "@metorial/mcp", + "version": "1.0.0-rc.2", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/shadow-id": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/slates-client": "^1.0.0", - "@metorial-subspace/connection-utils": "^1.0.0", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/provider-shuttle": "^1.0.0", - }, - "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "@modelcontextprotocol/sdk": "^1.25.3", + "zod": "^4.3.6", }, - }, - "src/systems/subspace/packages/redis-url": { - "name": "@metorial-subspace/redis-url", - "version": "1.0.0", "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, }, - "src/systems/subspace/packages/retry-utils": { - "name": "@metorial-subspace/retry-utils", - "version": "1.0.0", + "src/systems/shuttle/sdk/packages/mcp-server": { + "name": "@metorial/mcp-server", + "version": "1.0.0-rc.11", "dependencies": { - "@lowerdeck/delay": "^1.0.4", - }, - "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "@metorial/mcp": "^1.0.0-rc.2", + "@metorial/mcp-transport-memory": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.25.3", + "@mtsrc/proxy": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "zod": "^4.3.6", }, - }, - "src/systems/subspace/packages/store": { - "name": "@metorial-subspace/store", - "version": "1.0.0", "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", - }, - }, - "src/systems/subspace/packages/tsconfig": { - "name": "@metorial-subspace/tsconfig", - "version": "1.0.0", - "dependencies": { - "@types/node": "^22.15.3", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, }, - "src/systems/subspace/provider-backends/provider-manager": { - "name": "@metorial-subspace/provider", + "src/systems/shuttle/sdk/packages/mcp-transport-memory": { + "name": "@metorial/mcp-transport-memory", "version": "1.0.0", "dependencies": { - "@lowerdeck/cache": "^1.0.2", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/provider-native": "^1.0.0", - "@metorial-subspace/provider-shuttle": "^1.0.0", - "@metorial-subspace/provider-slates": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.25.3", }, "devDependencies": { - "@types/bun": "latest", - }, - "peerDependencies": { - "typescript": "^5", + "tsup": "^8.5.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", }, }, - "src/systems/subspace/provider-backends/provider-native": { - "name": "@metorial-subspace/provider-native", - "version": "1.0.0", + "src/systems/shuttle/service": { + "name": "@metorial/shuttle", "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@metorial-services/scout-client": "^1.0.0", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0", + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@bufbuild/protobuf": "^2.10.2", + "@hono/zod-validator": "^0.7.6", + "@metorial-platform-systems/function-bay-client": "workspace:*", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial/mcp-server": "^1.0.0-rc.11", + "@modelcontextprotocol/sdk": "^1.25.3", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/tokens": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", + "@types/pg": "^8.16.0", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "drizzle-orm": "^0.45.1", + "hono": "^4.11.3", + "ipaddr.js": "^2.3.0", + "jsonata": "^2.1.0", + "jszip": "^3.10.1", + "p-queue": "^9.1.0", + "pg": "^8.16.3", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "ws": "^8.19.0", + "yaml": "^2.8.2", "zod": "^4.3.6", }, "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", "@types/bun": "latest", + "@types/node": "^25.0.3", + "@types/ws": "^8.18.1", + "@vercel/ncc": "^0.38.1", + "vitest": "4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/provider-backends/provider-shuttle": { - "name": "@metorial-subspace/provider-shuttle", - "version": "1.0.0", + "src/systems/signal/service": { + "name": "@metorial/signal", "dependencies": { - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/shuttle-client": "1.0.0", - "@metorial-services/registry-client": "^1.0.0", - "@metorial-subspace/connection-utils": "^1.0.0", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0", - "@metorial-subspace/retry-utils": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.25.3", - "p-queue": "^9.1.0", - "zod": "^4.3.6", + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "ipaddr.js": "^2.3.0", + "jszip": "^3.10.1", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "yaml": "^2.8.2", }, "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", "@types/bun": "latest", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "vitest": "4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/provider-backends/provider-slates": { - "name": "@metorial-subspace/provider-slates", - "version": "1.0.0", + "src/systems/slates/apps/hub": { + "name": "@metorial/slates", "dependencies": { - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/slates-client": "^1.0.0", - "@metorial-services/registry-client": "^1.0.0", - "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/module-catalog": "^1.0.0", - "@metorial-subspace/module-provider-internal": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0", - "p-queue": "^9.1.0", + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@hono/zod-validator": "^0.7.6", + "@metorial-io/data-hooks": "^1.0.1", + "@metorial-io/layout": "^1.0.1", + "@metorial-io/ui": "^1.0.0", + "@metorial-io/ui-product": "^1.0.0", + "@metorial-platform-systems/ares-client": "^1.0.0", + "@metorial-platform-systems/function-bay-client": "workspace:*", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial-platform-systems/signal-client": "workspace:*", + "@metorial-services/slates-registry-client": "latest", + "@metorial-services/slates-registry-internal-client": "^1.0.0", + "@mtsrc/api-key": "1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "@remixicon/react": "^4.0.0", + "@sentry/bun": "^10.36.0", + "@sentry/cli": "^3.2.0", + "@slates/proto": "^1.0.0-rc.8", + "@types/semver": "^7.7.1", + "@types/unzipper": "^0.10.11", + "date-fns": "^4.1.0", + "hono": "^4.11.3", + "jszip": "^3.10.1", + "lodash": "4.17.21", + "p-queue": "^9.0.1", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-router-dom": "^6.26.1", + "semver": "^7.7.3", + "sonner": "^1.5.0", + "styled-components": "^6.1.13", + "unzipper": "^0.12.3", + "yaml": "^2.8.2", + "zod": "^4.2.1", }, "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", "@types/bun": "latest", + "@types/lodash": "^4.17.23", + "@types/minimatch": "^6.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vercel/ncc": "^0.38.1", + "@vitejs/plugin-react": "^4.3.0", + "vite": "^5.4.0", + "vitest": "4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/provider-backends/provider-utils": { - "name": "@metorial-subspace/provider-utils", - "version": "1.0.0", + "src/systems/slates/apps/registry": { + "name": "@metorial/slates-registry", "dependencies": { - "@lowerdeck/base62": "^1.0.4", - "@metorial-subspace/db": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.25.3", + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@hono/zod-validator": "^0.7.6", + "@metorial-io/data-hooks": "^1.0.1", + "@metorial-io/layout": "^1.0.1", + "@metorial-io/ui": "^1.0.0", + "@metorial-io/ui-product": "^1.0.0", + "@metorial-platform-systems/ares-client": "^1.0.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial/util-endpoint": "^1.0.1", + "@mtsrc/api-key": "1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@remixicon/react": "^4.0.0", + "@sentry/bun": "^10.36.0", + "@sentry/cli": "^3.2.0", + "@types/semver": "^7.7.1", + "@types/unzipper": "^0.10.11", + "date-fns": "^4.1.0", + "hono": "^4.11.3", + "jszip": "^3.10.1", + "lodash-es": "^4.17.22", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-router-dom": "^6.26.1", + "semver": "^7.7.3", + "styled-components": "^6.1.13", + "tar-stream": "^3.1.8", + "unzipper": "^0.12.3", + "yaml": "^2.8.2", }, "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", "@types/bun": "latest", + "@types/minimatch": "^6.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@types/tar-stream": "^3.1.4", + "@vercel/ncc": "^0.38.1", + "@vitejs/plugin-react": "^4.3.0", + "autoprefixer": "^10.4.0", + "vite": "^5.4.0", + "vitest": "^4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/subspace/test-servers": { - "name": "test-servers", + "src/systems/slates/clients/registry": { + "name": "@metorial-services/slates-registry-client", + "version": "1.0.1", "dependencies": { - "@modelcontextprotocol/sdk": "^1.25.3", - "cors": "^2.8.6", - "express": "^5.2.1", + "@mtsrc/rpc-client": "1.0.0", + }, + "devDependencies": { + "dts-bundle-generator": "^9.5.1", + "microbundle": "^0.15.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/systems/slates/clients/registry-internal": { + "name": "@metorial-services/slates-registry-internal-client", + "version": "1.0.0", + "dependencies": { + "@mtsrc/rpc-client": "1.0.0", + }, + "devDependencies": { + "dts-bundle-generator": "^9.5.1", + "microbundle": "^0.15.1", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/apps/controller": { + "name": "@metorial-subspace/app-controller", + "dependencies": { + "@hono/zod-validator": "^0.7.6", + "@metorial-platform-systems/signal-client": "workspace:*", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/module-agent": "^1.0.0", + "@metorial-subspace/module-auth": "^1.0.0", + "@metorial-subspace/module-callback": "^1.0.0", + "@metorial-subspace/module-catalog": "^1.0.0", + "@metorial-subspace/module-connection": "^1.0.0", + "@metorial-subspace/module-custom-provider": "^1.0.0", + "@metorial-subspace/module-deployment": "^1.0.0", + "@metorial-subspace/module-identity": "^1.0.0", + "@metorial-subspace/module-integration": "^1.0.0", + "@metorial-subspace/module-session": "^1.0.0", + "@metorial-subspace/module-skills": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/presenters": "^1.0.0", + "@metorial-subspace/provider-native": "^1.0.0", + "@metorial-subspace/provider-shuttle": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.26.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@sentry/bun": "^10.34.0", + "@sentry/cli": "^3.2.0", + "@types/minimatch": "^6.0.0", + "@vercel/ncc": "^0.38.3", + "hono": "^4.11.3", "zod": "^4.3.6", }, "devDependencies": { + "@metorial-platform-systems/shuttle-client": "^1.0.0", + "@metorial-subspace/connection-utils": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/provider": "^1.0.0", + "@metorial-subspace/retry-utils": "^1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/testing-tools": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", - "@types/cors": "^2.8.19", - "@types/express": "^5.0.6", + "express": "^5.2.1", + "vitest": "4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/synthesis/service": { - "name": "@metorial/synthesis", + "src/systems/subspace/apps/dev": { + "name": "@metorial/subspace-dev", "dependencies": { - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/redis": "^1.0.6", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "1.0.10", - "@metorial-services/scout-client": "^1.0.0", - "@openharness/core": "^0.6.2", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@prisma/extension-read-replicas": "^0.5.0", - "@sentry/bun": "^10.38.0", + "@hono/zod-validator": "^0.7.6", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/module-auth": "^1.0.0", + "@metorial-subspace/module-catalog": "^1.0.0", + "@metorial-subspace/module-connection": "^1.0.0", + "@metorial-subspace/module-custom-provider": "^1.0.0", + "@metorial-subspace/module-deployment": "^1.0.0", + "@metorial-subspace/module-session": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/presenters": "^1.0.0", + "@metorial-subspace/provider-shuttle": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.26.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@sentry/bun": "^10.34.0", "@sentry/cli": "^3.2.0", - "ai": "^6.0.175", - "hono": "^4.9.6", - "just-bash": "^2.14.4", - "prisma": "^7.2.0", - "prisma-json-types-generator": "^4.0.1", - "zod": "^4.4.3", + "@vercel/ncc": "^0.38.3", + "hono": "^4.11.3", + "zod": "^4.3.6", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", + "@metorial-platform-systems/shuttle-client": "^1.0.0", + "@metorial-subspace/connection-utils": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/provider": "^1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/testing-tools": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", - "@types/node": "^25.0.3", - "@vercel/ncc": "^0.38.1", - "vitest": "^4.0.17", + "express": "^5.2.1", + "vitest": "4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/systems/voyager/service": { - "name": "@metorial/voyager", + "src/systems/subspace/apps/public": { + "name": "@metorial-subspace/app-public", "dependencies": { "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", - "@lowerdeck/api-mux": "^1.0.2", - "@lowerdeck/cache": "^1.0.1", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.0.7", - "@lowerdeck/encryption": "^1.0.7", - "@lowerdeck/env": "^1.0.4", - "@lowerdeck/error": "^1.1.0", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.5", - "@lowerdeck/queue": "^1.0.7", - "@lowerdeck/rpc-client": "^1.1.0", - "@lowerdeck/rpc-server": "^1.0.7", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.3", - "@lowerdeck/slugify": "^1.0.5", - "@lowerdeck/validation": "^1.0.4", - "@metorial-platform-systems/object-storage-client": "workspace:*", - "@metorial-services/forge-client": "^1.0.3", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", - "@prisma/extension-read-replicas": "^0.5.0", - "@sentry/bun": "^10.38.0", + "@hono/zod-validator": "^0.7.6", + "@hookform/resolvers": "^5.2.2", + "@metorial-io/data-hooks": "^1.0.1", + "@metorial-io/pages": "^1.0.0", + "@metorial-subspace/app-controller": "workspace:*", + "@metorial-subspace/module-auth": "^1.0.0", + "@metorial-subspace/module-integration": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/presenters": "^1.0.0", + "@metorial-subspace/provider-native": "^1.0.0", + "@mtsrc/api-key": "1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@sentry/bun": "^10.34.0", "@sentry/cli": "^3.2.0", - "@types/pg": "^8.16.0", - "algoliasearch": "^5.48.1", - "axios": "^1.13.2", - "date-fns": "^4.1.0", - "drizzle-orm": "^0.45.1", - "ipaddr.js": "^2.3.0", - "jszip": "^3.10.1", - "pg": "^8.16.3", - "prisma": "^7.2.0", - "prisma-json-types-generator": "^4.0.1", + "@types/react-dom": "^19.2.3", + "@vercel/ncc": "^0.38.3", + "@vitejs/plugin-react": "^4.3.1", + "framer-motion": "^12.9.4", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-router-dom": "^6.26.1", + "semver": "^7.7.3", "snowflake-uuid": "^1.0.0", + "styled-components": "^6.1.13", + "unzipper": "^0.12.3", + "vite": "^5.4.1", "yaml": "^2.8.2", + "yup": "^1.7.1", }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", + "@mtsrc/testing-tools": "1.0.0", "@types/bun": "latest", - "@types/node": "^25.0.3", - "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17", + "vitest": "^4.0.17", }, "peerDependencies": { "typescript": "^5", }, }, - "src/tooling/control": { - "name": "@metorial/control", - "version": "0.1.0", - "bin": { - "control": "./src/cli.ts", + "src/systems/subspace/apps/worker": { + "name": "@metorial-subspace/app-worker", + "dependencies": { + "@metorial-subspace/app-controller": "workspace:*", + "@metorial-subspace/module-auth": "^1.0.0", + "@metorial-subspace/module-callback": "^1.0.0", + "@metorial-subspace/module-catalog": "^1.0.0", + "@metorial-subspace/module-connection": "^1.0.0", + "@metorial-subspace/module-deployment": "^1.0.0", + "@metorial-subspace/module-integration": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/module-skills": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/provider-native": "^1.0.0", + "@metorial-subspace/provider-slates": "^1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@sentry/bun": "^10.34.0", + "@sentry/cli": "^3.2.0", + "@vercel/ncc": "^0.38.3", + }, + "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", + "@types/bun": "latest", + "vitest": "^4.0.17", + }, + "peerDependencies": { + "typescript": "^5", }, + }, + "src/systems/subspace/db": { + "name": "@metorial-subspace/db", + "version": "1.0.0", "dependencies": { - "sade": "^1.8.1", - "smol-toml": "^1.3.1", - "yaml": "^2.8.2", + "@metorial-subspace/tsconfig": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.25.2", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "dotenv": "^17.2.3", + "p-queue": "^9.1.0", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", }, "devDependencies": { "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/modules/agent": { + "name": "@metorial-subspace/module-agent", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-identity": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/module-search": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/provider": "^1.0.0", + "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", "typescript": "5.8.2", + "vitest": "^3.1.2", }, }, - }, - "overrides": { - "@aws-sdk/client-cognito-identity": "3.1048.0", - "@aws-sdk/client-dynamodb": "3.1048.0", - "@aws-sdk/client-sso": "3.1048.0", - "@aws-sdk/core": "3.974.11", - "@aws-sdk/credential-providers": "3.1048.0", - "@aws-sdk/nested-clients": "3.997.9", - "@aws-sdk/util-dynamodb": "3.996.2", - }, - "packages": { - "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.76", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-kOuvT9e6PygFvgYpkr4v9gjvmcMPfJp79jaXjeRl9Gpoj2OXdtc3ero7o1ic+tiSBw5IMubxXFO68BCA/axGJA=="], + "src/systems/subspace/modules/auth": { + "name": "@metorial-subspace/module-auth", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-deployment": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/module-search": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/provider": "^1.0.0", + "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0", + "date-fns": "^4.1.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/callback": { + "name": "@metorial-subspace/module-callback", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/provider-slates": "^1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/catalog": { + "name": "@metorial-subspace/module-catalog", + "version": "1.0.0", + "dependencies": { + "@metorial-services/registry-client": "^1.0.0", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/module-search": "^1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + "date-fns": "^4.1.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/connection": { + "name": "@metorial-subspace/module-connection", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/conduit": "^1.0.0", + "@metorial-subspace/connection-utils": "^1.0.0", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/generator": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-agent": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/provider": "^1.0.0", + "@metorial-subspace/redis-url": "^1.0.0", + "@metorial-subspace/store": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.25.2", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/case": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/unique": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@types/lodash": "^4.17.23", + "date-fns": "^4.1.0", + "lodash": "^4.17.23", + "nats": "^2.29.3", + "uuid": "^13.0.0", + "zod": "^4.3.5", + }, + "devDependencies": { + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/custom-provider": { + "name": "@metorial-subspace/module-custom-provider", + "version": "1.0.0", + "dependencies": { + "@metorial-platform-systems/origin-client": "^1.0.0", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/module-search": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/provider": "^1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/deployment": { + "name": "@metorial-subspace/module-deployment", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/module-search": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/provider": "^1.0.0", + "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/identity": { + "name": "@metorial-subspace/module-identity", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/module-search": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/provider": "^1.0.0", + "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + "date-fns": "^4.1.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/integration": { + "name": "@metorial-subspace/module-integration", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-auth": "^1.0.0", + "@metorial-subspace/module-catalog": "^1.0.0", + "@metorial-subspace/module-deployment": "^1.0.0", + "@metorial-subspace/module-identity": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/module-search": "^1.0.0", + "@metorial-subspace/module-session": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + "date-fns": "^4.1.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/provider-internal": { + "name": "@metorial-subspace/module-provider-internal", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/module-search": "^1.0.0", + "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + "date-fns": "^4.1.0", + "safe-regex2": "^5.0.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/search": { + "name": "@metorial-subspace/module-search", + "version": "1.0.0", + "dependencies": { + "@metorial-platform-systems/voyager-client": "workspace:*", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/modules/session": { + "name": "@metorial-subspace/module-session", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-agent": "^1.0.0", + "@metorial-subspace/module-catalog": "^1.0.0", + "@metorial-subspace/module-deployment": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@metorial-subspace/provider": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0", + "p-queue": "^8.0.1", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/skills": { + "name": "@metorial-subspace/module-skills", + "version": "1.0.0", + "dependencies": { + "@metorial-platform-systems/cargo-client": "^1.0.0", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@metorial-subspace/module-catalog": "^1.0.0", + "@metorial-subspace/module-integration": "^1.0.0", + "@metorial-subspace/module-search": "^1.0.0", + "@metorial-subspace/module-tenant": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/modules/tenant": { + "name": "@metorial-subspace/module-tenant", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/connection-utils": "^1.0.0", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/list-utils": "^1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@metorial-subspace/tsconfig": "^1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2", + }, + }, + "src/systems/subspace/packages/conduit": { + "name": "@metorial-subspace/conduit", + "version": "1.0.0", + "dependencies": { + "@mtsrc/serialize": "1.0.0", + "ioredis": "^5.4.2", + "nats": "^2.28.2", + }, + "devDependencies": { + "@types/bun": "latest", + "vitest": "^2.1.8", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/packages/connection-utils": { + "name": "@metorial-subspace/connection-utils", + "version": "1.0.0", + "dependencies": { + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.25.2", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/validation": "1.0.0", + "zod": "^4.3.5", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/packages/generator": { + "name": "@metorial-subspace/generator", + "version": "1.0.0", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/packages/list-utils": { + "name": "@metorial-subspace/list-utils", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@mtsrc/error": "1.0.0", + "date-fns": "^4.1.0", + }, + "devDependencies": { + "@types/bun": "latest", + "vitest": "^3.1.2", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/packages/presenters": { + "name": "@metorial-subspace/presenters", + "version": "1.0.0", + "dependencies": { + "@metorial-platform-systems/slates-client": "^1.0.0", + "@metorial-subspace/connection-utils": "^1.0.0", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/provider-shuttle": "^1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/validation": "1.0.0", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/packages/redis-url": { + "name": "@metorial-subspace/redis-url", + "version": "1.0.0", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/packages/retry-utils": { + "name": "@metorial-subspace/retry-utils", + "version": "1.0.0", + "dependencies": { + "@mtsrc/delay": "1.0.0", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/packages/store": { + "name": "@metorial-subspace/store", + "version": "1.0.0", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/packages/tsconfig": { + "name": "@metorial-subspace/tsconfig", + "version": "1.0.0", + "dependencies": { + "@types/node": "^22.15.3", + }, + }, + "src/systems/subspace/provider-backends/provider-manager": { + "name": "@metorial-subspace/provider", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/provider-native": "^1.0.0", + "@metorial-subspace/provider-shuttle": "^1.0.0", + "@metorial-subspace/provider-slates": "^1.0.0", + "@mtsrc/cache": "1.0.0", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/provider-backends/provider-native": { + "name": "@metorial-subspace/provider-native", + "version": "1.0.0", + "dependencies": { + "@metorial-services/scout-client": "^1.0.0", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "zod": "^4.3.6", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/provider-backends/provider-shuttle": { + "name": "@metorial-subspace/provider-shuttle", + "version": "1.0.0", + "dependencies": { + "@metorial-platform-systems/shuttle-client": "1.0.0", + "@metorial-services/registry-client": "^1.0.0", + "@metorial-subspace/connection-utils": "^1.0.0", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/provider-utils": "^1.0.0", + "@metorial-subspace/retry-utils": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.25.3", + "@mtsrc/cache": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + "p-queue": "^9.1.0", + "zod": "^4.3.6", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/provider-backends/provider-slates": { + "name": "@metorial-subspace/provider-slates", + "version": "1.0.0", + "dependencies": { + "@metorial-platform-systems/slates-client": "^1.0.0", + "@metorial-services/registry-client": "^1.0.0", + "@metorial-subspace/db": "^1.0.0", + "@metorial-subspace/module-catalog": "^1.0.0", + "@metorial-subspace/module-provider-internal": "^1.0.0", + "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + "p-queue": "^9.1.0", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/provider-backends/provider-utils": { + "name": "@metorial-subspace/provider-utils", + "version": "1.0.0", + "dependencies": { + "@metorial-subspace/db": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.25.3", + "@mtsrc/base62": "1.0.0", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/subspace/test-servers": { + "name": "test-servers", + "dependencies": { + "@modelcontextprotocol/sdk": "^1.25.3", + "cors": "^2.8.6", + "express": "^5.2.1", + "zod": "^4.3.6", + }, + "devDependencies": { + "@types/bun": "latest", + "@types/cors": "^2.8.19", + "@types/express": "^5.0.6", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/synthesis/service": { + "name": "@metorial/synthesis", + "dependencies": { + "@metorial-services/scout-client": "^1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@openharness/core": "^0.6.2", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", + "ai": "^6.0.175", + "hono": "^4.9.6", + "just-bash": "^2.14.4", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "zod": "^4.4.3", + }, + "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", + "@types/bun": "latest", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "vitest": "^4.0.17", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/systems/voyager/service": { + "name": "@metorial/voyager", + "dependencies": { + "@aws-sdk/client-cloudwatch-logs": "^3.957.0", + "@aws-sdk/client-iam": "^3.957.0", + "@aws-sdk/client-lambda": "^3.958.0", + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial-services/forge-client": "^1.0.3", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", + "@prisma/extension-read-replicas": "^0.5.0", + "@sentry/bun": "^10.38.0", + "@sentry/cli": "^3.2.0", + "@types/pg": "^8.16.0", + "algoliasearch": "^5.48.1", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "drizzle-orm": "^0.45.1", + "ipaddr.js": "^2.3.0", + "jszip": "^3.10.1", + "pg": "^8.16.3", + "prisma": "^7.2.0", + "prisma-json-types-generator": "^4.0.1", + "snowflake-uuid": "^1.0.0", + "yaml": "^2.8.2", + }, + "devDependencies": { + "@mtsrc/testing-tools": "1.0.0", + "@types/bun": "latest", + "@types/node": "^25.0.3", + "@vercel/ncc": "^0.38.1", + "vitest": "4.0.17", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "src/tooling/control": { + "name": "@metorial/control", + "version": "0.1.0", + "bin": { + "control": "./src/cli.ts", + }, + "dependencies": { + "sade": "^1.8.1", + "smol-toml": "^1.3.1", + "yaml": "^2.8.2", + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "5.8.2", + }, + }, + }, + "overrides": { + "@aws-sdk/client-cognito-identity": "3.1048.0", + "@aws-sdk/client-dynamodb": "3.1048.0", + "@aws-sdk/client-sso": "3.1048.0", + "@aws-sdk/core": "3.974.11", + "@aws-sdk/credential-providers": "3.1048.0", + "@aws-sdk/nested-clients": "3.997.9", + "@aws-sdk/util-dynamodb": "3.996.2", + }, + "packages": { + "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.76", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-kOuvT9e6PygFvgYpkr4v9gjvmcMPfJp79jaXjeRl9Gpoj2OXdtc3ero7o1ic+tiSBw5IMubxXFO68BCA/axGJA=="], + + "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.112", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-jiBao9pR4owWyjo0BnuNc7WSQBGOD0thysE4AFgZXaG+zMFbISQXUkJr7ePw/phBvePy7jE5FSA2Lf7lwqUiiQ=="], + + "@ai-sdk/google": ["@ai-sdk/google@3.0.72", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-9EVG0AdUhs0hJ2+sqRb4IURZnsBahuU1CQELu+hfItm0wUTzxnVhIbQ4/jJkG/QFPtBUvMefCwDT7HX8T2HVbQ=="], + + "@ai-sdk/mcp": ["@ai-sdk/mcp@1.0.42", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "pkce-challenge": "^5.0.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ctRhX9vNLXvjGSFf+RlM+ZutIhlzIgMPWzo2BoJKfIW9JzLneA/57bZkkaUvWSdbYFu1FCyxMarNV/4D/pOUzA=="], + + "@ai-sdk/openai": ["@ai-sdk/openai@3.0.63", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-4yY/m8a57MNNVoJCsXuNblKf6BO4yuAuLKRX4tzSNffBEBSp1FlcWdPE0Z4FkqUeS0AJhYSSqp0GIiA/cIcDNA=="], + + "@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.47", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Enm5UlL0zUCrW3792opk5h7hRWxZOZzDe6eQYVFqX9LUOGGCe1h8MZWAGim765nwzgnjlpeYOsuzZmLtRsTPlg=="], + + "@ai-sdk/provider": ["@ai-sdk/provider@3.0.10", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw=="], + + "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.27", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ubkAJ+xODouwtmN1tYlvTPphH1hPOBfZaEQe8U7skGvFAnIRs9PPpsq57bC2+Ky/MB4yzhd6YOsxTAx9sGpazw=="], + + "@ai-sdk/xai": ["@ai-sdk/xai@3.0.89", "", { "dependencies": { "@ai-sdk/openai-compatible": "2.0.47", "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ecFE4iQnWePrxPYuSUYCh8lpoKZ52J3jao5whDVC3+Z9Cu/XeyOe2oUGzsYSUPgbJNi/ZmD/KN69bHbUcAHFvw=="], + + "@algolia/abtesting": ["@algolia/abtesting@1.18.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-aehCadlWOGvrT91KUIZpC0MbB8KBW9yUuvTJFd2xesR7le/IsT4nJUnjCCZ4ZqZCeTcPHPV5mo//fZ5oxcSVYw=="], + + "@algolia/client-abtesting": ["@algolia/client-abtesting@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-HmXOGBOAOJPounpBzBpuY0zDYeiCpxgHnQmuA7JO6ScukcBdGp3/XM9zJk5pJx/xNGD68mbPGXWpDxGtl6BwDQ=="], + + "@algolia/client-analytics": ["@algolia/client-analytics@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-5oo4+I8iixie9vXhCyNFCzeIr8pqA3FQ//VsLHTDvZAV4ttYOPGvYHGQq5NSalrLx5Jc3dRro/5uDOlnUMcBJg=="], + + "@algolia/client-common": ["@algolia/client-common@5.52.1", "", {}, "sha512-qCDoZfx5MpX7XQzvQ3bC4tSEMkQWQMaF/ABtLuoze03Y/flR563CCSws02qIJ23oX7lxl92LsilZjINVyTdtLw=="], + + "@algolia/client-insights": ["@algolia/client-insights@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-hnGs0/lsFJ2PWDxNBz7pxreXo/Xz7gxYRcfePBUjsH26ad0kU/sgnVZd9LwWBpsQv65z2jlb5dkyaB9WE9M9FQ=="], + + "@algolia/client-personalization": ["@algolia/client-personalization@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-2VxxNc/uBysyKvGeBdSM5n9eIDKH8kWD7wd9/yqbJAiVwU4Yv6tU1LSJusHKrXV/aCu1KW7t9Gug9QyeEmtn/Q=="], + + "@algolia/client-query-suggestions": ["@algolia/client-query-suggestions@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-O6mPtsw3xEfNOe6gWFpYLeAZAIljNa4Hgna3bq15PwyN7nbjTY0wXJFRbzs/0YVf75Br+SbOQUmjKxXYjDiSiQ=="], + + "@algolia/client-search": ["@algolia/client-search@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-gA8oJOV1LnQQkDf91iebNnFInHuW0gRPEgLSOQ7EfipCEjYTHm5swm1DlH9H5RaRw4RrHuzHBegnlzc0MAstcg=="], + + "@algolia/ingestion": ["@algolia/ingestion@1.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-U9zZfc5xIu9wRxZkt+HceJUAD4VKHKbAyLSloJdEyMRmphXeibfrY9cxqIXBcmPeZzGhn3Imb35Dq8l19PkJhw=="], + + "@algolia/monitoring": ["@algolia/monitoring@1.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-a3SGNceHmkQfq77iG8Ka+w1pvwfZa/0lzEIgse30fL0kD+yKnd/dg0dQvSfFPAEt2f21DMcGkDSSeJlO3KdQjQ=="], + + "@algolia/recommend": ["@algolia/recommend@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-z98QEguCFDpxb4S/PyrUK1igqF8tPsdbqOUUO6ON91vJ58w+Gwa6ncrI0oNXSFcrkxA5EqPKPQ2A1PBCn08TYQ=="], + + "@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1" } }, "sha512-CI7+/0I11QeZM59Uc8whd2or0kqzFVjpaPn9Qpwll/krHcBAxk24WkAQ6WX+IwDVMfpont4YGbKwAmCre3vE8Q=="], + + "@algolia/requester-fetch": ["@algolia/requester-fetch@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1" } }, "sha512-S6bDuw9byfOvm3T71cgdoZgrgnZq6hpdMLkx52Louh57nUAmvGQESz2aojOynQHjbTiV55smvAFbgn0qT4tJrg=="], + + "@algolia/requester-node-http": ["@algolia/requester-node-http@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1" } }, "sha512-tqZXM+54rWo4mk5jL5Z/flE11nPmNEdXwFBM5py9DkOmbjeCNemfVd45FyM97XdzfZ0dl9uOJC6PYn1FpkeyQg=="], + + "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], + + "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], + + "@aws-crypto/crc32c": ["@aws-crypto/crc32c@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag=="], + + "@aws-crypto/sha1-browser": ["@aws-crypto/sha1-browser@5.2.0", "", { "dependencies": { "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg=="], + + "@aws-crypto/sha256-browser": ["@aws-crypto/sha256-browser@5.2.0", "", { "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw=="], + + "@aws-crypto/sha256-js": ["@aws-crypto/sha256-js@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA=="], + + "@aws-crypto/supports-web-crypto": ["@aws-crypto/supports-web-crypto@5.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg=="], + + "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], + + "@aws-sdk/client-cloudwatch-logs": ["@aws-sdk/client-cloudwatch-logs@3.1015.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.24", "@aws-sdk/credential-provider-node": "^3.972.25", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.25", "@aws-sdk/region-config-resolver": "^3.972.9", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.11", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/eventstream-serde-browser": "^4.2.12", "@smithy/eventstream-serde-config-resolver": "^4.3.12", "@smithy/eventstream-serde-node": "^4.2.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.27", "@smithy/middleware-retry": "^4.4.44", "@smithy/middleware-serde": "^4.2.15", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.5.0", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.43", "@smithy/util-defaults-mode-node": "^4.2.47", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-lo6LoJXPeb3uAKdIuHvCUfvqpOXi8bQ2EsHo2blSVNY8PJEl0N5vqSCZNjLqnKfX7H7vLHm7Vq1ePOxL/5AjvA=="], + + "@aws-sdk/client-codebuild": ["@aws-sdk/client-codebuild@3.1030.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.27", "@aws-sdk/credential-provider-node": "^3.972.30", "@aws-sdk/middleware-host-header": "^3.972.9", "@aws-sdk/middleware-logger": "^3.972.9", "@aws-sdk/middleware-recursion-detection": "^3.972.10", "@aws-sdk/middleware-user-agent": "^3.972.29", "@aws-sdk/region-config-resolver": "^3.972.11", "@aws-sdk/types": "^3.973.7", "@aws-sdk/util-endpoints": "^3.996.6", "@aws-sdk/util-user-agent-browser": "^3.972.9", "@aws-sdk/util-user-agent-node": "^3.973.15", "@smithy/config-resolver": "^4.4.14", "@smithy/core": "^3.23.14", "@smithy/fetch-http-handler": "^5.3.16", "@smithy/hash-node": "^4.2.13", "@smithy/invalid-dependency": "^4.2.13", "@smithy/middleware-content-length": "^4.2.13", "@smithy/middleware-endpoint": "^4.4.29", "@smithy/middleware-retry": "^4.5.0", "@smithy/middleware-serde": "^4.2.17", "@smithy/middleware-stack": "^4.2.13", "@smithy/node-config-provider": "^4.3.13", "@smithy/node-http-handler": "^4.5.2", "@smithy/protocol-http": "^5.3.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.45", "@smithy/util-defaults-mode-node": "^4.2.49", "@smithy/util-endpoints": "^3.3.4", "@smithy/util-middleware": "^4.2.13", "@smithy/util-retry": "^4.3.0", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-n1Mkwx5Kntrr7tL+zqnoNzN6Lfx+iBLknuyRDev4GtyrN4lxWyTTMssE5CfmM98+brPr6Ehk5qzuLL+0vje/Jw=="], + + "@aws-sdk/client-cognito-identity": ["@aws-sdk/client-cognito-identity@3.1048.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-node": "^3.972.42", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-eJUSxEwhz9fKmjhRgOvFTuJ+SjCu15SpgYo3aSJ6rjs2IaWi2F8NcvOuejHb0a01a/J71/9bdjUDrQLH2kUmkg=="], + + "@aws-sdk/client-dynamodb": ["@aws-sdk/client-dynamodb@3.1048.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-node": "^3.972.42", "@aws-sdk/dynamodb-codec": "^3.973.11", "@aws-sdk/middleware-endpoint-discovery": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-253MF+BhKKKppRp6f/zs8bFXCknR6vD+7Myd/pIsFcrsk+Yu2Koqyr5JXVsHPgxDtpFvjY90Iegtc8Q+MmaPww=="], + + "@aws-sdk/client-iam": ["@aws-sdk/client-iam@3.1015.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.24", "@aws-sdk/credential-provider-node": "^3.972.25", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.25", "@aws-sdk/region-config-resolver": "^3.972.9", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.11", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.27", "@smithy/middleware-retry": "^4.4.44", "@smithy/middleware-serde": "^4.2.15", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.5.0", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.43", "@smithy/util-defaults-mode-node": "^4.2.47", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-3srP6VtEV3Xui+ItA16TjbiX75jrG8bNOMLQtQASzKMgzuvWezn3RaOl6KBLU2NmeNTU8DmVv+Rsx/1uICc+CQ=="], + + "@aws-sdk/client-kms": ["@aws-sdk/client-kms@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-VDv6dFeAUgTTI2p0YSqiwwdsdh+sw7uwu7oR+KjE49FbiSls/ky0gsDjcE+sAb1ujejvR/FVpnE7NlYlNlTGPg=="], + + "@aws-sdk/client-lambda": ["@aws-sdk/client-lambda@3.1015.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.24", "@aws-sdk/credential-provider-node": "^3.972.25", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.25", "@aws-sdk/region-config-resolver": "^3.972.9", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.11", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/eventstream-serde-browser": "^4.2.12", "@smithy/eventstream-serde-config-resolver": "^4.3.12", "@smithy/eventstream-serde-node": "^4.2.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.27", "@smithy/middleware-retry": "^4.4.44", "@smithy/middleware-serde": "^4.2.15", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.5.0", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.43", "@smithy/util-defaults-mode-node": "^4.2.47", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-stream": "^4.5.20", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-03oRSKMFxPSXIfZsB7RpYopynPn714nS/0SI5OJ0izxld+qdwzkcnlvb/NGONXh7emn62iPxF1X32wInXM6lZw=="], + + "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.1001.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.16", "@aws-sdk/credential-provider-node": "^3.972.15", "@aws-sdk/middleware-bucket-endpoint": "^3.972.6", "@aws-sdk/middleware-expect-continue": "^3.972.6", "@aws-sdk/middleware-flexible-checksums": "^3.973.2", "@aws-sdk/middleware-host-header": "^3.972.6", "@aws-sdk/middleware-location-constraint": "^3.972.6", "@aws-sdk/middleware-logger": "^3.972.6", "@aws-sdk/middleware-recursion-detection": "^3.972.6", "@aws-sdk/middleware-sdk-s3": "^3.972.16", "@aws-sdk/middleware-ssec": "^3.972.6", "@aws-sdk/middleware-user-agent": "^3.972.16", "@aws-sdk/region-config-resolver": "^3.972.6", "@aws-sdk/signature-v4-multi-region": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-endpoints": "^3.996.3", "@aws-sdk/util-user-agent-browser": "^3.972.6", "@aws-sdk/util-user-agent-node": "^3.973.1", "@smithy/config-resolver": "^4.4.9", "@smithy/core": "^3.23.7", "@smithy/eventstream-serde-browser": "^4.2.10", "@smithy/eventstream-serde-config-resolver": "^4.3.10", "@smithy/eventstream-serde-node": "^4.2.10", "@smithy/fetch-http-handler": "^5.3.12", "@smithy/hash-blob-browser": "^4.2.11", "@smithy/hash-node": "^4.2.10", "@smithy/hash-stream-node": "^4.2.10", "@smithy/invalid-dependency": "^4.2.10", "@smithy/md5-js": "^4.2.10", "@smithy/middleware-content-length": "^4.2.10", "@smithy/middleware-endpoint": "^4.4.21", "@smithy/middleware-retry": "^4.4.38", "@smithy/middleware-serde": "^4.2.11", "@smithy/middleware-stack": "^4.2.10", "@smithy/node-config-provider": "^4.3.10", "@smithy/node-http-handler": "^4.4.13", "@smithy/protocol-http": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-body-length-node": "^4.2.2", "@smithy/util-defaults-mode-browser": "^4.3.37", "@smithy/util-defaults-mode-node": "^4.2.40", "@smithy/util-endpoints": "^3.3.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-retry": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "@smithy/util-waiter": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-uKgFjQuBjMcd0iigLQwnqIp9gOy/5TGBxa42rcb6l5byDt1mrwOe6fyWTEUEJaNHG2LKYSPUibteGvM1zfm0Rw=="], + + "@aws-sdk/client-ses": ["@aws-sdk/client-ses@3.1052.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.13", "@aws-sdk/credential-provider-node": "^3.972.44", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/fetch-http-handler": "^5.4.3", "@smithy/node-http-handler": "^4.7.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-uYmk/sieuniKhq4Qvc7Lg0b7HX3Td3SeJZsABIy0JX1EH0Y5Zl9RXMRloG2h/IwU9ZS2Gj1a00gBop0s6vP7nw=="], + + "@aws-sdk/core": ["@aws-sdk/core@3.974.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws-sdk/xml-builder": "^3.972.24", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/core": "^3.24.2", "@smithy/signature-v4": "^5.4.2", "@smithy/types": "^4.14.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-QpnINq5FZH6EOaDEkmHdT7eUunbvD27pDNQypaWjFyYz7Zl1q3UCMQErBZxpmfGfI7MvI2TlK8KTkgNpv8b1ug=="], + + "@aws-sdk/crc64-nvme": ["@aws-sdk/crc64-nvme@3.972.3", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UExeK+EFiq5LAcbHm96CQLSia+5pvpUVSAsVApscBzayb7/6dJBJKwV4/onsk4VbWSmqxDMcfuTD+pC4RxgZHg=="], + + "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.972.34", "", { "dependencies": { "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-hbOTV+vNi3kKo3J6qxylHSfcnSbnnVoMe1KA1VMjYazAEPmk+HSgLUksOemptoNldvSLTSj82ndB1mcZDMP3iQ=="], + + "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.22", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-cXp0VTDWT76p3hyK5D51yIKEfpf6/zsUvMfaB8CkyqadJxMQ8SbEeVroregmDlZbtG31wkj9ei0WnftmieggLg=="], + + "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/types": "^3.973.6", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/node-http-handler": "^4.5.0", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/util-stream": "^4.5.20", "tslib": "^2.6.2" } }, "sha512-h694K7+tRuepSRJr09wTvQfaEnjzsKZ5s7fbESrVds02GT/QzViJ94/HCNwM7bUfFxqpPXHxulZfL6Cou0dwPg=="], + + "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/credential-provider-env": "^3.972.22", "@aws-sdk/credential-provider-http": "^3.972.24", "@aws-sdk/credential-provider-login": "^3.972.24", "@aws-sdk/credential-provider-process": "^3.972.22", "@aws-sdk/credential-provider-sso": "^3.972.24", "@aws-sdk/credential-provider-web-identity": "^3.972.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-O46fFmv0RDFWiWEA9/e6oW92BnsyAXuEgTTasxHligjn2RCr9L/DK773m/NoFaL3ZdNAUz8WxgxunleMnHAkeQ=="], + + "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-0LBitxXiAiaE5nlFPfpNIww/8FRY/I7WIndWsc9GmNFOM7cE1wNpVNQEGEk9Outg5l8xl+3vybxFyUy4l9q/LQ=="], + + "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.25", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.22", "@aws-sdk/credential-provider-http": "^3.972.24", "@aws-sdk/credential-provider-ini": "^3.972.24", "@aws-sdk/credential-provider-process": "^3.972.22", "@aws-sdk/credential-provider-sso": "^3.972.24", "@aws-sdk/credential-provider-web-identity": "^3.972.24", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-m7dR0Dsva2P+VUpL+VkC0WwiDby5pgmWXkRVDB5rlwv0jXJrQJf7YMtCoM8Wjk0H9jPeCYOxOXXcIgp/qp5Alg=="], + + "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.22", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Os32s8/4gTZjBk5BtoS/cuTILaj+K72d0dVG7TCJX/fC4598cxwLDmf1AEHEpER5oL3K//yETjvFaz0V8oO5Xw=="], + + "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/token-providers": "3.1015.0", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-PaFv7snEfypU2yXkpvfyWgddEbDLtgVe51wdZlinhc2doubBjUzJZZpgwuF2Jenl1FBydMhNpMjD6SBUM3qdSA=="], + + "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-J6H4R1nvr3uBTqD/EeIPAskrBtET4WFfNhpFySr2xW7bVZOXpQfPjrLSIx65jcNjBmLXzWq8QFLdVoGxiGG/SA=="], + + "@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.1048.0", "", { "dependencies": { "@aws-sdk/client-cognito-identity": "3.1048.0", "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-cognito-identity": "^3.972.34", "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-ini": "^3.972.41", "@aws-sdk/credential-provider-login": "^3.972.41", "@aws-sdk/credential-provider-node": "^3.972.42", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-qradm+eSLJTWQLd/TOxlETL1rMQ/ozvr2iU7wga5hqoox/FiXV9VLtomv3Cqwa6GdpYGWI8ebfSu6mS18I1PyQ=="], + + "@aws-sdk/dynamodb-codec": ["@aws-sdk/dynamodb-codec@3.973.11", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-9BLkRYlLwwVlFg3RWOXGkmwXM7kDz0Adi/4+O8SvvdiW9kkPiHGSKPuJHdxUAHJROop0zjlpqKVT+R6Z5CPIXg=="], + + "@aws-sdk/endpoint-cache": ["@aws-sdk/endpoint-cache@3.972.5", "", { "dependencies": { "mnemonist": "0.38.3", "tslib": "^2.6.2" } }, "sha512-itVdge0NozgtgmtbZ25FVwWU3vGlE7x7feE/aOEJNkQfEpbkrF8Rj1QmnK+2blFfYE1xWt/iU+6/jUp/pv1+MA=="], + + "@aws-sdk/middleware-bucket-endpoint": ["@aws-sdk/middleware-bucket-endpoint@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-arn-parser": "^3.972.2", "@smithy/node-config-provider": "^4.3.10", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-3H2bhvb7Cb/S6WFsBy/Dy9q2aegC9JmGH1inO8Lb2sWirSqpLJlZmvQHPE29h2tIxzv6el/14X/tLCQ8BQU6ZQ=="], + + "@aws-sdk/middleware-endpoint-discovery": ["@aws-sdk/middleware-endpoint-discovery@3.972.13", "", { "dependencies": { "@aws-sdk/endpoint-cache": "^3.972.5", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-1r6EkFdSQ4quTP3pW8yWIcYuyDwdwdBxGr+kfuPFYE3DqR+1gBc6NyJneAyoIs+wc/cUfnyJ4ZYC0T2SQTxP9A=="], + + "@aws-sdk/middleware-expect-continue": ["@aws-sdk/middleware-expect-continue@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-QMdffpU+GkSGC+bz6WdqlclqIeCsOfgX8JFZ5xvwDtX+UTj4mIXm3uXu7Ko6dBseRcJz1FA6T9OmlAAY6JgJUg=="], + + "@aws-sdk/middleware-flexible-checksums": ["@aws-sdk/middleware-flexible-checksums@3.973.2", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/core": "^3.973.16", "@aws-sdk/crc64-nvme": "^3.972.3", "@aws-sdk/types": "^3.973.4", "@smithy/is-array-buffer": "^4.2.1", "@smithy/node-config-provider": "^4.3.10", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-middleware": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-KM6QujWdasNjRLG+f7YEqEY5D36vR6Govm7nPIwxjILpb5rJ0pPJZpYY1nrzgtlxwJIYAznfBK5YXoLOHKHyfQ=="], + + "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="], + + "@aws-sdk/middleware-location-constraint": ["@aws-sdk/middleware-location-constraint@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-XdZ2TLwyj3Am6kvUc67vquQvs6+D8npXvXgyEUJAdkUDx5oMFJKOqpK+UpJhVDsEL068WAJl2NEGzbSik7dGJQ=="], + + "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="], + + "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="], + + "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.972.16", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-arn-parser": "^3.972.2", "@smithy/core": "^3.23.7", "@smithy/node-config-provider": "^4.3.10", "@smithy/protocol-http": "^5.3.10", "@smithy/signature-v4": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-U4K1rqyJYvT/zgTI3+rN+MToa51dFnnq1VSsVJuJWPNEKcEnuZVqf7yTpkJJMkYixVW5TTi1dgupd+nmJ0JyWw=="], + + "@aws-sdk/middleware-ssec": ["@aws-sdk/middleware-ssec@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-acvMUX9jF4I2Ew+Z/EA6gfaFaz9ehci5wxBmXCZeulLuv8m+iGf6pY9uKz8TPjg39bdAz3hxoE0eLP8Qz+IYlA=="], + + "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.25", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-QxiMPofvOt8SwSynTOmuZfvvPM1S9QfkESBxB22NMHTRXCJhR5BygLl8IXfC4jELiisQgwsgUby21GtXfX3f/g=="], + + "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.997.9", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.11", "@aws-sdk/signature-v4-multi-region": "^3.996.27", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-jPR3rnmRI4hWYyzfmTGBr7NblMp8QYYeflHXba1H6+7CGrWVqWKQzaXFQ4qbExqPRsXN3T3L3JxFhr6aouXUGQ=="], + + "@aws-sdk/rds-signer": ["@aws-sdk/rds-signer@3.1018.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/credential-providers": "3.1018.0", "@aws-sdk/util-format-url": "^3.972.8", "@smithy/config-resolver": "^4.4.13", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-zh93Qoq6WRQn1K3kJ2Dn5tpZfFAzbkWRm38QqS5rTz1u6ZBRqhVQMEC6hOEx3+XsvwpT9OyuOqDALDQpTmYB5g=="], + + "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.13", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-eQ+dFU05ZRC/lC2XpYlYSPlXtX3VT8sn5toxN2Fv7EXlMoA2p9V7vUBKqHunfD4TRLpxUq8Y8Ol/nCqiv327Ng=="], + + "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.4", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "^3.972.16", "@aws-sdk/types": "^3.973.4", "@smithy/protocol-http": "^5.3.10", "@smithy/signature-v4": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-MGa8ro0onekYIiesHX60LwKdkxK3Kd61p7TTbLwZemBqlnD9OLrk9sXZdFOIxXanJ+3AaJnV/jiX866eD/4PDg=="], + + "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1015.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-3OSD4y110nisRhHzFOjoEeHU4GQL4KpzkX9PxzWaiZe0Yg2+thZKM0Pn9DjYwezH5JYfh/K++xK/SE0IHGrmCQ=="], + + "@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="], + + "@aws-sdk/util-arn-parser": ["@aws-sdk/util-arn-parser@3.972.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg=="], + + "@aws-sdk/util-dynamodb": ["@aws-sdk/util-dynamodb@3.996.2", "", { "dependencies": { "tslib": "^2.6.2" }, "peerDependencies": { "@aws-sdk/client-dynamodb": "^3.1003.0" } }, "sha512-ddpwaZmjBzcApYN7lgtAXjk+u+GO8fiPsxzuc59UqP+zqdxI1gsenPvkyiHiF9LnYnyRGijz6oN2JylnN561qQ=="], + + "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="], + + "@aws-sdk/util-format-url": ["@aws-sdk/util-format-url@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-J6DS9oocrgxM8xlUTTmQOuwRF6rnAGEujAN9SAzllcrQmwn5iJ58ogxy3SEhD0Q7JZvlA5jvIXBkpQRqEqlE9A=="], + + "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.965.4", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog=="], + + "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="], + + "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.11", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.25", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-1qdXbXo2s5MMLpUvw00284LsbhtlQ4ul7Zzdn5n+7p4WVgCMLqhxImpHIrjSoc72E/fyc4Wq8dLtUld2Gsh+lA=="], + + "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.24", "", { "dependencies": { "@nodable/entities": "2.1.0", "@smithy/types": "^4.14.1", "fast-xml-parser": "5.7.3", "tslib": "^2.6.2" } }, "sha512-V8z5YcDPfsvzrBlj0xR1vhRtocblhYbqdreCJB/voGd4Sr5zjNAeWxexbnqVtskTJe0vFb5KMqbSL++ePl+zRw=="], + + "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.3", "", {}, "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw=="], + + "@axiomhq/js": ["@axiomhq/js@1.4.0", "", { "dependencies": { "fetch-retry": "^6.0.0" } }, "sha512-wC5x1ud/QJMstrjpicATkyY8+ZVWEl4WlXMtA5EZf7hkj0+b191yv4yynLxLEfr/MveXora9m6CWdJq4DsbcAg=="], + + "@azure-rest/core-client": ["@azure-rest/core-client@2.6.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0", "@azure/core-tracing": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, "sha512-iuFKDm8XPzNxPfRjhyU5/xKZmcRDzSuEghXDHHk4MjBV/wFL34GmYVBZnn9wmuoLBeS1qAw9ceMdaeJBPcB1QQ=="], + + "@azure/abort-controller": ["@azure/abort-controller@2.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA=="], + + "@azure/core-auth": ["@azure/core-auth@1.10.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-util": "^1.13.0", "tslib": "^2.6.2" } }, "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg=="], + + "@azure/core-client": ["@azure/core-client@1.10.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0", "@azure/core-tracing": "^1.3.0", "@azure/core-util": "^1.13.0", "@azure/logger": "^1.3.0", "tslib": "^2.6.2" } }, "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w=="], + + "@azure/core-http-compat": ["@azure/core-http-compat@2.4.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2" }, "peerDependencies": { "@azure/core-client": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0" } }, "sha512-f1P96IB399YiN2ARYHP7EpZi3Bf3wH4SN2lGzrw7JVwm7bbsVYtf2iKSBwTywD2P62NOPZGHFSZi+6jjb75JuA=="], + + "@azure/core-lro": ["@azure/core-lro@2.7.2", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.2.0", "@azure/logger": "^1.0.0", "tslib": "^2.6.2" } }, "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw=="], + + "@azure/core-paging": ["@azure/core-paging@1.6.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA=="], + + "@azure/core-rest-pipeline": ["@azure/core-rest-pipeline@1.23.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", "@azure/core-tracing": "^1.3.0", "@azure/core-util": "^1.13.0", "@azure/logger": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.4", "tslib": "^2.6.2" } }, "sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ=="], + + "@azure/core-tracing": ["@azure/core-tracing@1.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ=="], + + "@azure/core-util": ["@azure/core-util@1.13.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A=="], + + "@azure/identity": ["@azure/identity@4.13.1", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.2", "@azure/core-rest-pipeline": "^1.17.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", "@azure/msal-browser": "^5.5.0", "@azure/msal-node": "^5.1.0", "open": "^10.1.0", "tslib": "^2.2.0" } }, "sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw=="], + + "@azure/keyvault-common": ["@azure/keyvault-common@2.1.0", "", { "dependencies": { "@azure-rest/core-client": "^2.3.3", "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.3.0", "@azure/core-rest-pipeline": "^1.8.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.10.0", "@azure/logger": "^1.1.4", "tslib": "^2.2.0" } }, "sha512-aCDidWuKY06LWQ4x7/8TIXK6iRqTaRWRL3t7T+LC+j1b07HtoIsOxP/tU90G4jCSBn5TAyUTCtA4MS/y5Hudaw=="], + + "@azure/keyvault-keys": ["@azure/keyvault-keys@4.10.0", "", { "dependencies": { "@azure-rest/core-client": "^2.3.3", "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", "@azure/core-http-compat": "^2.2.0", "@azure/core-lro": "^2.7.2", "@azure/core-paging": "^1.6.2", "@azure/core-rest-pipeline": "^1.19.0", "@azure/core-tracing": "^1.2.0", "@azure/core-util": "^1.11.0", "@azure/keyvault-common": "^2.0.0", "@azure/logger": "^1.1.4", "tslib": "^2.8.1" } }, "sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag=="], + + "@azure/logger": ["@azure/logger@1.3.0", "", { "dependencies": { "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA=="], + + "@azure/msal-browser": ["@azure/msal-browser@5.6.3", "", { "dependencies": { "@azure/msal-common": "16.4.1" } }, "sha512-sTjMtUm+bJpENU/1WlRzHEsgEHppZDZ1EtNyaOODg/sQBtMxxJzGB+MOCM+T2Q5Qe1fKBrdxUmjyRxm0r7Ez9w=="], + + "@azure/msal-common": ["@azure/msal-common@16.4.1", "", {}, "sha512-Bl8f+w37xkXsYh7QRkAKCFGYtWMYuOVO7Lv+BxILrvGz3HbIEF22Pt0ugyj0QPOl6NLrHcnNUQ9yeew98P/5iw=="], + + "@azure/msal-node": ["@azure/msal-node@5.1.2", "", { "dependencies": { "@azure/msal-common": "16.4.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" } }, "sha512-DoeSJ9U5KPAIZoHsPywvfEj2MhBniQe0+FSpjLUTdWoIkI999GB5USkW6nNEHnIaLVxROHXvprWA1KzdS1VQ4A=="], + + "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], + + "@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + + "@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], + + "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + + "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow=="], + + "@babel/helper-create-regexp-features-plugin": ["@babel/helper-create-regexp-features-plugin@7.28.5", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw=="], + + "@babel/helper-define-polyfill-provider": ["@babel/helper-define-polyfill-provider@0.6.8", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "debug": "^4.4.3", "lodash.debounce": "^4.0.8", "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + + "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.28.5", "", { "dependencies": { "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5" } }, "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + + "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], + + "@babel/helper-remap-async-to-generator": ["@babel/helper-remap-async-to-generator@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-wrap-function": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA=="], + + "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.28.6", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg=="], + + "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@babel/helper-wrap-function": ["@babel/helper-wrap-function@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ=="], + + "@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], + + "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q=="], + + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ["@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA=="], + + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA=="], + + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw=="], + + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g=="], + + "@babel/plugin-proposal-class-properties": ["@babel/plugin-proposal-class-properties@7.12.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w=="], + + "@babel/plugin-proposal-private-property-in-object": ["@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w=="], + + "@babel/plugin-syntax-flow": ["@babel/plugin-syntax-flow@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew=="], + + "@babel/plugin-syntax-import-assertions": ["@babel/plugin-syntax-import-assertions@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw=="], + + "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw=="], + + "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], + + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], + + "@babel/plugin-syntax-unicode-sets-regex": ["@babel/plugin-syntax-unicode-sets-regex@7.18.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg=="], + + "@babel/plugin-transform-arrow-functions": ["@babel/plugin-transform-arrow-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA=="], + + "@babel/plugin-transform-async-generator-functions": ["@babel/plugin-transform-async-generator-functions@7.29.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", "@babel/traverse": "^7.29.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w=="], + + "@babel/plugin-transform-async-to-generator": ["@babel/plugin-transform-async-to-generator@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g=="], + + "@babel/plugin-transform-block-scoped-functions": ["@babel/plugin-transform-block-scoped-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg=="], + + "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw=="], + + "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw=="], + + "@babel/plugin-transform-class-static-block": ["@babel/plugin-transform-class-static-block@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ=="], + + "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-replace-supers": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q=="], + + "@babel/plugin-transform-computed-properties": ["@babel/plugin-transform-computed-properties@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/template": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ=="], + + "@babel/plugin-transform-destructuring": ["@babel/plugin-transform-destructuring@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw=="], + + "@babel/plugin-transform-dotall-regex": ["@babel/plugin-transform-dotall-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg=="], + + "@babel/plugin-transform-duplicate-keys": ["@babel/plugin-transform-duplicate-keys@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q=="], + + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ["@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw=="], + + "@babel/plugin-transform-dynamic-import": ["@babel/plugin-transform-dynamic-import@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A=="], + + "@babel/plugin-transform-explicit-resource-management": ["@babel/plugin-transform-explicit-resource-management@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg=="], + + "@babel/plugin-transform-exponentiation-operator": ["@babel/plugin-transform-exponentiation-operator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw=="], + + "@babel/plugin-transform-export-namespace-from": ["@babel/plugin-transform-export-namespace-from@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ=="], + + "@babel/plugin-transform-flow-strip-types": ["@babel/plugin-transform-flow-strip-types@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-syntax-flow": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg=="], + + "@babel/plugin-transform-for-of": ["@babel/plugin-transform-for-of@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw=="], + + "@babel/plugin-transform-function-name": ["@babel/plugin-transform-function-name@7.27.1", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ=="], + + "@babel/plugin-transform-json-strings": ["@babel/plugin-transform-json-strings@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw=="], + + "@babel/plugin-transform-literals": ["@babel/plugin-transform-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA=="], + + "@babel/plugin-transform-logical-assignment-operators": ["@babel/plugin-transform-logical-assignment-operators@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A=="], + + "@babel/plugin-transform-member-expression-literals": ["@babel/plugin-transform-member-expression-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ=="], + + "@babel/plugin-transform-modules-amd": ["@babel/plugin-transform-modules-amd@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA=="], + + "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.28.6", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA=="], + + "@babel/plugin-transform-modules-systemjs": ["@babel/plugin-transform-modules-systemjs@7.29.0", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.29.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ=="], + + "@babel/plugin-transform-modules-umd": ["@babel/plugin-transform-modules-umd@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w=="], + + "@babel/plugin-transform-named-capturing-groups-regex": ["@babel/plugin-transform-named-capturing-groups-regex@7.29.0", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ=="], + + "@babel/plugin-transform-new-target": ["@babel/plugin-transform-new-target@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ=="], + + "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg=="], + + "@babel/plugin-transform-numeric-separator": ["@babel/plugin-transform-numeric-separator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w=="], + + "@babel/plugin-transform-object-rest-spread": ["@babel/plugin-transform-object-rest-spread@7.28.6", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA=="], + + "@babel/plugin-transform-object-super": ["@babel/plugin-transform-object-super@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng=="], + + "@babel/plugin-transform-optional-catch-binding": ["@babel/plugin-transform-optional-catch-binding@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ=="], + + "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w=="], + + "@babel/plugin-transform-parameters": ["@babel/plugin-transform-parameters@7.27.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg=="], + + "@babel/plugin-transform-private-methods": ["@babel/plugin-transform-private-methods@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg=="], + + "@babel/plugin-transform-private-property-in-object": ["@babel/plugin-transform-private-property-in-object@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA=="], + + "@babel/plugin-transform-property-literals": ["@babel/plugin-transform-property-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ=="], + + "@babel/plugin-transform-react-display-name": ["@babel/plugin-transform-react-display-name@7.28.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA=="], + + "@babel/plugin-transform-react-jsx": ["@babel/plugin-transform-react-jsx@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-syntax-jsx": "^7.28.6", "@babel/types": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow=="], + + "@babel/plugin-transform-react-jsx-development": ["@babel/plugin-transform-react-jsx-development@7.27.1", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q=="], + + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], + + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], + + "@babel/plugin-transform-react-pure-annotations": ["@babel/plugin-transform-react-pure-annotations@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA=="], + + "@babel/plugin-transform-regenerator": ["@babel/plugin-transform-regenerator@7.29.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog=="], + + "@babel/plugin-transform-regexp-modifiers": ["@babel/plugin-transform-regexp-modifiers@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg=="], + + "@babel/plugin-transform-reserved-words": ["@babel/plugin-transform-reserved-words@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw=="], + + "@babel/plugin-transform-runtime": ["@babel/plugin-transform-runtime@7.29.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w=="], + + "@babel/plugin-transform-shorthand-properties": ["@babel/plugin-transform-shorthand-properties@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ=="], + + "@babel/plugin-transform-spread": ["@babel/plugin-transform-spread@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA=="], + + "@babel/plugin-transform-sticky-regex": ["@babel/plugin-transform-sticky-regex@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g=="], + + "@babel/plugin-transform-template-literals": ["@babel/plugin-transform-template-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg=="], + + "@babel/plugin-transform-typeof-symbol": ["@babel/plugin-transform-typeof-symbol@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw=="], + + "@babel/plugin-transform-unicode-escapes": ["@babel/plugin-transform-unicode-escapes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg=="], + + "@babel/plugin-transform-unicode-property-regex": ["@babel/plugin-transform-unicode-property-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A=="], + + "@babel/plugin-transform-unicode-regex": ["@babel/plugin-transform-unicode-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw=="], + + "@babel/plugin-transform-unicode-sets-regex": ["@babel/plugin-transform-unicode-sets-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q=="], + + "@babel/preset-env": ["@babel/preset-env@7.29.2", "", { "dependencies": { "@babel/compat-data": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.28.6", "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.6", "@babel/plugin-transform-class-properties": "^7.28.6", "@babel/plugin-transform-class-static-block": "^7.28.6", "@babel/plugin-transform-classes": "^7.28.6", "@babel/plugin-transform-computed-properties": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.6", "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-numeric-separator": "^7.28.6", "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.28.6", "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.28.6", "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", "@babel/plugin-transform-regenerator": "^7.29.0", "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.15", "babel-plugin-polyfill-corejs3": "^0.14.0", "babel-plugin-polyfill-regenerator": "^0.6.6", "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw=="], + + "@babel/preset-flow": ["@babel/preset-flow@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-transform-flow-strip-types": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg=="], + + "@babel/preset-modules": ["@babel/preset-modules@0.1.6-no-external-plugins", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA=="], + + "@babel/preset-react": ["@babel/preset-react@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-transform-react-display-name": "^7.28.0", "@babel/plugin-transform-react-jsx": "^7.27.1", "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@babel/plugin-transform-react-pure-annotations": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ=="], + + "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], + + "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + + "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + + "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@base-ui/react": ["@base-ui/react@1.3.0", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@base-ui/utils": "0.2.6", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "tabbable": "^6.4.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA=="], + + "@base-ui/utils": ["@base-ui/utils@0.2.6", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw=="], + + "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], + + "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="], + + "@boxyhq/error-code-mnemonic": ["@boxyhq/error-code-mnemonic@0.1.1", "", {}, "sha512-NmO111OG8GQDE8W/+uSREb67YSqnY2N/tHykGeFoIZc9Leher+lW+jN4U1OXzlc66hwB8yO7WRu2cbYsAKsi9g=="], + + "@boxyhq/metrics": ["@boxyhq/metrics@0.2.10", "", { "dependencies": { "@grpc/grpc-js": "1.12.6", "@opentelemetry/api": "1.9.0", "@opentelemetry/exporter-metrics-otlp-grpc": "0.57.1", "@opentelemetry/exporter-metrics-otlp-http": "0.57.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/semantic-conventions": "1.29.0" } }, "sha512-jsBKS5fNEyxYyizhYWT3q1oQM3dE9VVL/rEBrdGZMHXQZHxKZeE1Sg5wrfT7ILYjYQ+6CSs8yNJSK9jHJKN6cw=="], + + "@boxyhq/saml-jackson": ["@boxyhq/saml-jackson@1.52.2", "", { "dependencies": { "@aws-sdk/client-dynamodb": "3.817.0", "@aws-sdk/credential-providers": "3.817.0", "@aws-sdk/util-dynamodb": "3.817.0", "@boxyhq/error-code-mnemonic": "0.1.1", "@boxyhq/metrics": "0.2.10", "@boxyhq/saml20": "1.12.1", "@googleapis/admin": "23.5.0", "@libsql/sqlite3": "0.3.1", "axios": "1.9.0", "encoding": "0.1.13", "ipaddr.js": "2.2.0", "jose": "6.0.11", "lodash": "4.17.21", "mixpanel": "0.18.1", "mongodb": "6.16.0", "mssql": "11.0.1", "mysql2": "3.14.1", "node-forge": "1.3.1", "openid-client": "6.5.0", "pg": "8.16.0", "redis": "4.7.0", "reflect-metadata": "0.2.2", "ripemd160": "2.0.2", "sqlite3": "5.1.7", "typeorm": "0.3.22" } }, "sha512-il8VEpaEHBBSeT7cbRmXYO32+PsmRp9urMB5C9ON7QB66XU0VVS9WKaVJROMLVf6QhqETRbSnluSaoevsuPHog=="], + + "@boxyhq/saml20": ["@boxyhq/saml20@1.12.1", "", { "dependencies": { "@xmldom/xmldom": "0.9.8", "xml-crypto": "6.1.2", "xml-encryption": "3.1.0", "xml2js": "0.6.2", "xmlbuilder": "15.1.1" } }, "sha512-lAHJ13kTZqPgSFUuAV8+kg5As3/MoSfiEr96tNKP0sj6c6o/Sbwn6DIhUZLQRNzDtmyAu9zuQk3vdbY5BK56Xg=="], + + "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.2", "", {}, "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="], + + "@bufbuild/protobuf": ["@bufbuild/protobuf@2.11.0", "", {}, "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ=="], + + "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@10.5.0", "", { "dependencies": { "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw=="], + + "@chevrotain/gast": ["@chevrotain/gast@10.5.0", "", { "dependencies": { "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A=="], + + "@chevrotain/types": ["@chevrotain/types@11.1.2", "", {}, "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="], + + "@chevrotain/utils": ["@chevrotain/utils@10.5.0", "", {}, "sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ=="], + + "@codemirror/autocomplete": ["@codemirror/autocomplete@6.20.1", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0" } }, "sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A=="], + + "@codemirror/commands": ["@codemirror/commands@6.10.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", "@codemirror/view": "^6.27.0", "@lezer/common": "^1.1.0" } }, "sha512-vvX1fsih9HledO1c9zdotZYUZnE4xV0m6i3m25s5DIfXofuprk6cRcLUZvSk3CASUbwjQX21tOGbkY2BH8TpnQ=="], + + "@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.5", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A=="], + + "@codemirror/lang-json": ["@codemirror/lang-json@6.0.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@lezer/json": "^1.0.0" } }, "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ=="], + + "@codemirror/language": ["@codemirror/language@6.12.2", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", "@lezer/common": "^1.5.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" } }, "sha512-jEPmz2nGGDxhRTg3lTpzmIyGKxz3Gp3SJES4b0nAuE5SWQoKdT5GoQ69cwMmFd+wvFUhYirtDTr0/DRHpQAyWg=="], + + "@codemirror/lint": ["@codemirror/lint@6.9.5", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.35.0", "crelt": "^1.0.5" } }, "sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA=="], + + "@codemirror/search": ["@codemirror/search@6.6.0", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.37.0", "crelt": "^1.0.5" } }, "sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw=="], + + "@codemirror/state": ["@codemirror/state@6.5.4", "", { "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } }, "sha512-8y7xqG/hpB53l25CIoit9/ngxdfoG+fx+V3SHBrinnhOtLvKHRyAJJuHzkWrR4YXXLX8eXBsejgAAxHUOdW1yw=="], + + "@codemirror/theme-one-dark": ["@codemirror/theme-one-dark@6.1.3", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/highlight": "^1.0.0" } }, "sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA=="], + + "@codemirror/view": ["@codemirror/view@6.39.16", "", { "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, "sha512-m6S22fFpKtOWhq8HuhzsI1WzUP/hB9THbDj0Tl5KX4gbO6Y91hwBl7Yky33NdvB6IffuRFiBxf1R8kJMyXmA4Q=="], + + "@dnd-kit/accessibility": ["@dnd-kit/accessibility@3.1.1", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw=="], + + "@dnd-kit/core": ["@dnd-kit/core@6.3.1", "", { "dependencies": { "@dnd-kit/accessibility": "^3.1.1", "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ=="], + + "@dnd-kit/sortable": ["@dnd-kit/sortable@10.0.0", "", { "dependencies": { "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@dnd-kit/core": "^6.3.0", "react": ">=16.8.0" } }, "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg=="], + + "@dnd-kit/utilities": ["@dnd-kit/utilities@3.2.2", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg=="], + + "@electric-sql/pglite": ["@electric-sql/pglite@0.3.15", "", {}, "sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ=="], + + "@electric-sql/pglite-socket": ["@electric-sql/pglite-socket@0.0.20", "", { "peerDependencies": { "@electric-sql/pglite": "0.3.15" }, "bin": { "pglite-server": "dist/scripts/server.js" } }, "sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg=="], + + "@electric-sql/pglite-tools": ["@electric-sql/pglite-tools@0.2.20", "", { "peerDependencies": { "@electric-sql/pglite": "0.3.15" } }, "sha512-BK50ZnYa3IG7ztXhtgYf0Q7zijV32Iw1cYS8C+ThdQlwx12V5VZ9KRJ42y82Hyb4PkTxZQklVQA9JHyUlex33A=="], + + "@emotion/is-prop-valid": ["@emotion/is-prop-valid@1.4.0", "", { "dependencies": { "@emotion/memoize": "^0.9.0" } }, "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw=="], + + "@emotion/memoize": ["@emotion/memoize@0.9.0", "", {}, "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="], + + "@emotion/unitless": ["@emotion/unitless@0.10.0", "", {}, "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], + + "@eslint/config-array": ["@eslint/config-array@0.21.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], + + "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.4", "", { "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", "minimatch": "^3.1.3", "strip-json-comments": "^3.1.1" } }, "sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ=="], + + "@eslint/js": ["@eslint/js@9.39.3", "", {}, "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], + + "@fastify/otel": ["@fastify/otel@0.17.1", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.212.0", "@opentelemetry/semantic-conventions": "^1.28.0", "minimatch": "^10.2.4" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0" } }, "sha512-K4wyxfUZx2ux5o+b6BtTqouYFVILohLZmSbA2tKUueJstNcBnoGPVhllCaOvbQ3ZrXdUxUC/fyrSWSCqHhdOPg=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], + + "@floating-ui/react": ["@floating-ui/react@0.27.19", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog=="], + + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.8", "", { "dependencies": { "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], + + "@function-bay/build": ["@function-bay/build@workspace:src/systems/function-bay/packages/build"], + + "@function-bay/nodejs": ["@function-bay/nodejs@workspace:src/systems/function-bay/packages/nodejs"], + + "@function-bay/tsconfig": ["@function-bay/tsconfig@workspace:src/systems/function-bay/packages/tsconfig"], + + "@function-bay/types": ["@function-bay/types@workspace:src/systems/function-bay/packages/types"], + + "@function-bay/utils": ["@function-bay/utils@workspace:src/systems/function-bay/packages/utils"], + + "@gar/promisify": ["@gar/promisify@1.1.3", "", {}, "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="], + + "@gitbeaker/core": ["@gitbeaker/core@43.8.0", "", { "dependencies": { "@gitbeaker/requester-utils": "^43.8.0", "qs": "^6.14.0", "xcase": "^2.0.1" } }, "sha512-H+LfKuf4dExBinb79c+CXViRBvTVQNf5BYLNSizm2SiqdED5JruhKX88payefleY0szp7G/mySlFSXPyGRH1dQ=="], + + "@gitbeaker/requester-utils": ["@gitbeaker/requester-utils@43.8.0", "", { "dependencies": { "picomatch-browser": "^2.2.6", "qs": "^6.14.0", "rate-limiter-flexible": "^8.0.1", "xcase": "^2.0.1" } }, "sha512-d/SiJdxijc+aH5ZBQOw83XLxNSXqsBZNm5k3nPu1EHxGxK0fajXmxdMl0/vNXbKRggnIquFCxURkrQSEzfjqxQ=="], + + "@gitbeaker/rest": ["@gitbeaker/rest@43.8.0", "", { "dependencies": { "@gitbeaker/core": "^43.8.0", "@gitbeaker/requester-utils": "^43.8.0" } }, "sha512-xxqsNsUXaFang9b2e/NTIgqUeuUlifA2Opy1mOVqTDuJZZNIOTgUNyziwBJoleBhMC0XuvY3JNVMWthufcVjRw=="], + + "@googleapis/admin": ["@googleapis/admin@23.5.0", "", { "dependencies": { "googleapis-common": "^7.0.0" } }, "sha512-B8jWEYs9fscIb1yEYx0OBxovIUKbXlRA5aUtR/JvZJXbBVnZRgsH8UJ96Rd4CqKF3mLq9dFJGy87U2foQ/G/HQ=="], + + "@grpc/grpc-js": ["@grpc/grpc-js@1.14.3", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA=="], + + "@grpc/proto-loader": ["@grpc/proto-loader@0.8.0", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.3", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ=="], + + "@hono/node-server": ["@hono/node-server@1.19.10", "", { "peerDependencies": { "hono": "^4" } }, "sha512-hZ7nOssGqRgyV3FVVQdfi+U4q02uB23bpnYpdvNXkYTRRyWx84b7yf1ans+dnJ/7h41sGL3CeQTfO+ZGxuO+Iw=="], + + "@hono/zod-validator": ["@hono/zod-validator@0.7.6", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Io1B6d011Gj1KknV4rXYz4le5+5EubcWEU/speUjuw9XMMIaP3n78yXLhjd2A3PXaXaUwEAluOiAyLqhBEJgsw=="], + + "@hookform/resolvers": ["@hookform/resolvers@5.2.2", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA=="], + + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + + "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], + + "@iconify/utils": ["@iconify/utils@3.1.3", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "import-meta-resolve": "^4.2.0" } }, "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw=="], + + "@inquirer/ansi": ["@inquirer/ansi@1.0.2", "", {}, "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ=="], + + "@inquirer/checkbox": ["@inquirer/checkbox@4.3.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA=="], + + "@inquirer/confirm": ["@inquirer/confirm@5.1.21", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ=="], + + "@inquirer/core": ["@inquirer/core@10.3.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A=="], + + "@inquirer/editor": ["@inquirer/editor@4.2.23", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/external-editor": "^1.0.3", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ=="], + + "@inquirer/expand": ["@inquirer/expand@4.0.23", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew=="], + + "@inquirer/external-editor": ["@inquirer/external-editor@1.0.3", "", { "dependencies": { "chardet": "^2.1.1", "iconv-lite": "^0.7.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA=="], + + "@inquirer/figures": ["@inquirer/figures@1.0.15", "", {}, "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g=="], + + "@inquirer/input": ["@inquirer/input@4.3.1", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g=="], + + "@inquirer/number": ["@inquirer/number@3.0.23", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg=="], + + "@inquirer/password": ["@inquirer/password@4.0.23", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA=="], + + "@inquirer/prompts": ["@inquirer/prompts@7.10.1", "", { "dependencies": { "@inquirer/checkbox": "^4.3.2", "@inquirer/confirm": "^5.1.21", "@inquirer/editor": "^4.2.23", "@inquirer/expand": "^4.0.23", "@inquirer/input": "^4.3.1", "@inquirer/number": "^3.0.23", "@inquirer/password": "^4.0.23", "@inquirer/rawlist": "^4.1.11", "@inquirer/search": "^3.2.2", "@inquirer/select": "^4.4.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg=="], + + "@inquirer/rawlist": ["@inquirer/rawlist@4.1.11", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw=="], + + "@inquirer/search": ["@inquirer/search@3.2.2", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA=="], + + "@inquirer/select": ["@inquirer/select@4.4.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w=="], + + "@inquirer/type": ["@inquirer/type@3.0.10", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA=="], + + "@ioredis/commands": ["@ioredis/commands@1.5.1", "", {}, "sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + + "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], + + "@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], + + "@jitl/quickjs-ffi-types": ["@jitl/quickjs-ffi-types@0.32.0", "", {}, "sha512-v9T+GQpmk43VDJ7d72sf0Nexhk+ArvtUihW27dy7lqAl0zBObFKtSBBIm5RBjwIhE8VwsPPm9PNuvPvNqLWUEg=="], + + "@jitl/quickjs-wasmfile-debug-asyncify": ["@jitl/quickjs-wasmfile-debug-asyncify@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-EX8zbXwGqCgAE764M+qvkHtyXDi/FUoMBea0JnES7vCM3P7a2+EOZOjGv85wtZ2sJhI1oJ+nekmqpOODFDY+hw=="], + + "@jitl/quickjs-wasmfile-debug-sync": ["@jitl/quickjs-wasmfile-debug-sync@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-LeYWrPGC1uNCTBWvibo3ZLJj0CSVNYUXvJpXMCmuQ5Sap2cCACc3uvGvYV4homHHBAzfw5akoTqMMS4YFRtw+Q=="], + + "@jitl/quickjs-wasmfile-release-asyncify": ["@jitl/quickjs-wasmfile-release-asyncify@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-3oSwPfja12ICz4aIblB58cuY8JlEq5Txt8Cut4VLo+LH47QN+mzCnSgnbB03hWzg1LBcc+VyyI9UOag7a1NF+Q=="], + + "@jitl/quickjs-wasmfile-release-sync": ["@jitl/quickjs-wasmfile-release-sync@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-BKNDI/TPBfGlLNGYpLrhcDGXmIk4xHm4MRAisOBnOzpXVn9HZWsfmMAc9WMBrAHjvvds6HOikKeaOBKdPdpVrg=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@js-joda/core": ["@js-joda/core@5.7.0", "", {}, "sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg=="], + + "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], + + "@lezer/common": ["@lezer/common@1.5.1", "", {}, "sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw=="], + + "@lezer/highlight": ["@lezer/highlight@1.2.3", "", { "dependencies": { "@lezer/common": "^1.3.0" } }, "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g=="], + + "@lezer/javascript": ["@lezer/javascript@1.5.4", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.1.3", "@lezer/lr": "^1.3.0" } }, "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA=="], + + "@lezer/json": ["@lezer/json@1.0.3", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ=="], + + "@lezer/lr": ["@lezer/lr@1.4.8", "", { "dependencies": { "@lezer/common": "^1.0.0" } }, "sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA=="], + + "@libsql/hrana-client": ["@libsql/hrana-client@0.4.4", "", { "dependencies": { "@libsql/isomorphic-fetch": "^0.1.1", "@libsql/isomorphic-ws": "^0.1.2", "js-base64": "^3.7.5" } }, "sha512-BevUg0UBRLs5AEqn0fjrMcl49xCtwuFavgK4MzCb3PTtxpEbQ24oGXctspN9drBiUVmqSZr7go887aiLLzSO3A=="], + + "@libsql/isomorphic-fetch": ["@libsql/isomorphic-fetch@0.1.12", "", { "dependencies": { "@types/node-fetch": "^2.6.11", "node-fetch": "^2.7.0" } }, "sha512-MRo4UcmjAGAa3ac56LoD5OE13m2p0lu0VEtZC2NZMcogM/jc5fU9YtMQ3qbPjFJ+u2BBjFZgMPkQaLS1dlMhpg=="], + + "@libsql/isomorphic-ws": ["@libsql/isomorphic-ws@0.1.5", "", { "dependencies": { "@types/ws": "^8.5.4", "ws": "^8.13.0" } }, "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg=="], + + "@libsql/sqlite3": ["@libsql/sqlite3@0.3.1", "", { "dependencies": { "@libsql/hrana-client": "^0.4.1" } }, "sha512-KOOBUuKDjqzteM6QA0W1vnZDfOt5MNMyo2yr4TaH1RcCd7Fsts4lpzfty6FmE1d6QDrRxjRq2ZciO6VdQ9ZF3A=="], + + "@looped/hooks": ["@looped/hooks@0.1.3", "", { "dependencies": { "lodash": "^4.17.21", "use-interval": "^1.4.0" }, "peerDependencies": { "react": ">=16" } }, "sha512-1WN1Ak+CBif9/J3Jt/Epxit4ZW92hQuYCLFmEYjJVtiqiBUGuqXsnyz1EC0XPiJCUE5h4L/0jnyetxcgPIB1NQ=="], + + "@lowerdeck/base62": ["@lowerdeck/base62@1.0.4", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PIx4GWbQWWCz7YigmAFD0M6I3ydJ97dgqNCzpHG+bt1tFGv2+Kb8t0vsY/cdoH55lG5A019wHglUnxLqmme5Cw=="], + + "@lowerdeck/canonicalize": ["@lowerdeck/canonicalize@1.0.4", "", {}, "sha512-9SquJ0A2Mpm7vVmp6zZt0Lem+Klo0OrIh5KwjJZjedfD8eSq06spiCXqlK67RAJzz2MSRqlRqAnOeuzAx7cbLg=="], + + "@lowerdeck/case": ["@lowerdeck/case@1.0.9", "", {}, "sha512-nyKaHgj6UDRtzfRWeGA01H1S/tGpaFc28U8aeWaDTLnEcuXbZfspv78kfo+S7ZEeIkth+klz1pUEhhIUUOiEkA=="], + + "@lowerdeck/emitter": ["@lowerdeck/emitter@1.0.4", "", {}, "sha512-eRoJnfF4zqe/O+QO+CuccPNXj6FNd6E6sEGvydB4JdQhAu/pJ0YMNp99WlDaTRGVoj1bpA43UwbnHCVl2RTOGA=="], + + "@lowerdeck/env": ["@lowerdeck/env@1.0.6", "", { "dependencies": { "@lowerdeck/validation": "^1.0.10" } }, "sha512-bEWuSj3I/pJ0D8hE1/Wf6XKcGWCCJfPI6UDW77IP/5Ye30JjrcT9Ehut/mcSENWEgXolltYivl7BB5BbAbDxNg=="], + + "@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], + + "@lowerdeck/execution-context": ["@lowerdeck/execution-context@1.1.0", "", { "dependencies": { "@lowerdeck/id": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "@opentelemetry/api": "^1.9.0" } }, "sha512-3aAgx6fiUF7Tduq1WR+GqGXZYaHhoM502/uwqQKtTOXsB6nyOp1NhOLHoU+ZZvZZflQ9ddpMwTCicjvQnmhXeA=="], + + "@lowerdeck/hash": ["@lowerdeck/hash@1.0.4", "", { "dependencies": { "@lowerdeck/base62": "^1.0.4" } }, "sha512-ERC0JhZO2uNNnrHG5n0qxXrFUesdszA1G1qGDf3ihjM2iRy7ELQ10WCX0sHz75GhR/OW+AXctFRfJN8VCCQjFw=="], + + "@lowerdeck/id": ["@lowerdeck/id@1.0.8", "", { "dependencies": { "@lowerdeck/error": "^1.2.2", "@lowerdeck/hash": "^1.0.4", "nanoid": "^5.0.7", "short-uuid": "^5.2.0", "snowflake-uuid": "^1.0.0" } }, "sha512-0u8iDVzD+xvRr4ABec8SeJ47xLNz8sG3D3/IinN92VdLqxwewgyxzXRryArSdBbaa3PmyDpjFEdG0ifm0nptPw=="], + + "@lowerdeck/memo": ["@lowerdeck/memo@1.0.4", "", {}, "sha512-Fyhi14j1EocQeAjZ6sqeYZaydPlCt23P+CEv99QVPb46Y6n77RGrslbHE7HDPgV0f9CJi4UWxSbfhk+Spmmj5g=="], + + "@lowerdeck/proxy": ["@lowerdeck/proxy@1.0.4", "", {}, "sha512-29S6bDAtkeD0Iww6RiMiwok4eCPWLfoyJW9XIfJxcpvRhQov/GIKtaix9W9lkZvqlt7u78X4LkLmWFc6QA/BjA=="], + + "@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], + + "@lowerdeck/rpc-server": ["@lowerdeck/rpc-server@1.0.10", "", { "dependencies": { "@lowerdeck/error": "^1.2.2", "@lowerdeck/execution-context": "^1.0.4", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", "@lowerdeck/telemetry": "^1.0.1", "@lowerdeck/validation": "^1.0.8", "cookie": "^1.1.1" } }, "sha512-nitrDjYoYOal/W1djpaQ7EiDsvFokyUGPBXPyHzLqSrKDAqi22Tpb/nPAgGnEokxMbu6Fl9KhLlhIXABkYYvUg=="], + + "@lowerdeck/sentry": ["@lowerdeck/sentry@1.0.2", "", { "dependencies": { "@sentry/core": "^10.32.1" } }, "sha512-HYNcxpC1ZOEGn8+wxoTNU0Y9e3tVHE5Wb0W9etRCu589uv3VD+1InMyLypBZdgnrJI5KRpPdJcMHm+aj7WEjig=="], + + "@lowerdeck/serialize": ["@lowerdeck/serialize@1.0.4", "", { "dependencies": { "superjson": "^2.2.5" } }, "sha512-IlCBKiIHma9Pd+HBG9mwrLN9ySi4/Z/8fi40YBGS4X5iu5uhl9wfkr5ttTOrBiwOFhSc+WWCD8J7cO9hs9yE2w=="], + + "@lowerdeck/telemetry": ["@lowerdeck/telemetry@1.1.1", "", { "dependencies": { "@lowerdeck/execution-context": "^1.1.0", "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^2.5.0", "@opentelemetry/core": "^2.5.0", "@opentelemetry/exporter-trace-otlp-http": "^0.211.0", "@opentelemetry/instrumentation": "^0.212.0", "@opentelemetry/resources": "^2.5.0", "@opentelemetry/sdk-trace-base": "^2.5.0", "@opentelemetry/sdk-trace-node": "^2.5.0", "@opentelemetry/semantic-conventions": "^1.39.0", "@prisma/instrumentation": "^7.4.1" } }, "sha512-IOcVHadI9VftSn845hFtWPU8k+tk2k0/hey0PrZsddJorY1D485ODapq5x2bdCmL8B46ZBMSduU0NH+d/S5lgg=="], + + "@lowerdeck/validation": ["@lowerdeck/validation@1.0.10", "", {}, "sha512-M6F1+SRuxUKkgR9qPi3EhO5+WUXckAxhRnNYCtp1CbFl0HZSV+IIOdvfVq29RRn7TIObB2/rYvqJQ38tSHq6Pw=="], + + "@mapbox/node-pre-gyp": ["@mapbox/node-pre-gyp@2.0.3", "", { "dependencies": { "consola": "^3.2.3", "detect-libc": "^2.0.0", "https-proxy-agent": "^7.0.5", "node-fetch": "^2.6.7", "nopt": "^8.0.0", "semver": "^7.5.3", "tar": "^7.4.0" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" } }, "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg=="], + + "@marijn/find-cluster-break": ["@marijn/find-cluster-break@1.0.2", "", {}, "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g=="], + + "@marsidev/react-turnstile": ["@marsidev/react-turnstile@1.5.0", "", { "peerDependencies": { "react": "^17.0.2 || ^18.0.0 || ^19.0", "react-dom": "^17.0.2 || ^18.0.0 || ^19.0" } }, "sha512-Ph6mcj8u9WBDsBO7s9jKPsyRDz1sBPBJwrk+Ngx09vFInvKsQ6U6kW5amEcGq4dHOreB6DgFrOJk7/fy318YlQ=="], + + "@mermaid-js/parser": ["@mermaid-js/parser@1.1.1", "", { "dependencies": { "@chevrotain/types": "~11.1.1" } }, "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw=="], + + "@metorial-cargo/db": ["@metorial-cargo/db@workspace:src/systems/cargo/db"], + + "@metorial-cargo/list-utils": ["@metorial-cargo/list-utils@workspace:src/systems/cargo/packages/list-utils"], + + "@metorial-cargo/module-doc": ["@metorial-cargo/module-doc@workspace:src/systems/cargo/modules/doc"], + + "@metorial-cargo/module-file": ["@metorial-cargo/module-file@workspace:src/systems/cargo/modules/file"], + + "@metorial-cargo/module-search": ["@metorial-cargo/module-search@workspace:src/systems/cargo/modules/search"], + + "@metorial-cargo/module-skill": ["@metorial-cargo/module-skill@workspace:src/systems/cargo/modules/skill"], + + "@metorial-cargo/module-store": ["@metorial-cargo/module-store@workspace:src/systems/cargo/modules/store"], + + "@metorial-cargo/service": ["@metorial-cargo/service@workspace:src/systems/cargo/service"], + + "@metorial-io/data-hooks": ["@metorial-io/data-hooks@1.0.1", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.0.10", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/validation": "^1.0.4", "@metorial-io/ui": "^1.0.0", "@metorial/util-endpoint": "^1.0.0", "fast-deep-equal": "^3.1.3", "formik": "^2.4.9", "react": "^19.2.3", "sonner": "^2.0.7", "yup": "^1.7.1" } }, "sha512-weAOBBCdjgweQHY+aYKsLxi6ZCA0JsYlX5sfJzePfN5/xXMijaXKcp2nzfyxB6V1caDtbNRHX7gG4N9aADcRmQ=="], + + "@metorial-io/layout": ["@metorial-io/layout@1.0.1", "", { "dependencies": { "@metorial-io/data-hooks": "latest", "@metorial-io/ui": "latest", "@remixicon/react": "^4.8.0", "clsx": "^2.1.1", "framer-motion": "^12.24.9", "react": "^19.2.3", "react-dom": "^19.2.3", "react-router-dom": "^7.11.0", "react-use": "^17.6.0", "styled-components": "^6.2.0" } }, "sha512-pBymQeAa4bKhNEtWJ2pNtmZOj5rIGBprF1hfVGtYtgZi0CVHu+e92mN/dTJgfo9ygsh9cTX1KLHlRCquVoD2qQ=="], + + "@metorial-io/pages": ["@metorial-io/pages@1.0.0", "", { "dependencies": { "react": "^19.1.0", "react-wrap-balancer": "^1.1.1", "styled-components": "^6.1.17" } }, "sha512-EWK3W1vGmvNljyfTGc1Y9an+AHhNYT9gfJ6Agc5U30EsiwDvqfajiuRtrw1V4E3G8NaQhCpPMUblER4CGzFGKg=="], + + "@metorial-io/ui": ["@metorial-io/ui@1.0.0", "", { "dependencies": { "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@looped/hooks": "^0.1.3", "@lowerdeck/memo": "^1.0.4", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-toggle-group": "^1.1.11", "@radix-ui/react-tooltip": "^1.2.8", "@radix-ui/react-visually-hidden": "^1.2.4", "@remixicon/react": "^4.8.0", "clsx": "^2.1.1", "copy-to-clipboard": "^3.3.3", "date-fns": "^4.1.0", "framer-motion": "^12.24.4", "react": "^19.2.3", "react-dom": "^19.2.3", "react-feather": "^2.0.10", "react-textarea-autosize": "^8.5.9", "react-use": "^17.6.0", "react-wrap-balancer": "^1.1.1", "shleemy": "^1.2.2", "sonner": "^2.0.7", "styled-components": "^6.2.0", "use-delayed": "^0.1.0" } }, "sha512-JQzEoGzaWPPEhUZY1sIhVNII6xHhnrGsPNE98LCnM9fw37khdvLtI31X9bNJSfM5FvZSIwdzZfGjEAWQxHVn2Q=="], + + "@metorial-io/ui-product": ["@metorial-io/ui-product@1.0.0", "", { "dependencies": { "@metorial-io/ui": "latest", "@remixicon/react": "^4.8.0", "copy-to-clipboard": "^3.3.3", "react": "^19.2.3", "react-dom": "^19.2.3", "react-router-dom": "^7.11.0", "styled-components": "^6.2.0" } }, "sha512-lEhM6JNxdRGyf9B73DGV82bn+81G6DrzDTHOigd9LFb8vWmgme2NRjXH0dW7tb3igwdCuJb/DyjgCzcQ+eD0SQ=="], + + "@metorial-platform-systems/ares-client": ["@metorial-platform-systems/ares-client@workspace:src/systems/_clients/ares"], + + "@metorial-platform-systems/cargo-client": ["@metorial-platform-systems/cargo-client@workspace:src/systems/_clients/cargo"], + + "@metorial-platform-systems/forge-client": ["@metorial-platform-systems/forge-client@workspace:src/systems/_clients/forge"], + + "@metorial-platform-systems/function-bay-client": ["@metorial-platform-systems/function-bay-client@workspace:src/systems/_clients/function-bay"], + + "@metorial-platform-systems/object-storage-client": ["@metorial-platform-systems/object-storage-client@workspace:src/systems/_clients/object-storage"], + + "@metorial-platform-systems/origin-client": ["@metorial-platform-systems/origin-client@workspace:src/systems/_clients/origin-client"], + + "@metorial-platform-systems/relay-client": ["@metorial-platform-systems/relay-client@workspace:src/systems/_clients/relay"], + + "@metorial-platform-systems/shuttle-client": ["@metorial-platform-systems/shuttle-client@workspace:src/systems/_clients/shuttle"], + + "@metorial-platform-systems/signal-client": ["@metorial-platform-systems/signal-client@workspace:src/systems/_clients/signal"], + + "@metorial-platform-systems/slates-client": ["@metorial-platform-systems/slates-client@workspace:src/systems/_clients/slates"], + + "@metorial-platform-systems/subspace-client": ["@metorial-platform-systems/subspace-client@workspace:src/systems/_clients/subspace"], + + "@metorial-platform-systems/synthesis-client": ["@metorial-platform-systems/synthesis-client@workspace:src/systems/_clients/synthesis"], + + "@metorial-platform-systems/voyager-client": ["@metorial-platform-systems/voyager-client@workspace:src/systems/_clients/voyager"], + + "@metorial-services/forge-client": ["@metorial-services/forge-client@1.0.4", "", { "dependencies": { "@lowerdeck/rpc-client": "latest" } }, "sha512-riTCFBoCd72LuBBuXZI7MmXd+C04QdxvsPAAgR46Ps07z7qdAOV3g3ir86XiZme+QVDcCLK3wcO3UH6oxfoTrA=="], + + "@metorial-services/registry-client": ["@metorial-services/registry-client@1.0.0", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.3", "@lowerdeck/rpc-server": "^1.0.6", "@lowerdeck/validation": "^1.0.4" } }, "sha512-6A3tb7rtxex7GlygF6W832p8zoW5I1tkEzEpGzlhjA7wWIwPKVIlYF2XxKhua3z2+kXRKUW6WKjKwc+P81TIdw=="], + + "@metorial-services/scout-client": ["@metorial-services/scout-client@1.0.0", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.2" } }, "sha512-iZUt3ot1libD7mDh/9K5O/oYmuZGWxaxEIuTypzz0UQY0Ra4BFWwtfB88VwQCew58Fz6S2wf6iDsFLsq+/2s7w=="], + + "@metorial-services/slates-registry-client": ["@metorial-services/slates-registry-client@workspace:src/systems/slates/clients/registry"], + + "@metorial-services/slates-registry-internal-client": ["@metorial-services/slates-registry-internal-client@workspace:src/systems/slates/clients/registry-internal"], + + "@metorial-subspace/app-controller": ["@metorial-subspace/app-controller@workspace:src/systems/subspace/apps/controller"], + + "@metorial-subspace/app-public": ["@metorial-subspace/app-public@workspace:src/systems/subspace/apps/public"], + + "@metorial-subspace/app-worker": ["@metorial-subspace/app-worker@workspace:src/systems/subspace/apps/worker"], + + "@metorial-subspace/conduit": ["@metorial-subspace/conduit@workspace:src/systems/subspace/packages/conduit"], + + "@metorial-subspace/connection-utils": ["@metorial-subspace/connection-utils@workspace:src/systems/subspace/packages/connection-utils"], + + "@metorial-subspace/db": ["@metorial-subspace/db@workspace:src/systems/subspace/db"], + + "@metorial-subspace/generator": ["@metorial-subspace/generator@workspace:src/systems/subspace/packages/generator"], + + "@metorial-subspace/list-utils": ["@metorial-subspace/list-utils@workspace:src/systems/subspace/packages/list-utils"], + + "@metorial-subspace/module-agent": ["@metorial-subspace/module-agent@workspace:src/systems/subspace/modules/agent"], + + "@metorial-subspace/module-auth": ["@metorial-subspace/module-auth@workspace:src/systems/subspace/modules/auth"], + + "@metorial-subspace/module-callback": ["@metorial-subspace/module-callback@workspace:src/systems/subspace/modules/callback"], + + "@metorial-subspace/module-catalog": ["@metorial-subspace/module-catalog@workspace:src/systems/subspace/modules/catalog"], + + "@metorial-subspace/module-connection": ["@metorial-subspace/module-connection@workspace:src/systems/subspace/modules/connection"], + + "@metorial-subspace/module-custom-provider": ["@metorial-subspace/module-custom-provider@workspace:src/systems/subspace/modules/custom-provider"], + + "@metorial-subspace/module-deployment": ["@metorial-subspace/module-deployment@workspace:src/systems/subspace/modules/deployment"], + + "@metorial-subspace/module-identity": ["@metorial-subspace/module-identity@workspace:src/systems/subspace/modules/identity"], + + "@metorial-subspace/module-integration": ["@metorial-subspace/module-integration@workspace:src/systems/subspace/modules/integration"], + + "@metorial-subspace/module-provider-internal": ["@metorial-subspace/module-provider-internal@workspace:src/systems/subspace/modules/provider-internal"], + + "@metorial-subspace/module-search": ["@metorial-subspace/module-search@workspace:src/systems/subspace/modules/search"], + + "@metorial-subspace/module-session": ["@metorial-subspace/module-session@workspace:src/systems/subspace/modules/session"], + + "@metorial-subspace/module-skills": ["@metorial-subspace/module-skills@workspace:src/systems/subspace/modules/skills"], + + "@metorial-subspace/module-tenant": ["@metorial-subspace/module-tenant@workspace:src/systems/subspace/modules/tenant"], + + "@metorial-subspace/presenters": ["@metorial-subspace/presenters@workspace:src/systems/subspace/packages/presenters"], + + "@metorial-subspace/provider": ["@metorial-subspace/provider@workspace:src/systems/subspace/provider-backends/provider-manager"], + + "@metorial-subspace/provider-native": ["@metorial-subspace/provider-native@workspace:src/systems/subspace/provider-backends/provider-native"], + + "@metorial-subspace/provider-shuttle": ["@metorial-subspace/provider-shuttle@workspace:src/systems/subspace/provider-backends/provider-shuttle"], + + "@metorial-subspace/provider-slates": ["@metorial-subspace/provider-slates@workspace:src/systems/subspace/provider-backends/provider-slates"], + + "@metorial-subspace/provider-utils": ["@metorial-subspace/provider-utils@workspace:src/systems/subspace/provider-backends/provider-utils"], + + "@metorial-subspace/redis-url": ["@metorial-subspace/redis-url@workspace:src/systems/subspace/packages/redis-url"], + + "@metorial-subspace/retry-utils": ["@metorial-subspace/retry-utils@workspace:src/systems/subspace/packages/retry-utils"], + + "@metorial-subspace/store": ["@metorial-subspace/store@workspace:src/systems/subspace/packages/store"], + + "@metorial-subspace/tsconfig": ["@metorial-subspace/tsconfig@workspace:src/systems/subspace/packages/tsconfig"], + + "@metorial/api-auth": ["@metorial/api-auth@workspace:src/backend/apis/auth"], + + "@metorial/api-connection": ["@metorial/api-connection@workspace:src/backend/apis/connection"], + + "@metorial/api-core": ["@metorial/api-core@workspace:src/backend/apis/core"], + + "@metorial/api-custom-portal": ["@metorial/api-custom-portal@workspace:src/backend/apis/custom-portal"], + + "@metorial/api-files": ["@metorial/api-files@workspace:src/backend/apis/files"], + + "@metorial/api-keys": ["@metorial/api-keys@workspace:src/packages/server/api-keys"], + + "@metorial/api-oauth": ["@metorial/api-oauth@workspace:src/backend/apis/oauth"], + + "@metorial/app-api": ["@metorial/app-api@workspace:src/backend/apps/api"], + + "@metorial/app-dashboard": ["@metorial/app-dashboard@workspace:src/frontend/apps/dashboard"], + + "@metorial/ares": ["@metorial/ares@workspace:src/systems/ares/service"], + + "@metorial/auth": ["@metorial/auth@workspace:src/backend/auth"], + + "@metorial/bearer": ["@metorial/bearer@workspace:src/packages/server/bearer"], + + "@metorial/cache": ["@metorial/cache@workspace:src/packages/backend/cache"], + + "@metorial/chart": ["@metorial/chart@workspace:src/packages/frontend/chart"], + + "@metorial/code": ["@metorial/code@workspace:src/packages/frontend/code"], + + "@metorial/code-bucket-service-generated": ["@metorial/code-bucket-service-generated@workspace:src/systems/origin/apps/code-bucket"], + + "@metorial/code-editor": ["@metorial/code-editor@workspace:src/packages/frontend/code-editor"], + + "@metorial/code-workspace": ["@metorial/code-workspace@workspace:src/systems/origin/apps/code-workspace"], + + "@metorial/config": ["@metorial/config@workspace:src/backend/config"], + + "@metorial/consumer-auth": ["@metorial/consumer-auth@workspace:src/packages/backend/consumer-auth"], + + "@metorial/consumer-sdk": ["@metorial/consumer-sdk@workspace:clients/metorial-consumer"], + + "@metorial/context": ["@metorial/context@workspace:src/packages/server/context"], + + "@metorial/control": ["@metorial/control@workspace:src/tooling/control"], + + "@metorial/cron": ["@metorial/cron@workspace:src/packages/backend/cron"], + + "@metorial/dashboard-sdk": ["@metorial/dashboard-sdk@workspace:clients/metorial-dashboard"], + + "@metorial/data-hooks": ["@metorial/data-hooks@workspace:src/packages/frontend/data-hooks"], + + "@metorial/db": ["@metorial/db@workspace:src/backend/db"], + + "@metorial/debug": ["@metorial/debug@workspace:src/packages/shared/debug"], + + "@metorial/dynamic-component": ["@metorial/dynamic-component@workspace:src/packages/frontend/dynamic-component"], + + "@metorial/event": ["@metorial/event@workspace:src/packages/backend/event"], + + "@metorial/explorer": ["@metorial/explorer@workspace:src/frontend/apps/explorer"], - "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.112", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-jiBao9pR4owWyjo0BnuNc7WSQBGOD0thysE4AFgZXaG+zMFbISQXUkJr7ePw/phBvePy7jE5FSA2Lf7lwqUiiQ=="], + "@metorial/fabric": ["@metorial/fabric@workspace:src/packages/backend/fabric"], - "@ai-sdk/google": ["@ai-sdk/google@3.0.72", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-9EVG0AdUhs0hJ2+sqRb4IURZnsBahuU1CQELu+hfItm0wUTzxnVhIbQ4/jJkG/QFPtBUvMefCwDT7HX8T2HVbQ=="], + "@metorial/fetch": ["@metorial/fetch@1.0.0", "", { "dependencies": { "cross-fetch": "^4.1.0" } }, "sha512-5R+FqW0tnSWyir6hEkGkYGnr9+urUX7zYtjVFmQhzFB253M/UwiewDiEqGAzbIm3+qwS2c/fbk0BwSxwSSz9PA=="], - "@ai-sdk/mcp": ["@ai-sdk/mcp@1.0.42", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "pkce-challenge": "^5.0.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ctRhX9vNLXvjGSFf+RlM+ZutIhlzIgMPWzo2BoJKfIW9JzLneA/57bZkkaUvWSdbYFu1FCyxMarNV/4D/pOUzA=="], + "@metorial/forge": ["@metorial/forge@workspace:src/systems/forge/service"], - "@ai-sdk/openai": ["@ai-sdk/openai@3.0.63", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-4yY/m8a57MNNVoJCsXuNblKf6BO4yuAuLKRX4tzSNffBEBSp1FlcWdPE0Z4FkqUeS0AJhYSSqp0GIiA/cIcDNA=="], + "@metorial/frontend-config": ["@metorial/frontend-config@workspace:src/frontend/config"], - "@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.47", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Enm5UlL0zUCrW3792opk5h7hRWxZOZzDe6eQYVFqX9LUOGGCe1h8MZWAGim765nwzgnjlpeYOsuzZmLtRsTPlg=="], + "@metorial/function-bay": ["@metorial/function-bay@workspace:src/systems/function-bay/service"], - "@ai-sdk/provider": ["@ai-sdk/provider@3.0.10", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw=="], + "@metorial/generated": ["@metorial/generated@1.0.0", "", { "dependencies": { "@metorial/util-endpoint": "^1.0.0", "@metorial/util-resource-mapper": "^1.0.0", "jose": "^5.9.6" } }, "sha512-qlCVP8KFcjzgD3qZk2CPT8P6B2EcEXlFEcDDuSz432pgfoXRxdc+TFL5seT5LAgLFP1guGPdSuvlj3iVh7tiww=="], - "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.27", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ubkAJ+xODouwtmN1tYlvTPphH1hPOBfZaEQe8U7skGvFAnIRs9PPpsq57bC2+Ky/MB4yzhd6YOsxTAx9sGpazw=="], + "@metorial/id": ["@metorial/id@workspace:src/packages/shared/id"], - "@ai-sdk/xai": ["@ai-sdk/xai@3.0.89", "", { "dependencies": { "@ai-sdk/openai-compatible": "2.0.47", "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ecFE4iQnWePrxPYuSUYCh8lpoKZ52J3jao5whDVC3+Z9Cu/XeyOe2oUGzsYSUPgbJNi/ZmD/KN69bHbUcAHFvw=="], + "@metorial/internal-clients": ["@metorial/internal-clients@workspace:src/backend/internal-clients"], - "@algolia/abtesting": ["@algolia/abtesting@1.18.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-aehCadlWOGvrT91KUIZpC0MbB8KBW9yUuvTJFd2xesR7le/IsT4nJUnjCCZ4ZqZCeTcPHPV5mo//fZ5oxcSVYw=="], + "@metorial/layout": ["@metorial/layout@workspace:src/frontend/layout"], - "@algolia/client-abtesting": ["@algolia/client-abtesting@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-HmXOGBOAOJPounpBzBpuY0zDYeiCpxgHnQmuA7JO6ScukcBdGp3/XM9zJk5pJx/xNGD68mbPGXWpDxGtl6BwDQ=="], + "@metorial/lock": ["@metorial/lock@workspace:src/packages/backend/lock"], - "@algolia/client-analytics": ["@algolia/client-analytics@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-5oo4+I8iixie9vXhCyNFCzeIr8pqA3FQ//VsLHTDvZAV4ttYOPGvYHGQq5NSalrLx5Jc3dRro/5uDOlnUMcBJg=="], + "@metorial/logging": ["@metorial/logging@workspace:src/packages/backend/logging"], - "@algolia/client-common": ["@algolia/client-common@5.52.1", "", {}, "sha512-qCDoZfx5MpX7XQzvQ3bC4tSEMkQWQMaF/ABtLuoze03Y/flR563CCSws02qIJ23oX7lxl92LsilZjINVyTdtLw=="], + "@metorial/markdown": ["@metorial/markdown@workspace:src/packages/frontend/markdown"], - "@algolia/client-insights": ["@algolia/client-insights@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-hnGs0/lsFJ2PWDxNBz7pxreXo/Xz7gxYRcfePBUjsH26ad0kU/sgnVZd9LwWBpsQv65z2jlb5dkyaB9WE9M9FQ=="], + "@metorial/mcp": ["@metorial/mcp@workspace:src/systems/shuttle/sdk/packages/mcp"], - "@algolia/client-personalization": ["@algolia/client-personalization@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-2VxxNc/uBysyKvGeBdSM5n9eIDKH8kWD7wd9/yqbJAiVwU4Yv6tU1LSJusHKrXV/aCu1KW7t9Gug9QyeEmtn/Q=="], + "@metorial/mcp-server": ["@metorial/mcp-server@workspace:src/systems/shuttle/sdk/packages/mcp-server"], - "@algolia/client-query-suggestions": ["@algolia/client-query-suggestions@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-O6mPtsw3xEfNOe6gWFpYLeAZAIljNa4Hgna3bq15PwyN7nbjTY0wXJFRbzs/0YVf75Br+SbOQUmjKxXYjDiSiQ=="], + "@metorial/mcp-transport-memory": ["@metorial/mcp-transport-memory@workspace:src/systems/shuttle/sdk/packages/mcp-transport-memory"], - "@algolia/client-search": ["@algolia/client-search@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-gA8oJOV1LnQQkDf91iebNnFInHuW0gRPEgLSOQ7EfipCEjYTHm5swm1DlH9H5RaRw4RrHuzHBegnlzc0MAstcg=="], + "@metorial/mcp-utils": ["@metorial/mcp-utils@workspace:src/packages/mcp/mcp-utils"], - "@algolia/ingestion": ["@algolia/ingestion@1.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-U9zZfc5xIu9wRxZkt+HceJUAD4VKHKbAyLSloJdEyMRmphXeibfrY9cxqIXBcmPeZzGhn3Imb35Dq8l19PkJhw=="], + "@metorial/microfrontend": ["@metorial/microfrontend@workspace:src/packages/frontend/microfrontend"], - "@algolia/monitoring": ["@algolia/monitoring@1.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-a3SGNceHmkQfq77iG8Ka+w1pvwfZa/0lzEIgse30fL0kD+yKnd/dg0dQvSfFPAEt2f21DMcGkDSSeJlO3KdQjQ=="], + "@metorial/module-access": ["@metorial/module-access@workspace:src/backend/modules/access"], - "@algolia/recommend": ["@algolia/recommend@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-z98QEguCFDpxb4S/PyrUK1igqF8tPsdbqOUUO6ON91vJ58w+Gwa6ncrI0oNXSFcrkxA5EqPKPQ2A1PBCn08TYQ=="], + "@metorial/module-assistant": ["@metorial/module-assistant@workspace:src/backend/modules/assistant"], - "@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1" } }, "sha512-CI7+/0I11QeZM59Uc8whd2or0kqzFVjpaPn9Qpwll/krHcBAxk24WkAQ6WX+IwDVMfpont4YGbKwAmCre3vE8Q=="], + "@metorial/module-community": ["@metorial/module-community@workspace:src/backend/modules/community"], - "@algolia/requester-fetch": ["@algolia/requester-fetch@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1" } }, "sha512-S6bDuw9byfOvm3T71cgdoZgrgnZq6hpdMLkx52Louh57nUAmvGQESz2aojOynQHjbTiV55smvAFbgn0qT4tJrg=="], + "@metorial/module-consumer": ["@metorial/module-consumer@workspace:src/backend/modules/consumer"], - "@algolia/requester-node-http": ["@algolia/requester-node-http@5.52.1", "", { "dependencies": { "@algolia/client-common": "5.52.1" } }, "sha512-tqZXM+54rWo4mk5jL5Z/flE11nPmNEdXwFBM5py9DkOmbjeCNemfVd45FyM97XdzfZ0dl9uOJC6PYn1FpkeyQg=="], + "@metorial/module-email": ["@metorial/module-email@workspace:src/backend/modules/email"], - "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], + "@metorial/module-event": ["@metorial/module-event@workspace:src/backend/modules/event"], - "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], + "@metorial/module-file": ["@metorial/module-file@workspace:src/backend/modules/file"], + + "@metorial/module-flags": ["@metorial/module-flags@workspace:src/backend/modules/flags"], + + "@metorial/module-machine-access": ["@metorial/module-machine-access@workspace:src/backend/modules/machine-access"], + + "@metorial/module-magic": ["@metorial/module-magic@workspace:src/backend/modules/magic"], + + "@metorial/module-markdown": ["@metorial/module-markdown@workspace:src/backend/modules/markdown"], + + "@metorial/module-organization": ["@metorial/module-organization@workspace:src/backend/modules/organization"], + + "@metorial/module-protect": ["@metorial/module-protect@workspace:src/backend/modules/protect"], + + "@metorial/module-search": ["@metorial/module-search@workspace:src/backend/modules/search"], + + "@metorial/module-subspace": ["@metorial/module-subspace@workspace:src/backend/modules/subspace"], + + "@metorial/module-usage": ["@metorial/module-usage@workspace:src/backend/modules/usage"], + + "@metorial/module-user": ["@metorial/module-user@workspace:src/backend/modules/user"], + + "@metorial/multi-region": ["@metorial/multi-region@workspace:src/backend/multi-region"], + + "@metorial/origin": ["@metorial/origin@workspace:src/systems/origin/apps/service"], + + "@metorial/pages": ["@metorial/pages@workspace:src/packages/frontend/pages"], + + "@metorial/presenter": ["@metorial/presenter@workspace:src/packages/server/presenter"], + + "@metorial/queue": ["@metorial/queue@workspace:src/packages/backend/queue"], + + "@metorial/redis": ["@metorial/redis@workspace:src/packages/backend/redis"], + + "@metorial/relay": ["@metorial/relay@workspace:src/systems/relay/service"], + + "@metorial/rest": ["@metorial/rest@workspace:src/packages/server/rest"], + + "@metorial/root": ["@metorial/root@workspace:src/systems/shuttle/sdk"], + + "@metorial/rpc": ["@metorial/rpc@workspace:src/packages/backend/rpc"], + + "@metorial/scene-assistant": ["@metorial/scene-assistant@workspace:src/frontend/scenes/assistant"], + + "@metorial/scene-docs": ["@metorial/scene-docs@workspace:src/frontend/scenes/docs"], + + "@metorial/scene-skills": ["@metorial/scene-skills@workspace:src/frontend/scenes/skills"], + + "@metorial/shuttle": ["@metorial/shuttle@workspace:src/systems/shuttle/service"], + + "@metorial/signal": ["@metorial/signal@workspace:src/systems/signal/service"], + + "@metorial/slates": ["@metorial/slates@workspace:src/systems/slates/apps/hub"], + + "@metorial/slates-registry": ["@metorial/slates-registry@workspace:src/systems/slates/apps/registry"], + + "@metorial/state": ["@metorial/state@workspace:src/frontend/state"], + + "@metorial/storage": ["@metorial/storage@workspace:src/packages/frontend/storage"], + + "@metorial/subspace-dev": ["@metorial/subspace-dev@workspace:src/systems/subspace/apps/dev"], + + "@metorial/synthesis": ["@metorial/synthesis@workspace:src/systems/synthesis/service"], + + "@metorial/tsconfig": ["@metorial/tsconfig@workspace:src/packages/shared/tsconfig"], + + "@metorial/ui": ["@metorial/ui@workspace:src/packages/frontend/ui"], + + "@metorial/ui-product": ["@metorial/ui-product@workspace:src/packages/frontend/ui-product"], + + "@metorial/unified-id": ["@metorial/unified-id@workspace:src/packages/mcp/unified-id"], + + "@metorial/util-async-iterator": ["@metorial/util-async-iterator@1.0.0", "", {}, "sha512-Q7R+eB6E/eMirxowFvFi+EXnkFOn6EWr1SBwsMLCknu5qIZ/Kgm3yiqyaaisHm1vl7zki5+gIxYST9LxPjdrTA=="], + + "@metorial/util-endpoint": ["@metorial/util-endpoint@1.0.1", "", { "dependencies": { "@metorial/util-async-iterator": "^1.0.0", "@types/qs": "^6.14.0", "cross-fetch": "^4.1.0", "qs": "^6.13.1" } }, "sha512-LqRt1EX5lx+/zYiDwlOHBg9NXqkARl+XQWquaJihbGc8+TPVCxw8yWEh/n6mwPU7ydG3QiAqlEM1cfPMRFpTbQ=="], + + "@metorial/util-resource-mapper": ["@metorial/util-resource-mapper@1.0.0", "", {}, "sha512-CUPXTqEJXyYBYIDaUXvMQywimC43Q5DTycXcXEpT+cxSVngKswqe3F1Zih0CLFyaLHeSGqXRRaSOBsZebSv+iw=="], + + "@metorial/util-websocket": ["@metorial/util-websocket@1.0.0", "", { "dependencies": { "mitt": "^3.0.1", "ws": "^8.18.2" } }, "sha512-o0qRqbrjlmpjuKGyND4WDDCKBBRPztV8VkaX1HFSnbbKl/Jftz8CPtKnKmLQ38O4XPWPwl7Y7+9OPW7nqDg7UA=="], + + "@metorial/voyager": ["@metorial/voyager@workspace:src/systems/voyager/service"], + + "@mixmark-io/domino": ["@mixmark-io/domino@2.2.0", "", {}, "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw=="], + + "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.27.1", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA=="], + + "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.4.6", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g=="], + + "@mongodb-js/zstd": ["@mongodb-js/zstd@7.0.0", "", { "dependencies": { "node-addon-api": "^8.5.0", "prebuild-install": "^7.1.3" } }, "sha512-mQ2s0pYYiav+tzCDR05Zptem8Ey2v8s11lri5RKGhTtL4COVCvVCk5vtyRYNT+9L8qSfyOqqefF9UtnW8mC5jA=="], + + "@mrleebo/prisma-ast": ["@mrleebo/prisma-ast@0.13.1", "", { "dependencies": { "chevrotain": "^10.5.0", "lilconfig": "^2.1.0" } }, "sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw=="], + + "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw=="], + + "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw=="], + + "@msgpackr-extract/msgpackr-extract-linux-arm": ["@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3", "", { "os": "linux", "cpu": "arm" }, "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw=="], + + "@msgpackr-extract/msgpackr-extract-linux-arm64": ["@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg=="], + + "@msgpackr-extract/msgpackr-extract-linux-x64": ["@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg=="], + + "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="], + + "@mtsrc/anonymize-ip": ["@mtsrc/anonymize-ip@workspace:src/_shared/util/anonymize-ip"], + + "@mtsrc/api-key": ["@mtsrc/api-key@workspace:src/_shared/backend/api-key"], + + "@mtsrc/api-mux": ["@mtsrc/api-mux@workspace:src/_shared/backend/api-mux"], + + "@mtsrc/base62": ["@mtsrc/base62@workspace:src/_shared/util/base62"], + + "@mtsrc/cache": ["@mtsrc/cache@workspace:src/_shared/backend/cache"], + + "@mtsrc/canonicalize": ["@mtsrc/canonicalize@workspace:src/_shared/util/canonicalize"], + + "@mtsrc/case": ["@mtsrc/case@workspace:src/_shared/util/case"], + + "@mtsrc/cron": ["@mtsrc/cron@workspace:src/_shared/backend/cron"], + + "@mtsrc/delay": ["@mtsrc/delay@workspace:src/_shared/util/delay"], + + "@mtsrc/emitter": ["@mtsrc/emitter@workspace:src/_shared/util/emitter"], + + "@mtsrc/encryption": ["@mtsrc/encryption@workspace:src/_shared/util/encryption"], + + "@mtsrc/env": ["@mtsrc/env@workspace:src/_shared/backend/env"], + + "@mtsrc/error": ["@mtsrc/error@workspace:src/_shared/backend/error"], + + "@mtsrc/event": ["@mtsrc/event@workspace:src/_shared/backend/event"], + + "@mtsrc/execution-context": ["@mtsrc/execution-context@workspace:src/_shared/backend/execution-context"], + + "@mtsrc/flatten": ["@mtsrc/flatten@workspace:src/_shared/util/flatten"], + + "@mtsrc/forwarded-for": ["@mtsrc/forwarded-for@workspace:src/_shared/backend/forwarded-for"], + + "@mtsrc/hash": ["@mtsrc/hash@workspace:src/_shared/util/hash"], + + "@mtsrc/hono": ["@mtsrc/hono@workspace:src/_shared/backend/hono"], + + "@mtsrc/id": ["@mtsrc/id@workspace:src/_shared/util/id"], + + "@mtsrc/ip-info": ["@mtsrc/ip-info@workspace:src/_shared/util/ip-info"], + + "@mtsrc/join-paths": ["@mtsrc/join-paths@workspace:src/_shared/util/join-paths"], + + "@mtsrc/jwt": ["@mtsrc/jwt@workspace:src/_shared/util/jwt"], + + "@mtsrc/lock": ["@mtsrc/lock@workspace:src/_shared/backend/lock"], + + "@mtsrc/memo": ["@mtsrc/memo@workspace:src/_shared/util/memo"], + + "@mtsrc/merge": ["@mtsrc/merge@workspace:src/_shared/util/merge"], + + "@mtsrc/murmur3": ["@mtsrc/murmur3@workspace:src/_shared/util/murmur3"], + + "@mtsrc/normalize-email": ["@mtsrc/normalize-email@workspace:src/_shared/util/normalize-email"], + + "@mtsrc/once": ["@mtsrc/once@workspace:src/_shared/util/once"], + + "@mtsrc/pagination": ["@mtsrc/pagination@workspace:src/_shared/backend/pagination"], + + "@mtsrc/presenter": ["@mtsrc/presenter@workspace:src/_shared/backend/presenter"], + + "@mtsrc/programmable-promise": ["@mtsrc/programmable-promise@workspace:src/_shared/util/programmable-promise"], + + "@mtsrc/proxy": ["@mtsrc/proxy@workspace:src/_shared/util/proxy"], + + "@mtsrc/queue": ["@mtsrc/queue@workspace:src/_shared/backend/queue"], + + "@mtsrc/random-from-array": ["@mtsrc/random-from-array@workspace:src/_shared/util/random-from-array"], + + "@mtsrc/random-number": ["@mtsrc/random-number@workspace:src/_shared/util/random-number"], + + "@mtsrc/redis": ["@mtsrc/redis@workspace:src/_shared/backend/redis"], + + "@mtsrc/rpc-client": ["@mtsrc/rpc-client@workspace:src/_shared/rpc/rpc-client"], + + "@mtsrc/rpc-server": ["@mtsrc/rpc-server@workspace:src/_shared/rpc/rpc-server"], + + "@mtsrc/sentry": ["@mtsrc/sentry@workspace:src/_shared/util/sentry"], + + "@mtsrc/serialize": ["@mtsrc/serialize@workspace:src/_shared/util/serialize"], + + "@mtsrc/service": ["@mtsrc/service@workspace:src/_shared/backend/service"], + + "@mtsrc/shadow-id": ["@mtsrc/shadow-id@workspace:src/_shared/util/shadow-id"], + + "@mtsrc/sign": ["@mtsrc/sign@workspace:src/_shared/util/sign"], + + "@mtsrc/slugify": ["@mtsrc/slugify@workspace:src/_shared/util/slugify"], + + "@mtsrc/snowflake": ["@mtsrc/snowflake@workspace:src/_shared/util/snowflake"], + + "@mtsrc/telemetry": ["@mtsrc/telemetry@workspace:src/_shared/backend/telemetry"], + + "@mtsrc/testing-tools": ["@mtsrc/testing-tools@workspace:src/_shared/backend/testing-tools"], + + "@mtsrc/timezone": ["@mtsrc/timezone@workspace:src/_shared/util/timezone"], + + "@mtsrc/tokens": ["@mtsrc/tokens@workspace:src/_shared/backend/tokens"], + + "@mtsrc/unique": ["@mtsrc/unique@workspace:src/_shared/util/unique"], + + "@mtsrc/validation": ["@mtsrc/validation@workspace:src/_shared/util/validation"], + + "@mtsrc/websocket-client": ["@mtsrc/websocket-client@workspace:src/_shared/util/websocket-client"], + + "@napi-rs/canvas": ["@napi-rs/canvas@0.1.100", "", { "optionalDependencies": { "@napi-rs/canvas-android-arm64": "0.1.100", "@napi-rs/canvas-darwin-arm64": "0.1.100", "@napi-rs/canvas-darwin-x64": "0.1.100", "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.100", "@napi-rs/canvas-linux-arm64-gnu": "0.1.100", "@napi-rs/canvas-linux-arm64-musl": "0.1.100", "@napi-rs/canvas-linux-riscv64-gnu": "0.1.100", "@napi-rs/canvas-linux-x64-gnu": "0.1.100", "@napi-rs/canvas-linux-x64-musl": "0.1.100", "@napi-rs/canvas-win32-arm64-msvc": "0.1.100", "@napi-rs/canvas-win32-x64-msvc": "0.1.100" } }, "sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA=="], + + "@napi-rs/canvas-android-arm64": ["@napi-rs/canvas-android-arm64@0.1.100", "", { "os": "android", "cpu": "arm64" }, "sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ=="], + + "@napi-rs/canvas-darwin-arm64": ["@napi-rs/canvas-darwin-arm64@0.1.100", "", { "os": "darwin", "cpu": "arm64" }, "sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A=="], + + "@napi-rs/canvas-darwin-x64": ["@napi-rs/canvas-darwin-x64@0.1.100", "", { "os": "darwin", "cpu": "x64" }, "sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw=="], + + "@napi-rs/canvas-linux-arm-gnueabihf": ["@napi-rs/canvas-linux-arm-gnueabihf@0.1.100", "", { "os": "linux", "cpu": "arm" }, "sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA=="], + + "@napi-rs/canvas-linux-arm64-gnu": ["@napi-rs/canvas-linux-arm64-gnu@0.1.100", "", { "os": "linux", "cpu": "arm64" }, "sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw=="], + + "@napi-rs/canvas-linux-arm64-musl": ["@napi-rs/canvas-linux-arm64-musl@0.1.100", "", { "os": "linux", "cpu": "arm64" }, "sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ=="], + + "@napi-rs/canvas-linux-riscv64-gnu": ["@napi-rs/canvas-linux-riscv64-gnu@0.1.100", "", { "os": "linux", "cpu": "none" }, "sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw=="], + + "@napi-rs/canvas-linux-x64-gnu": ["@napi-rs/canvas-linux-x64-gnu@0.1.100", "", { "os": "linux", "cpu": "x64" }, "sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg=="], + + "@napi-rs/canvas-linux-x64-musl": ["@napi-rs/canvas-linux-x64-musl@0.1.100", "", { "os": "linux", "cpu": "x64" }, "sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA=="], + + "@napi-rs/canvas-win32-arm64-msvc": ["@napi-rs/canvas-win32-arm64-msvc@0.1.100", "", { "os": "win32", "cpu": "arm64" }, "sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw=="], + + "@napi-rs/canvas-win32-x64-msvc": ["@napi-rs/canvas-win32-x64-msvc@0.1.100", "", { "os": "win32", "cpu": "x64" }, "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA=="], + + "@nodable/entities": ["@nodable/entities@2.1.0", "", {}, "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@npmcli/fs": ["@npmcli/fs@1.1.1", "", { "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" } }, "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ=="], + + "@npmcli/move-file": ["@npmcli/move-file@1.1.2", "", { "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" } }, "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg=="], + + "@octokit/auth-app": ["@octokit/auth-app@8.2.0", "", { "dependencies": { "@octokit/auth-oauth-app": "^9.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "toad-cache": "^3.7.0", "universal-github-app-jwt": "^2.2.0", "universal-user-agent": "^7.0.0" } }, "sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g=="], + + "@octokit/auth-oauth-app": ["@octokit/auth-oauth-app@9.0.3", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg=="], + + "@octokit/auth-oauth-device": ["@octokit/auth-oauth-device@8.0.3", "", { "dependencies": { "@octokit/oauth-methods": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw=="], + + "@octokit/auth-oauth-user": ["@octokit/auth-oauth-user@6.0.2", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.3", "@octokit/oauth-methods": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A=="], + + "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], + + "@octokit/core": ["@octokit/core@7.0.6", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.3", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q=="], + + "@octokit/endpoint": ["@octokit/endpoint@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag=="], + + "@octokit/graphql": ["@octokit/graphql@9.0.3", "", { "dependencies": { "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA=="], - "@aws-crypto/crc32c": ["@aws-crypto/crc32c@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag=="], + "@octokit/oauth-authorization-url": ["@octokit/oauth-authorization-url@8.0.0", "", {}, "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ=="], - "@aws-crypto/sha1-browser": ["@aws-crypto/sha1-browser@5.2.0", "", { "dependencies": { "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg=="], + "@octokit/oauth-methods": ["@octokit/oauth-methods@6.0.2", "", { "dependencies": { "@octokit/oauth-authorization-url": "^8.0.0", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0" } }, "sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng=="], - "@aws-crypto/sha256-browser": ["@aws-crypto/sha256-browser@5.2.0", "", { "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw=="], + "@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], - "@aws-crypto/sha256-js": ["@aws-crypto/sha256-js@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA=="], + "@octokit/request": ["@octokit/request@10.0.8", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" } }, "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw=="], - "@aws-crypto/supports-web-crypto": ["@aws-crypto/supports-web-crypto@5.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg=="], + "@octokit/request-error": ["@octokit/request-error@7.1.0", "", { "dependencies": { "@octokit/types": "^16.0.0" } }, "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw=="], - "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], + "@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], - "@aws-sdk/client-cloudwatch-logs": ["@aws-sdk/client-cloudwatch-logs@3.1015.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.24", "@aws-sdk/credential-provider-node": "^3.972.25", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.25", "@aws-sdk/region-config-resolver": "^3.972.9", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.11", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/eventstream-serde-browser": "^4.2.12", "@smithy/eventstream-serde-config-resolver": "^4.3.12", "@smithy/eventstream-serde-node": "^4.2.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.27", "@smithy/middleware-retry": "^4.4.44", "@smithy/middleware-serde": "^4.2.15", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.5.0", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.43", "@smithy/util-defaults-mode-node": "^4.2.47", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-lo6LoJXPeb3uAKdIuHvCUfvqpOXi8bQ2EsHo2blSVNY8PJEl0N5vqSCZNjLqnKfX7H7vLHm7Vq1ePOxL/5AjvA=="], + "@openharness/core": ["@openharness/core@0.6.2", "", { "dependencies": { "@ai-sdk/mcp": "^1.0.21", "ai": "^6.0.97", "zod": "^4.3.6" } }, "sha512-532Wqdj+D3or7EsiwsQBJc667muV07BCWlqBzA78mKYkdi71RqiiPtsb/9QhBNy9eW9zWkGTTzNTV7rh8b36SQ=="], - "@aws-sdk/client-codebuild": ["@aws-sdk/client-codebuild@3.1030.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.27", "@aws-sdk/credential-provider-node": "^3.972.30", "@aws-sdk/middleware-host-header": "^3.972.9", "@aws-sdk/middleware-logger": "^3.972.9", "@aws-sdk/middleware-recursion-detection": "^3.972.10", "@aws-sdk/middleware-user-agent": "^3.972.29", "@aws-sdk/region-config-resolver": "^3.972.11", "@aws-sdk/types": "^3.973.7", "@aws-sdk/util-endpoints": "^3.996.6", "@aws-sdk/util-user-agent-browser": "^3.972.9", "@aws-sdk/util-user-agent-node": "^3.973.15", "@smithy/config-resolver": "^4.4.14", "@smithy/core": "^3.23.14", "@smithy/fetch-http-handler": "^5.3.16", "@smithy/hash-node": "^4.2.13", "@smithy/invalid-dependency": "^4.2.13", "@smithy/middleware-content-length": "^4.2.13", "@smithy/middleware-endpoint": "^4.4.29", "@smithy/middleware-retry": "^4.5.0", "@smithy/middleware-serde": "^4.2.17", "@smithy/middleware-stack": "^4.2.13", "@smithy/node-config-provider": "^4.3.13", "@smithy/node-http-handler": "^4.5.2", "@smithy/protocol-http": "^5.3.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.45", "@smithy/util-defaults-mode-node": "^4.2.49", "@smithy/util-endpoints": "^3.3.4", "@smithy/util-middleware": "^4.2.13", "@smithy/util-retry": "^4.3.0", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-n1Mkwx5Kntrr7tL+zqnoNzN6Lfx+iBLknuyRDev4GtyrN4lxWyTTMssE5CfmM98+brPr6Ehk5qzuLL+0vje/Jw=="], + "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], - "@aws-sdk/client-cognito-identity": ["@aws-sdk/client-cognito-identity@3.1048.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-node": "^3.972.42", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-eJUSxEwhz9fKmjhRgOvFTuJ+SjCu15SpgYo3aSJ6rjs2IaWi2F8NcvOuejHb0a01a/J71/9bdjUDrQLH2kUmkg=="], + "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.212.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg=="], - "@aws-sdk/client-dynamodb": ["@aws-sdk/client-dynamodb@3.1048.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-node": "^3.972.42", "@aws-sdk/dynamodb-codec": "^3.973.11", "@aws-sdk/middleware-endpoint-discovery": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-253MF+BhKKKppRp6f/zs8bFXCknR6vD+7Myd/pIsFcrsk+Yu2Koqyr5JXVsHPgxDtpFvjY90Iegtc8Q+MmaPww=="], + "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@2.6.0", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q=="], - "@aws-sdk/client-iam": ["@aws-sdk/client-iam@3.1015.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.24", "@aws-sdk/credential-provider-node": "^3.972.25", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.25", "@aws-sdk/region-config-resolver": "^3.972.9", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.11", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.27", "@smithy/middleware-retry": "^4.4.44", "@smithy/middleware-serde": "^4.2.15", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.5.0", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.43", "@smithy/util-defaults-mode-node": "^4.2.47", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-3srP6VtEV3Xui+ItA16TjbiX75jrG8bNOMLQtQASzKMgzuvWezn3RaOl6KBLU2NmeNTU8DmVv+Rsx/1uICc+CQ=="], + "@opentelemetry/core": ["@opentelemetry/core@2.6.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg=="], - "@aws-sdk/client-kms": ["@aws-sdk/client-kms@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-VDv6dFeAUgTTI2p0YSqiwwdsdh+sw7uwu7oR+KjE49FbiSls/ky0gsDjcE+sAb1ujejvR/FVpnE7NlYlNlTGPg=="], + "@opentelemetry/exporter-metrics-otlp-grpc": ["@opentelemetry/exporter-metrics-otlp-grpc@0.57.1", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/exporter-metrics-otlp-http": "0.57.1", "@opentelemetry/otlp-exporter-base": "0.57.1", "@opentelemetry/otlp-grpc-exporter-base": "0.57.1", "@opentelemetry/otlp-transformer": "0.57.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-8B7k5q4AUldbfvubcHApg1XQaio/cO/VUWsM5PSaRP2fsjGNwbn2ih04J3gLD+AmgslvyuDcA2SZiDXEKwAxtQ=="], - "@aws-sdk/client-lambda": ["@aws-sdk/client-lambda@3.1015.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.24", "@aws-sdk/credential-provider-node": "^3.972.25", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.25", "@aws-sdk/region-config-resolver": "^3.972.9", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.11", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.12", "@smithy/eventstream-serde-browser": "^4.2.12", "@smithy/eventstream-serde-config-resolver": "^4.3.12", "@smithy/eventstream-serde-node": "^4.2.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.27", "@smithy/middleware-retry": "^4.4.44", "@smithy/middleware-serde": "^4.2.15", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.5.0", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.43", "@smithy/util-defaults-mode-node": "^4.2.47", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-stream": "^4.5.20", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-03oRSKMFxPSXIfZsB7RpYopynPn714nS/0SI5OJ0izxld+qdwzkcnlvb/NGONXh7emn62iPxF1X32wInXM6lZw=="], + "@opentelemetry/exporter-metrics-otlp-http": ["@opentelemetry/exporter-metrics-otlp-http@0.57.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-exporter-base": "0.57.1", "@opentelemetry/otlp-transformer": "0.57.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-jpKYVZY7fdwTdy+eAy/Mp9DZMaQpj7caMzlo3QqQDSJx5FZEY6zWzgcKvDvF6h+gdHE7LgUjaPOvJVUs354jJg=="], - "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.1001.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.16", "@aws-sdk/credential-provider-node": "^3.972.15", "@aws-sdk/middleware-bucket-endpoint": "^3.972.6", "@aws-sdk/middleware-expect-continue": "^3.972.6", "@aws-sdk/middleware-flexible-checksums": "^3.973.2", "@aws-sdk/middleware-host-header": "^3.972.6", "@aws-sdk/middleware-location-constraint": "^3.972.6", "@aws-sdk/middleware-logger": "^3.972.6", "@aws-sdk/middleware-recursion-detection": "^3.972.6", "@aws-sdk/middleware-sdk-s3": "^3.972.16", "@aws-sdk/middleware-ssec": "^3.972.6", "@aws-sdk/middleware-user-agent": "^3.972.16", "@aws-sdk/region-config-resolver": "^3.972.6", "@aws-sdk/signature-v4-multi-region": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-endpoints": "^3.996.3", "@aws-sdk/util-user-agent-browser": "^3.972.6", "@aws-sdk/util-user-agent-node": "^3.973.1", "@smithy/config-resolver": "^4.4.9", "@smithy/core": "^3.23.7", "@smithy/eventstream-serde-browser": "^4.2.10", "@smithy/eventstream-serde-config-resolver": "^4.3.10", "@smithy/eventstream-serde-node": "^4.2.10", "@smithy/fetch-http-handler": "^5.3.12", "@smithy/hash-blob-browser": "^4.2.11", "@smithy/hash-node": "^4.2.10", "@smithy/hash-stream-node": "^4.2.10", "@smithy/invalid-dependency": "^4.2.10", "@smithy/md5-js": "^4.2.10", "@smithy/middleware-content-length": "^4.2.10", "@smithy/middleware-endpoint": "^4.4.21", "@smithy/middleware-retry": "^4.4.38", "@smithy/middleware-serde": "^4.2.11", "@smithy/middleware-stack": "^4.2.10", "@smithy/node-config-provider": "^4.3.10", "@smithy/node-http-handler": "^4.4.13", "@smithy/protocol-http": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-body-length-node": "^4.2.2", "@smithy/util-defaults-mode-browser": "^4.3.37", "@smithy/util-defaults-mode-node": "^4.2.40", "@smithy/util-endpoints": "^3.3.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-retry": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "@smithy/util-waiter": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-uKgFjQuBjMcd0iigLQwnqIp9gOy/5TGBxa42rcb6l5byDt1mrwOe6fyWTEUEJaNHG2LKYSPUibteGvM1zfm0Rw=="], + "@opentelemetry/exporter-trace-otlp-http": ["@opentelemetry/exporter-trace-otlp-http@0.211.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/otlp-exporter-base": "0.211.0", "@opentelemetry/otlp-transformer": "0.211.0", "@opentelemetry/resources": "2.5.0", "@opentelemetry/sdk-trace-base": "2.5.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-F1Rv3JeMkgS//xdVjbQMrI3+26e5SXC7vXA6trx8SWEA0OUhw4JHB+qeHtH0fJn46eFItrYbL5m8j4qi9Sfaxw=="], - "@aws-sdk/client-ses": ["@aws-sdk/client-ses@3.1052.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.13", "@aws-sdk/credential-provider-node": "^3.972.44", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/fetch-http-handler": "^5.4.3", "@smithy/node-http-handler": "^4.7.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-uYmk/sieuniKhq4Qvc7Lg0b7HX3Td3SeJZsABIy0JX1EH0Y5Zl9RXMRloG2h/IwU9ZS2Gj1a00gBop0s6vP7nw=="], + "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.212.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.212.0", "import-in-the-middle": "^2.0.6", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg=="], - "@aws-sdk/core": ["@aws-sdk/core@3.974.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws-sdk/xml-builder": "^3.972.24", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/core": "^3.24.2", "@smithy/signature-v4": "^5.4.2", "@smithy/types": "^4.14.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-QpnINq5FZH6EOaDEkmHdT7eUunbvD27pDNQypaWjFyYz7Zl1q3UCMQErBZxpmfGfI7MvI2TlK8KTkgNpv8b1ug=="], + "@opentelemetry/instrumentation-amqplib": ["@opentelemetry/instrumentation-amqplib@0.60.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-q/B2IvoVXRm1M00MvhnzpMN6rKYOszPXVsALi6u0ss4AYHe+TidZEtLW9N1ZhrobI1dSriHnBqqtAOZVAv07sg=="], - "@aws-sdk/crc64-nvme": ["@aws-sdk/crc64-nvme@3.972.3", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UExeK+EFiq5LAcbHm96CQLSia+5pvpUVSAsVApscBzayb7/6dJBJKwV4/onsk4VbWSmqxDMcfuTD+pC4RxgZHg=="], + "@opentelemetry/instrumentation-connect": ["@opentelemetry/instrumentation-connect@0.56.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.38" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-PKp+sSZ7AfzMvGgO3VCyo1inwNu+q7A1k9X88WK4PQ+S6Hp7eFk8pie+sWHDTaARovmqq5V2osav3lQej2B0nw=="], - "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.972.34", "", { "dependencies": { "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-hbOTV+vNi3kKo3J6qxylHSfcnSbnnVoMe1KA1VMjYazAEPmk+HSgLUksOemptoNldvSLTSj82ndB1mcZDMP3iQ=="], + "@opentelemetry/instrumentation-dataloader": ["@opentelemetry/instrumentation-dataloader@0.30.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-MXHP2Q38cd2OhzEBKAIXUi9uBlPEYzF6BNJbyjUXBQ6kLaf93kRC41vNMIz0Nl5mnuwK7fDvKT+/lpx7BXRwdg=="], - "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.22", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-cXp0VTDWT76p3hyK5D51yIKEfpf6/zsUvMfaB8CkyqadJxMQ8SbEeVroregmDlZbtG31wkj9ei0WnftmieggLg=="], + "@opentelemetry/instrumentation-express": ["@opentelemetry/instrumentation-express@0.61.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Xdmqo9RZuZlL29Flg8QdwrrX7eW1CZ7wFQPKHyXljNymgKhN1MCsYuqQ/7uxavhSKwAl7WxkTzKhnqpUApLMvQ=="], - "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/types": "^3.973.6", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/node-http-handler": "^4.5.0", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/util-stream": "^4.5.20", "tslib": "^2.6.2" } }, "sha512-h694K7+tRuepSRJr09wTvQfaEnjzsKZ5s7fbESrVds02GT/QzViJ94/HCNwM7bUfFxqpPXHxulZfL6Cou0dwPg=="], + "@opentelemetry/instrumentation-fs": ["@opentelemetry/instrumentation-fs@0.32.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-koR6apx0g0wX6RRiPpjA4AFQUQUbXrK16kq4/SZjVp7u5cffJhNkY4TnITxcGA4acGSPYAfx3NHRIv4Khn1axQ=="], - "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/credential-provider-env": "^3.972.22", "@aws-sdk/credential-provider-http": "^3.972.24", "@aws-sdk/credential-provider-login": "^3.972.24", "@aws-sdk/credential-provider-process": "^3.972.22", "@aws-sdk/credential-provider-sso": "^3.972.24", "@aws-sdk/credential-provider-web-identity": "^3.972.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-O46fFmv0RDFWiWEA9/e6oW92BnsyAXuEgTTasxHligjn2RCr9L/DK773m/NoFaL3ZdNAUz8WxgxunleMnHAkeQ=="], + "@opentelemetry/instrumentation-generic-pool": ["@opentelemetry/instrumentation-generic-pool@0.56.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-fg+Jffs6fqrf0uQS0hom7qBFKsbtpBiBl8+Vkc63Gx8xh6pVh+FhagmiO6oM0m3vyb683t1lP7yGYq22SiDnqg=="], - "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-0LBitxXiAiaE5nlFPfpNIww/8FRY/I7WIndWsc9GmNFOM7cE1wNpVNQEGEk9Outg5l8xl+3vybxFyUy4l9q/LQ=="], + "@opentelemetry/instrumentation-graphql": ["@opentelemetry/instrumentation-graphql@0.61.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pUiVASv6nh2XrerTvlbVHh7vKFzscpgwiQ/xvnZuAIzQ5lRjWVdRPUuXbvZJ/Yq79QsE81TZdJ7z9YsXiss1ew=="], - "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.25", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.22", "@aws-sdk/credential-provider-http": "^3.972.24", "@aws-sdk/credential-provider-ini": "^3.972.24", "@aws-sdk/credential-provider-process": "^3.972.22", "@aws-sdk/credential-provider-sso": "^3.972.24", "@aws-sdk/credential-provider-web-identity": "^3.972.24", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-m7dR0Dsva2P+VUpL+VkC0WwiDby5pgmWXkRVDB5rlwv0jXJrQJf7YMtCoM8Wjk0H9jPeCYOxOXXcIgp/qp5Alg=="], + "@opentelemetry/instrumentation-hapi": ["@opentelemetry/instrumentation-hapi@0.59.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-33wa4mEr+9+ztwdgLor1SeBu4Opz4IsmpcLETXAd3VmBrOjez8uQtrsOhPCa5Vhbm5gzDlMYTgFRLQzf8/YHFA=="], - "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.22", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Os32s8/4gTZjBk5BtoS/cuTILaj+K72d0dVG7TCJX/fC4598cxwLDmf1AEHEpER5oL3K//yETjvFaz0V8oO5Xw=="], + "@opentelemetry/instrumentation-http": ["@opentelemetry/instrumentation-http@0.213.0", "", { "dependencies": { "@opentelemetry/core": "2.6.0", "@opentelemetry/instrumentation": "0.213.0", "@opentelemetry/semantic-conventions": "^1.29.0", "forwarded-parse": "2.1.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-B978Xsm5XEPGhm1P07grDoaOFLHapJPkOG9h016cJsyWWxmiLnPu2M/4Nrm7UCkHSiLnkXgC+zVGUAIahy8EEA=="], - "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/token-providers": "3.1015.0", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-PaFv7snEfypU2yXkpvfyWgddEbDLtgVe51wdZlinhc2doubBjUzJZZpgwuF2Jenl1FBydMhNpMjD6SBUM3qdSA=="], + "@opentelemetry/instrumentation-ioredis": ["@opentelemetry/instrumentation-ioredis@0.61.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/redis-common": "^0.38.2", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-hsHDadUtAFbws1YSDc1XW0svGFKiUbqv2td1Cby+UAiwvojm1NyBo/taifH0t8CuFZ0x/2SDm0iuTwrM5pnVOg=="], - "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-J6H4R1nvr3uBTqD/EeIPAskrBtET4WFfNhpFySr2xW7bVZOXpQfPjrLSIx65jcNjBmLXzWq8QFLdVoGxiGG/SA=="], + "@opentelemetry/instrumentation-kafkajs": ["@opentelemetry/instrumentation-kafkajs@0.22.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.30.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-wJU4IBQMUikdJAcTChLFqK5lo+flo7pahqd8DSLv7uMxsdOdAHj6RzKYAm8pPfUS6ItKYutYyuicwKaFwQKsoA=="], - "@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.1048.0", "", { "dependencies": { "@aws-sdk/client-cognito-identity": "3.1048.0", "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-cognito-identity": "^3.972.34", "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-ini": "^3.972.41", "@aws-sdk/credential-provider-login": "^3.972.41", "@aws-sdk/credential-provider-node": "^3.972.42", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-qradm+eSLJTWQLd/TOxlETL1rMQ/ozvr2iU7wga5hqoox/FiXV9VLtomv3Cqwa6GdpYGWI8ebfSu6mS18I1PyQ=="], + "@opentelemetry/instrumentation-knex": ["@opentelemetry/instrumentation-knex@0.57.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-vMCSh8kolEm5rRsc+FZeTZymWmIJwc40hjIKnXH4O0Dv/gAkJJIRXCsPX5cPbe0c0j/34+PsENd0HqKruwhVYw=="], - "@aws-sdk/dynamodb-codec": ["@aws-sdk/dynamodb-codec@3.973.11", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-9BLkRYlLwwVlFg3RWOXGkmwXM7kDz0Adi/4+O8SvvdiW9kkPiHGSKPuJHdxUAHJROop0zjlpqKVT+R6Z5CPIXg=="], + "@opentelemetry/instrumentation-koa": ["@opentelemetry/instrumentation-koa@0.61.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.36.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0" } }, "sha512-lvrfWe9ShK/D2X4brmx8ZqqeWPfRl8xekU0FCn7C1dHm5k6+rTOOi36+4fnaHAP8lig9Ux6XQ1D4RNIpPCt1WQ=="], - "@aws-sdk/endpoint-cache": ["@aws-sdk/endpoint-cache@3.972.5", "", { "dependencies": { "mnemonist": "0.38.3", "tslib": "^2.6.2" } }, "sha512-itVdge0NozgtgmtbZ25FVwWU3vGlE7x7feE/aOEJNkQfEpbkrF8Rj1QmnK+2blFfYE1xWt/iU+6/jUp/pv1+MA=="], + "@opentelemetry/instrumentation-lru-memoizer": ["@opentelemetry/instrumentation-lru-memoizer@0.57.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-cEqpUocSKJfwDtLYTTJehRLWzkZ2eoePCxfVIgGkGkb83fMB71O+y4MvRHJPbeV2bdoWdOVrl8uO0+EynWhTEA=="], - "@aws-sdk/middleware-bucket-endpoint": ["@aws-sdk/middleware-bucket-endpoint@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-arn-parser": "^3.972.2", "@smithy/node-config-provider": "^4.3.10", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-3H2bhvb7Cb/S6WFsBy/Dy9q2aegC9JmGH1inO8Lb2sWirSqpLJlZmvQHPE29h2tIxzv6el/14X/tLCQ8BQU6ZQ=="], + "@opentelemetry/instrumentation-mongodb": ["@opentelemetry/instrumentation-mongodb@0.66.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-d7m9QnAY+4TCWI4q1QRkfrc6fo/92VwssaB1DzQfXNRvu51b78P+HJlWP7Qg6N6nkwdb9faMZNBCZJfftmszkw=="], - "@aws-sdk/middleware-endpoint-discovery": ["@aws-sdk/middleware-endpoint-discovery@3.972.13", "", { "dependencies": { "@aws-sdk/endpoint-cache": "^3.972.5", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-1r6EkFdSQ4quTP3pW8yWIcYuyDwdwdBxGr+kfuPFYE3DqR+1gBc6NyJneAyoIs+wc/cUfnyJ4ZYC0T2SQTxP9A=="], + "@opentelemetry/instrumentation-mongoose": ["@opentelemetry/instrumentation-mongoose@0.59.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-6/jWU+c1NgznkVLDU/2y0bXV2nJo3o9FWZ9mZ9nN6T/JBNRoMnVXZl2FdBmgH+a5MwaWLs5kmRJTP5oUVGIkPw=="], - "@aws-sdk/middleware-expect-continue": ["@aws-sdk/middleware-expect-continue@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-QMdffpU+GkSGC+bz6WdqlclqIeCsOfgX8JFZ5xvwDtX+UTj4mIXm3uXu7Ko6dBseRcJz1FA6T9OmlAAY6JgJUg=="], + "@opentelemetry/instrumentation-mysql": ["@opentelemetry/instrumentation-mysql@0.59.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@types/mysql": "2.15.27" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-r+V/Fh0sm7Ga8/zk/TI5H5FQRAjwr0RrpfPf8kNIehlsKf12XnvIaZi8ViZkpX0gyPEpLXqzqWD6QHlgObgzZw=="], - "@aws-sdk/middleware-flexible-checksums": ["@aws-sdk/middleware-flexible-checksums@3.973.2", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/core": "^3.973.16", "@aws-sdk/crc64-nvme": "^3.972.3", "@aws-sdk/types": "^3.973.4", "@smithy/is-array-buffer": "^4.2.1", "@smithy/node-config-provider": "^4.3.10", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-middleware": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-KM6QujWdasNjRLG+f7YEqEY5D36vR6Govm7nPIwxjILpb5rJ0pPJZpYY1nrzgtlxwJIYAznfBK5YXoLOHKHyfQ=="], + "@opentelemetry/instrumentation-mysql2": ["@opentelemetry/instrumentation-mysql2@0.59.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@opentelemetry/sql-common": "^0.41.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-n9/xrVCRBfG9egVbffnlU1uhr+HX0vF4GgtAB/Bvm48wpFgRidqD8msBMiym1kRYzmpWvJqTxNT47u1MkgBEdw=="], - "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="], + "@opentelemetry/instrumentation-pg": ["@opentelemetry/instrumentation-pg@0.65.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.34.0", "@opentelemetry/sql-common": "^0.41.2", "@types/pg": "8.15.6", "@types/pg-pool": "2.0.7" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-W0zpHEIEuyZ8zvb3njaX9AAbHgPYOsSWVOoWmv1sjVRSF6ZpBqtlxBWbU+6hhq1TFWBeWJOXZ8nZS/PUFpLJYQ=="], - "@aws-sdk/middleware-location-constraint": ["@aws-sdk/middleware-location-constraint@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-XdZ2TLwyj3Am6kvUc67vquQvs6+D8npXvXgyEUJAdkUDx5oMFJKOqpK+UpJhVDsEL068WAJl2NEGzbSik7dGJQ=="], + "@opentelemetry/instrumentation-redis": ["@opentelemetry/instrumentation-redis@0.61.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/redis-common": "^0.38.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-JnPexA034/0UJRsvH96B0erQoNOqKJZjE2ZRSw9hiTSC23LzE0nJE/u6D+xqOhgUhRnhhcPHq4MdYtmUdYTF+Q=="], - "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="], + "@opentelemetry/instrumentation-tedious": ["@opentelemetry/instrumentation-tedious@0.32.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@types/tedious": "^4.0.14" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BQS6gG8RJ1foEqfEZ+wxoqlwfCAzb1ZVG0ad8Gfe4x8T658HJCLGLd4E4NaoQd8EvPfLqOXgzGaE/2U4ytDSWA=="], - "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="], + "@opentelemetry/instrumentation-undici": ["@opentelemetry/instrumentation-undici@0.23.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.24.0" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0" } }, "sha512-LL0VySzKVR2cJSFVZaTYpZl1XTpBGnfzoQPe2W7McS2267ldsaEIqtQY6VXs2KCXN0poFjze5110PIpxHDaDGg=="], - "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.972.16", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-arn-parser": "^3.972.2", "@smithy/core": "^3.23.7", "@smithy/node-config-provider": "^4.3.10", "@smithy/protocol-http": "^5.3.10", "@smithy/signature-v4": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-U4K1rqyJYvT/zgTI3+rN+MToa51dFnnq1VSsVJuJWPNEKcEnuZVqf7yTpkJJMkYixVW5TTi1dgupd+nmJ0JyWw=="], + "@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.211.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/otlp-transformer": "0.211.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-bp1+63V8WPV+bRI9EQG6E9YID1LIHYSZVbp7f+44g9tRzCq+rtw/o4fpL5PC31adcUsFiz/oN0MdLISSrZDdrg=="], - "@aws-sdk/middleware-ssec": ["@aws-sdk/middleware-ssec@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-acvMUX9jF4I2Ew+Z/EA6gfaFaz9ehci5wxBmXCZeulLuv8m+iGf6pY9uKz8TPjg39bdAz3hxoE0eLP8Qz+IYlA=="], + "@opentelemetry/otlp-grpc-exporter-base": ["@opentelemetry/otlp-grpc-exporter-base@0.57.1", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-exporter-base": "0.57.1", "@opentelemetry/otlp-transformer": "0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-wWflmkDhH/3wf6yEqPmzmqA6r+A8+LQABfIVZC0jDGtWVJj6eCWcGHU41UxupMbbsgjZRLYtWDilaCHOjmR7gg=="], - "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.25", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-QxiMPofvOt8SwSynTOmuZfvvPM1S9QfkESBxB22NMHTRXCJhR5BygLl8IXfC4jELiisQgwsgUby21GtXfX3f/g=="], + "@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.211.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.211.0", "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0", "@opentelemetry/sdk-logs": "0.211.0", "@opentelemetry/sdk-metrics": "2.5.0", "@opentelemetry/sdk-trace-base": "2.5.0", "protobufjs": "8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-julhCJ9dXwkOg9svuuYqqjXLhVaUgyUvO2hWbTxwjvLXX2rG3VtAaB0SzxMnGTuoCZizBT7Xqqm2V7+ggrfCXA=="], - "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.997.9", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.11", "@aws-sdk/signature-v4-multi-region": "^3.996.27", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-jPR3rnmRI4hWYyzfmTGBr7NblMp8QYYeflHXba1H6+7CGrWVqWKQzaXFQ4qbExqPRsXN3T3L3JxFhr6aouXUGQ=="], + "@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.38.2", "", {}, "sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA=="], - "@aws-sdk/rds-signer": ["@aws-sdk/rds-signer@3.1018.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/credential-providers": "3.1018.0", "@aws-sdk/util-format-url": "^3.972.8", "@smithy/config-resolver": "^4.4.13", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-zh93Qoq6WRQn1K3kJ2Dn5tpZfFAzbkWRm38QqS5rTz1u6ZBRqhVQMEC6hOEx3+XsvwpT9OyuOqDALDQpTmYB5g=="], + "@opentelemetry/resources": ["@opentelemetry/resources@2.6.0", "", { "dependencies": { "@opentelemetry/core": "2.6.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-D4y/+OGe3JSuYUCBxtH5T9DSAWNcvCb/nQWIga8HNtXTVPQn59j0nTBAgaAXxUVBDl40mG3Tc76b46wPlZaiJQ=="], - "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.13", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-eQ+dFU05ZRC/lC2XpYlYSPlXtX3VT8sn5toxN2Fv7EXlMoA2p9V7vUBKqHunfD4TRLpxUq8Y8Ol/nCqiv327Ng=="], + "@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.211.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.211.0", "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-O5nPwzgg2JHzo59kpQTPUOTzFi0Nv5LxryG27QoXBciX3zWM3z83g+SNOHhiQVYRWFSxoWn1JM2TGD5iNjOwdA=="], - "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.4", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "^3.972.16", "@aws-sdk/types": "^3.973.4", "@smithy/protocol-http": "^5.3.10", "@smithy/signature-v4": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-MGa8ro0onekYIiesHX60LwKdkxK3Kd61p7TTbLwZemBqlnD9OLrk9sXZdFOIxXanJ+3AaJnV/jiX866eD/4PDg=="], + "@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog=="], - "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1015.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-3OSD4y110nisRhHzFOjoEeHU4GQL4KpzkX9PxzWaiZe0Yg2+thZKM0Pn9DjYwezH5JYfh/K++xK/SE0IHGrmCQ=="], + "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.6.0", "", { "dependencies": { "@opentelemetry/core": "2.6.0", "@opentelemetry/resources": "2.6.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-g/OZVkqlxllgFM7qMKqbPV9c1DUPhQ7d4n3pgZFcrnrNft9eJXZM2TNHTPYREJBrtNdRytYyvwjgL5geDKl3EQ=="], - "@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="], + "@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@2.6.0", "", { "dependencies": { "@opentelemetry/context-async-hooks": "2.6.0", "@opentelemetry/core": "2.6.0", "@opentelemetry/sdk-trace-base": "2.6.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-YhswtasmsbIGEFvLGvR9p/y3PVRTfFf+mgY8van4Ygpnv4sA3vooAjvh+qAn9PNWxs4/IwGGqiQS0PPsaRJ0vQ=="], - "@aws-sdk/util-arn-parser": ["@aws-sdk/util-arn-parser@3.972.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg=="], + "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.40.0", "", {}, "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw=="], - "@aws-sdk/util-dynamodb": ["@aws-sdk/util-dynamodb@3.996.2", "", { "dependencies": { "tslib": "^2.6.2" }, "peerDependencies": { "@aws-sdk/client-dynamodb": "^3.1003.0" } }, "sha512-ddpwaZmjBzcApYN7lgtAXjk+u+GO8fiPsxzuc59UqP+zqdxI1gsenPvkyiHiF9LnYnyRGijz6oN2JylnN561qQ=="], + "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.41.2", "", { "dependencies": { "@opentelemetry/core": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ=="], - "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="], + "@parcel/watcher": ["@parcel/watcher@2.5.6", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.3" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.6", "@parcel/watcher-darwin-arm64": "2.5.6", "@parcel/watcher-darwin-x64": "2.5.6", "@parcel/watcher-freebsd-x64": "2.5.6", "@parcel/watcher-linux-arm-glibc": "2.5.6", "@parcel/watcher-linux-arm-musl": "2.5.6", "@parcel/watcher-linux-arm64-glibc": "2.5.6", "@parcel/watcher-linux-arm64-musl": "2.5.6", "@parcel/watcher-linux-x64-glibc": "2.5.6", "@parcel/watcher-linux-x64-musl": "2.5.6", "@parcel/watcher-win32-arm64": "2.5.6", "@parcel/watcher-win32-ia32": "2.5.6", "@parcel/watcher-win32-x64": "2.5.6" } }, "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ=="], - "@aws-sdk/util-format-url": ["@aws-sdk/util-format-url@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-J6DS9oocrgxM8xlUTTmQOuwRF6rnAGEujAN9SAzllcrQmwn5iJ58ogxy3SEhD0Q7JZvlA5jvIXBkpQRqEqlE9A=="], + "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.6", "", { "os": "android", "cpu": "arm64" }, "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A=="], - "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.965.4", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog=="], + "@parcel/watcher-darwin-arm64": ["@parcel/watcher-darwin-arm64@2.5.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA=="], - "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="], + "@parcel/watcher-darwin-x64": ["@parcel/watcher-darwin-x64@2.5.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg=="], - "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.11", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.25", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-1qdXbXo2s5MMLpUvw00284LsbhtlQ4ul7Zzdn5n+7p4WVgCMLqhxImpHIrjSoc72E/fyc4Wq8dLtUld2Gsh+lA=="], + "@parcel/watcher-freebsd-x64": ["@parcel/watcher-freebsd-x64@2.5.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng=="], - "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.24", "", { "dependencies": { "@nodable/entities": "2.1.0", "@smithy/types": "^4.14.1", "fast-xml-parser": "5.7.3", "tslib": "^2.6.2" } }, "sha512-V8z5YcDPfsvzrBlj0xR1vhRtocblhYbqdreCJB/voGd4Sr5zjNAeWxexbnqVtskTJe0vFb5KMqbSL++ePl+zRw=="], + "@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.5.6", "", { "os": "linux", "cpu": "arm" }, "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ=="], - "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.3", "", {}, "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw=="], + "@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.5.6", "", { "os": "linux", "cpu": "arm" }, "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg=="], - "@axiomhq/js": ["@axiomhq/js@1.4.0", "", { "dependencies": { "fetch-retry": "^6.0.0" } }, "sha512-wC5x1ud/QJMstrjpicATkyY8+ZVWEl4WlXMtA5EZf7hkj0+b191yv4yynLxLEfr/MveXora9m6CWdJq4DsbcAg=="], + "@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA=="], - "@azure-rest/core-client": ["@azure-rest/core-client@2.6.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0", "@azure/core-tracing": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, "sha512-iuFKDm8XPzNxPfRjhyU5/xKZmcRDzSuEghXDHHk4MjBV/wFL34GmYVBZnn9wmuoLBeS1qAw9ceMdaeJBPcB1QQ=="], + "@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA=="], - "@azure/abort-controller": ["@azure/abort-controller@2.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA=="], + "@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ=="], - "@azure/core-auth": ["@azure/core-auth@1.10.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-util": "^1.13.0", "tslib": "^2.6.2" } }, "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg=="], + "@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg=="], - "@azure/core-client": ["@azure/core-client@1.10.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0", "@azure/core-tracing": "^1.3.0", "@azure/core-util": "^1.13.0", "@azure/logger": "^1.3.0", "tslib": "^2.6.2" } }, "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w=="], + "@parcel/watcher-win32-arm64": ["@parcel/watcher-win32-arm64@2.5.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q=="], - "@azure/core-http-compat": ["@azure/core-http-compat@2.4.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2" }, "peerDependencies": { "@azure/core-client": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0" } }, "sha512-f1P96IB399YiN2ARYHP7EpZi3Bf3wH4SN2lGzrw7JVwm7bbsVYtf2iKSBwTywD2P62NOPZGHFSZi+6jjb75JuA=="], + "@parcel/watcher-win32-ia32": ["@parcel/watcher-win32-ia32@2.5.6", "", { "os": "win32", "cpu": "ia32" }, "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g=="], - "@azure/core-lro": ["@azure/core-lro@2.7.2", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.2.0", "@azure/logger": "^1.0.0", "tslib": "^2.6.2" } }, "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw=="], + "@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.6", "", { "os": "win32", "cpu": "x64" }, "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw=="], - "@azure/core-paging": ["@azure/core-paging@1.6.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA=="], + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], - "@azure/core-rest-pipeline": ["@azure/core-rest-pipeline@1.23.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", "@azure/core-tracing": "^1.3.0", "@azure/core-util": "^1.13.0", "@azure/logger": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.4", "tslib": "^2.6.2" } }, "sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ=="], + "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], - "@azure/core-tracing": ["@azure/core-tracing@1.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ=="], + "@prisma/adapter-pg": ["@prisma/adapter-pg@7.5.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "7.5.0", "@types/pg": "8.11.11", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "sha512-EJx7OLULahcC3IjJgdx2qRDNCT+ToY2v66UkeETMCLhNOTgqVzRzYvOEphY7Zp0eHyzfkC33Edd/qqeadf9R4A=="], - "@azure/core-util": ["@azure/core-util@1.13.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A=="], + "@prisma/client": ["@prisma/client@7.4.2", "", { "dependencies": { "@prisma/client-runtime-utils": "7.4.2" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-ts2mu+cQHriAhSxngO3StcYubBGTWDtu/4juZhXCUKOwgh26l+s4KD3vT2kMUzFyrYnll9u/3qWrtzRv9CGWzA=="], - "@azure/identity": ["@azure/identity@4.13.1", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.2", "@azure/core-rest-pipeline": "^1.17.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", "@azure/msal-browser": "^5.5.0", "@azure/msal-node": "^5.1.0", "open": "^10.1.0", "tslib": "^2.2.0" } }, "sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw=="], + "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.4.2", "", {}, "sha512-cID+rzOEb38VyMsx5LwJMEY4NGIrWCNpKu/0ImbeooQ2Px7TI+kOt7cm0NelxUzF2V41UVVXAmYjANZQtCu1/Q=="], - "@azure/keyvault-common": ["@azure/keyvault-common@2.1.0", "", { "dependencies": { "@azure-rest/core-client": "^2.3.3", "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.3.0", "@azure/core-rest-pipeline": "^1.8.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.10.0", "@azure/logger": "^1.1.4", "tslib": "^2.2.0" } }, "sha512-aCDidWuKY06LWQ4x7/8TIXK6iRqTaRWRL3t7T+LC+j1b07HtoIsOxP/tU90G4jCSBn5TAyUTCtA4MS/y5Hudaw=="], + "@prisma/config": ["@prisma/config@7.4.2", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.18.4", "empathic": "2.0.0" } }, "sha512-CftBjWxav99lzY1Z4oDgomdb1gh9BJFAOmWF6P2v1xRfXqQb56DfBub+QKcERRdNoAzCb3HXy3Zii8Vb4AsXhg=="], - "@azure/keyvault-keys": ["@azure/keyvault-keys@4.10.0", "", { "dependencies": { "@azure-rest/core-client": "^2.3.3", "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", "@azure/core-http-compat": "^2.2.0", "@azure/core-lro": "^2.7.2", "@azure/core-paging": "^1.6.2", "@azure/core-rest-pipeline": "^1.19.0", "@azure/core-tracing": "^1.2.0", "@azure/core-util": "^1.11.0", "@azure/keyvault-common": "^2.0.0", "@azure/logger": "^1.1.4", "tslib": "^2.8.1" } }, "sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag=="], + "@prisma/debug": ["@prisma/debug@7.5.0", "", {}, "sha512-163+nffny0JoPEkDhfNco0vcuT3ymIJc9+WX7MHSQhfkeKUmKe9/wqvGk5SjppT93DtBjVwr5HPJYlXbzm6qtg=="], - "@azure/logger": ["@azure/logger@1.3.0", "", { "dependencies": { "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA=="], + "@prisma/dev": ["@prisma/dev@0.20.0", "", { "dependencies": { "@electric-sql/pglite": "0.3.15", "@electric-sql/pglite-socket": "0.0.20", "@electric-sql/pglite-tools": "0.2.20", "@hono/node-server": "1.19.9", "@mrleebo/prisma-ast": "0.13.1", "@prisma/get-platform": "7.2.0", "@prisma/query-plan-executor": "7.2.0", "foreground-child": "3.3.1", "get-port-please": "3.2.0", "hono": "4.11.4", "http-status-codes": "2.3.0", "pathe": "2.0.3", "proper-lockfile": "4.1.2", "remeda": "2.33.4", "std-env": "3.10.0", "valibot": "1.2.0", "zeptomatch": "2.1.0" } }, "sha512-ovlBYwWor0OzG+yH4J3Ot+AneD818BttLA+Ii7wjbcLHUrnC4tbUPVGyNd3c/+71KETPKZfjhkTSpdS15dmXNQ=="], - "@azure/msal-browser": ["@azure/msal-browser@5.6.3", "", { "dependencies": { "@azure/msal-common": "16.4.1" } }, "sha512-sTjMtUm+bJpENU/1WlRzHEsgEHppZDZ1EtNyaOODg/sQBtMxxJzGB+MOCM+T2Q5Qe1fKBrdxUmjyRxm0r7Ez9w=="], + "@prisma/dmmf": ["@prisma/dmmf@7.4.2", "", {}, "sha512-EurUPjBwmAd69MM8PLZ5n94xeeQ+7SB3Wd9p2+YsgXhvqCa1cgJRBJiB6fTWkPTz5Lf05ySNJ/59EnuEJMAnrw=="], - "@azure/msal-common": ["@azure/msal-common@16.4.1", "", {}, "sha512-Bl8f+w37xkXsYh7QRkAKCFGYtWMYuOVO7Lv+BxILrvGz3HbIEF22Pt0ugyj0QPOl6NLrHcnNUQ9yeew98P/5iw=="], + "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@7.5.0", "", { "dependencies": { "@prisma/debug": "7.5.0" } }, "sha512-B79N/amgV677mFesFDBAdrW0OIaqawap9E0sjgLBtzIz2R3hIMS1QB8mLZuUEiS4q5Y8Oh3I25Kw4SLxMypk9Q=="], - "@azure/msal-node": ["@azure/msal-node@5.1.2", "", { "dependencies": { "@azure/msal-common": "16.4.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" } }, "sha512-DoeSJ9U5KPAIZoHsPywvfEj2MhBniQe0+FSpjLUTdWoIkI999GB5USkW6nNEHnIaLVxROHXvprWA1KzdS1VQ4A=="], + "@prisma/engines": ["@prisma/engines@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "@prisma/fetch-engine": "7.4.2", "@prisma/get-platform": "7.4.2" } }, "sha512-B+ZZhI4rXlzjVqRw/93AothEKOU5/x4oVyJFGo9RpHPnBwaPwk4Pi0Q4iGXipKxeXPs/dqljgNBjK0m8nocOJA=="], - "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], + "@prisma/engines-version": ["@prisma/engines-version@7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "", {}, "sha512-5FIKY3KoYQlBuZC2yc16EXfVRQ8HY+fLqgxkYfWCtKhRb3ajCRzP/rPeoSx11+NueJDANdh4hjY36mdmrTcGSg=="], - "@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + "@prisma/extension-read-replicas": ["@prisma/extension-read-replicas@0.5.0", "", { "peerDependencies": { "@prisma/client": "^7.0.0" } }, "sha512-t0kLjqFMte4wwGrZFhya4iFoyoOY4kjlyyE60WXZL66PqP6PcBpW/35eKb/3UcxgjJxcDlaJKfmGokFLOyafiQ=="], - "@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], + "@prisma/fetch-engine": ["@prisma/fetch-engine@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "@prisma/get-platform": "7.4.2" } }, "sha512-f/c/MwYpdJO7taLETU8rahEstLeXfYgQGlz5fycG7Fbmva3iPdzGmjiSWHeSWIgNnlXnelUdCJqyZnFocurZuA=="], - "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + "@prisma/generator": ["@prisma/generator@7.4.2", "", {}, "sha512-+4B8Rrq5Ef2cm7cW7Wyu6oXn/QVcDVdNti9mKEkcbPVLlA85I6Rbd+j6r+k2E2nlj0zKZbDbq8fIx/Xnt1SmkA=="], - "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], + "@prisma/generator-helper": ["@prisma/generator-helper@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/dmmf": "7.4.2", "@prisma/generator": "7.4.2" } }, "sha512-PWTkqlMILGVghoWP8SZB3prw/EcthiyPYJsMoiVZrClqPMQn6doPjphCQffPDyGzZvAwmA64edbc6Gm/6Omkjg=="], - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + "@prisma/get-platform": ["@prisma/get-platform@7.2.0", "", { "dependencies": { "@prisma/debug": "7.2.0" } }, "sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA=="], - "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow=="], + "@prisma/instrumentation": ["@prisma/instrumentation@7.4.2", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.207.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-r9JfchJF1Ae6yAxcaLu/V1TGqBhAuSDe3mRNOssBfx1rMzfZ4fdNvrgUBwyb/TNTGXFxlH9AZix5P257x07nrg=="], - "@babel/helper-create-regexp-features-plugin": ["@babel/helper-create-regexp-features-plugin@7.28.5", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw=="], + "@prisma/query-plan-executor": ["@prisma/query-plan-executor@7.2.0", "", {}, "sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ=="], - "@babel/helper-define-polyfill-provider": ["@babel/helper-define-polyfill-provider@0.6.8", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "debug": "^4.4.3", "lodash.debounce": "^4.0.8", "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA=="], + "@prisma/studio-core": ["@prisma/studio-core@0.13.1", "", { "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-agdqaPEePRHcQ7CexEfkX1RvSH9uWDb6pXrZnhCRykhDFAV0/0P3d07WtfiY8hZWb7oRU4v+NkT4cGFHkQJIPg=="], - "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], - "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.28.5", "", { "dependencies": { "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5" } }, "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg=="], + "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + "@protobufjs/codegen": ["@protobufjs/codegen@2.0.4", "", {}, "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="], - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + "@protobufjs/eventemitter": ["@protobufjs/eventemitter@1.1.0", "", {}, "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="], - "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], + "@protobufjs/fetch": ["@protobufjs/fetch@1.1.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ=="], - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], + "@protobufjs/float": ["@protobufjs/float@1.0.2", "", {}, "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="], - "@babel/helper-remap-async-to-generator": ["@babel/helper-remap-async-to-generator@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-wrap-function": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA=="], + "@protobufjs/inquire": ["@protobufjs/inquire@1.1.0", "", {}, "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="], - "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.28.6", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg=="], + "@protobufjs/path": ["@protobufjs/path@1.1.2", "", {}, "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="], - "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], + "@protobufjs/pool": ["@protobufjs/pool@1.1.0", "", {}, "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], - "@babel/helper-wrap-function": ["@babel/helper-wrap-function@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ=="], + "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA=="], - "@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], + "@radix-ui/react-alert-dialog": ["@radix-ui/react-alert-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw=="], - "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="], - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q=="], + "@radix-ui/react-checkbox": ["@radix-ui/react-checkbox@1.3.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw=="], - "@babel/plugin-bugfix-safari-class-field-initializer-scope": ["@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA=="], + "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA=="], - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA=="], + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw=="], + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g=="], + "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], - "@babel/plugin-proposal-class-properties": ["@babel/plugin-proposal-class-properties@7.12.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w=="], + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], - "@babel/plugin-proposal-private-property-in-object": ["@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w=="], + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], - "@babel/plugin-syntax-flow": ["@babel/plugin-syntax-flow@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew=="], + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], - "@babel/plugin-syntax-import-assertions": ["@babel/plugin-syntax-import-assertions@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw=="], + "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw=="], - "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw=="], + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], - "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], - "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], - "@babel/plugin-syntax-unicode-sets-regex": ["@babel/plugin-syntax-unicode-sets-regex@7.18.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg=="], + "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg=="], - "@babel/plugin-transform-arrow-functions": ["@babel/plugin-transform-arrow-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA=="], + "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA=="], - "@babel/plugin-transform-async-generator-functions": ["@babel/plugin-transform-async-generator-functions@7.29.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", "@babel/traverse": "^7.29.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w=="], + "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="], - "@babel/plugin-transform-async-to-generator": ["@babel/plugin-transform-async-to-generator@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g=="], + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], - "@babel/plugin-transform-block-scoped-functions": ["@babel/plugin-transform-block-scoped-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg=="], + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], - "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw=="], + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw=="], + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], - "@babel/plugin-transform-class-static-block": ["@babel/plugin-transform-class-static-block@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ=="], + "@radix-ui/react-select": ["@radix-ui/react-select@2.2.6", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ=="], - "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-replace-supers": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q=="], + "@radix-ui/react-slider": ["@radix-ui/react-slider@1.3.6", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw=="], - "@babel/plugin-transform-computed-properties": ["@babel/plugin-transform-computed-properties@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/template": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ=="], + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "@babel/plugin-transform-destructuring": ["@babel/plugin-transform-destructuring@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw=="], + "@radix-ui/react-switch": ["@radix-ui/react-switch@1.2.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ=="], - "@babel/plugin-transform-dotall-regex": ["@babel/plugin-transform-dotall-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg=="], + "@radix-ui/react-toggle": ["@radix-ui/react-toggle@1.1.10", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ=="], - "@babel/plugin-transform-duplicate-keys": ["@babel/plugin-transform-duplicate-keys@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q=="], + "@radix-ui/react-toggle-group": ["@radix-ui/react-toggle-group@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q=="], - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ["@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw=="], + "@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg=="], - "@babel/plugin-transform-dynamic-import": ["@babel/plugin-transform-dynamic-import@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A=="], + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], - "@babel/plugin-transform-explicit-resource-management": ["@babel/plugin-transform-explicit-resource-management@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg=="], + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], - "@babel/plugin-transform-exponentiation-operator": ["@babel/plugin-transform-exponentiation-operator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw=="], + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], - "@babel/plugin-transform-export-namespace-from": ["@babel/plugin-transform-export-namespace-from@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ=="], + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], - "@babel/plugin-transform-flow-strip-types": ["@babel/plugin-transform-flow-strip-types@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-syntax-flow": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg=="], + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], - "@babel/plugin-transform-for-of": ["@babel/plugin-transform-for-of@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw=="], + "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ=="], - "@babel/plugin-transform-function-name": ["@babel/plugin-transform-function-name@7.27.1", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ=="], + "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.1", "", { "dependencies": { "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w=="], - "@babel/plugin-transform-json-strings": ["@babel/plugin-transform-json-strings@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw=="], + "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ=="], - "@babel/plugin-transform-literals": ["@babel/plugin-transform-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA=="], + "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.4", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg=="], - "@babel/plugin-transform-logical-assignment-operators": ["@babel/plugin-transform-logical-assignment-operators@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A=="], + "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], - "@babel/plugin-transform-member-expression-literals": ["@babel/plugin-transform-member-expression-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ=="], + "@react-email/body": ["@react-email/body@0.2.1", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-ljDiQiJDu/Fq//vSIIP0z5Nuvt4+DX1RqGasstChDGJB/14ogd4VdNS9aacoede/ZjGy3o3Qb+cxyS+XgM6SwQ=="], - "@babel/plugin-transform-modules-amd": ["@babel/plugin-transform-modules-amd@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA=="], + "@react-email/button": ["@react-email/button@0.2.1", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-qXyj7RZLE7POy9BMKSoqQ00tOXThjOZSUnI2Yu9i29IHngPlmrNayIWBoVKtElES7OWwypUcpiajwi1mUWx6/A=="], - "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.28.6", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA=="], + "@react-email/code-block": ["@react-email/code-block@0.2.1", "", { "dependencies": { "prismjs": "^1.30.0" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-M3B7JpVH4ytgn83/ujRR1k1DQHvTeABiDM61OvAbjLRPhC/5KLHU5KkzIbbuGIrjWwxAbL1kSQzU8MhLEtSxyw=="], - "@babel/plugin-transform-modules-systemjs": ["@babel/plugin-transform-modules-systemjs@7.29.0", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.29.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ=="], + "@react-email/code-inline": ["@react-email/code-inline@0.0.6", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-jfhebvv3dVsp3OdPgKXnk8+e2pBiDVZejDOBFzBa/IblrAJ9cQDkN6rBD5IyEg8hTOxwbw3iaI/yZFmDmIguIA=="], - "@babel/plugin-transform-modules-umd": ["@babel/plugin-transform-modules-umd@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w=="], + "@react-email/column": ["@react-email/column@0.0.14", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-f+W+Bk2AjNO77zynE33rHuQhyqVICx4RYtGX9NKsGUg0wWjdGP0qAuIkhx9Rnmk4/hFMo1fUrtYNqca9fwJdHg=="], - "@babel/plugin-transform-named-capturing-groups-regex": ["@babel/plugin-transform-named-capturing-groups-regex@7.29.0", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ=="], + "@react-email/components": ["@react-email/components@1.0.8", "", { "dependencies": { "@react-email/body": "0.2.1", "@react-email/button": "0.2.1", "@react-email/code-block": "0.2.1", "@react-email/code-inline": "0.0.6", "@react-email/column": "0.0.14", "@react-email/container": "0.0.16", "@react-email/font": "0.0.10", "@react-email/head": "0.0.13", "@react-email/heading": "0.0.16", "@react-email/hr": "0.0.12", "@react-email/html": "0.0.12", "@react-email/img": "0.0.12", "@react-email/link": "0.0.13", "@react-email/markdown": "0.0.18", "@react-email/preview": "0.0.14", "@react-email/render": "2.0.4", "@react-email/row": "0.0.13", "@react-email/section": "0.0.17", "@react-email/tailwind": "2.0.5", "@react-email/text": "0.1.6" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-zY81ED6o5MWMzBkr9uZFuT24lWarT+xIbOZxI6C9dsFmCWBczM8IE1BgOI8rhpUK4JcYVDy1uKxYAFqsx2Bc4w=="], - "@babel/plugin-transform-new-target": ["@babel/plugin-transform-new-target@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ=="], + "@react-email/container": ["@react-email/container@0.0.16", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-QWBB56RkkU0AJ9h+qy33gfT5iuZknPC7Un/IjZv9B0QmMIK+WWacc0cH6y2SV5Cv/b99hU94fjEMOOO4enpkbQ=="], - "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg=="], + "@react-email/font": ["@react-email/font@0.0.10", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-0urVSgCmQIfx5r7Xc586miBnQUVnGp3OTYUm8m5pwtQRdTRO5XrTtEfNJ3JhYhSOruV0nD8fd+dXtKXobum6tA=="], - "@babel/plugin-transform-numeric-separator": ["@babel/plugin-transform-numeric-separator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w=="], + "@react-email/head": ["@react-email/head@0.0.13", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-AJg6le/08Gz4tm+6MtKXqtNNyKHzmooOCdmtqmWxD7FxoAdU1eVcizhtQ0gcnVaY6ethEyE/hnEzQxt1zu5Kog=="], - "@babel/plugin-transform-object-rest-spread": ["@babel/plugin-transform-object-rest-spread@7.28.6", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA=="], + "@react-email/heading": ["@react-email/heading@0.0.16", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-jmsKnQm1ykpBzw4hCYHwBkt5pW2jScXffPeEH5ZRF5tZeF5b1pvlFTO9han7C0pCkZYo1kEvWiRtx69yfCIwuw=="], - "@babel/plugin-transform-object-super": ["@babel/plugin-transform-object-super@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng=="], + "@react-email/hr": ["@react-email/hr@0.0.12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-TwmOmBDibavUQpXBxpmZYi2Iks/yeZOzFYh+di9EltMSnEabH8dMZXrl+pxNXzCgZ2XE8HY7VmUL65Lenfu5PA=="], - "@babel/plugin-transform-optional-catch-binding": ["@babel/plugin-transform-optional-catch-binding@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ=="], + "@react-email/html": ["@react-email/html@0.0.12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-KTShZesan+UsreU7PDUV90afrZwU5TLwYlALuCSU0OT+/U8lULNNbAUekg+tGwCnOfIKYtpDPKkAMRdYlqUznw=="], - "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w=="], + "@react-email/img": ["@react-email/img@0.0.12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-sRCpEARNVTf3FQhZOC+JTvu5r6ubiYWkT0ucYXg8ctkyi4G8QG+jgYPiNUqVeTLA2STOfmPM/nrk1nb84y6CPQ=="], - "@babel/plugin-transform-parameters": ["@babel/plugin-transform-parameters@7.27.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg=="], + "@react-email/link": ["@react-email/link@0.0.13", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-lkWc/NjOcefRZMkQoSDDbuKBEBDES9aXnFEOuPH845wD3TxPwh+QTf0fStuzjoRLUZWpHnio4z7qGGRYusn/sw=="], - "@babel/plugin-transform-private-methods": ["@babel/plugin-transform-private-methods@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg=="], + "@react-email/markdown": ["@react-email/markdown@0.0.18", "", { "dependencies": { "marked": "^15.0.12" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-gSuYK5fsMbGk87jDebqQ6fa2fKcWlkf2Dkva8kMONqLgGCq8/0d+ZQYMEJsdidIeBo3kmsnHZPrwdFB4HgjUXg=="], - "@babel/plugin-transform-private-property-in-object": ["@babel/plugin-transform-private-property-in-object@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA=="], + "@react-email/preview": ["@react-email/preview@0.0.14", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-aYK8q0IPkBXyMsbpMXgxazwHxYJxTrXrV95GFuu2HbEiIToMwSyUgb8HDFYwPqqfV03/jbwqlsXmFxsOd+VNaw=="], - "@babel/plugin-transform-property-literals": ["@babel/plugin-transform-property-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ=="], + "@react-email/render": ["@react-email/render@2.0.4", "", { "dependencies": { "html-to-text": "^9.0.5", "prettier": "^3.5.3" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-kht2oTFQ1SwrLpd882ahTvUtNa9s53CERHstiTbzhm6aR2Hbykp/mQ4tpPvsBGkKAEvKRlDEoooh60Uk6nHK1g=="], - "@babel/plugin-transform-react-display-name": ["@babel/plugin-transform-react-display-name@7.28.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA=="], + "@react-email/row": ["@react-email/row@0.0.13", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-bYnOac40vIKCId7IkwuLAAsa3fKfSfqCvv6epJKmPE0JBuu5qI4FHFCl9o9dVpIIS08s/ub+Y/txoMt0dYziGw=="], - "@babel/plugin-transform-react-jsx": ["@babel/plugin-transform-react-jsx@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-syntax-jsx": "^7.28.6", "@babel/types": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow=="], + "@react-email/section": ["@react-email/section@0.0.17", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-qNl65ye3W0Rd5udhdORzTV9ezjb+GFqQQSae03NDzXtmJq6sqVXNWNiVolAjvJNypim+zGXmv6J9TcV5aNtE/w=="], - "@babel/plugin-transform-react-jsx-development": ["@babel/plugin-transform-react-jsx-development@7.27.1", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q=="], + "@react-email/tailwind": ["@react-email/tailwind@2.0.5", "", { "dependencies": { "tailwindcss": "^4.1.18" }, "peerDependencies": { "@react-email/body": "0.2.1", "@react-email/button": "0.2.1", "@react-email/code-block": "0.2.1", "@react-email/code-inline": "0.0.6", "@react-email/container": "0.0.16", "@react-email/heading": "0.0.16", "@react-email/hr": "0.0.12", "@react-email/img": "0.0.12", "@react-email/link": "0.0.13", "@react-email/preview": "0.0.14", "@react-email/text": "0.1.6", "react": "^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@react-email/body", "@react-email/button", "@react-email/code-block", "@react-email/code-inline", "@react-email/container", "@react-email/heading", "@react-email/hr", "@react-email/img", "@react-email/link", "@react-email/preview"] }, "sha512-7Ey+kiWliJdxPMCLYsdDts8ffp4idlP//w4Ui3q/A5kokVaLSNKG8DOg/8qAuzWmRiGwNQVOKBk7PXNlK5W+sg=="], - "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], + "@react-email/text": ["@react-email/text@0.1.6", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-TYqkioRS45wTR5il3dYk/SbUjjEdhSwh9BtRNB99qNH1pXAwA45H7rAuxehiu8iJQJH0IyIr+6n62gBz9ezmsw=="], - "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], + "@redis/bloom": ["@redis/bloom@5.11.0", "", { "peerDependencies": { "@redis/client": "^5.11.0" } }, "sha512-KYiVilAhAFN3057afUb/tfYJpsEyTkQB+tQcn5gVVA7DgcNOAj8lLxe4j8ov8BF6I9C1Fe/kwlbuAICcTMX8Lw=="], - "@babel/plugin-transform-react-pure-annotations": ["@babel/plugin-transform-react-pure-annotations@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA=="], + "@redis/client": ["@redis/client@5.11.0", "", { "dependencies": { "cluster-key-slot": "1.1.2" }, "peerDependencies": { "@node-rs/xxhash": "^1.1.0" }, "optionalPeers": ["@node-rs/xxhash"] }, "sha512-GHoprlNQD51Xq2Ztd94HHV94MdFZQ3CVrpA04Fz8MVoHM0B7SlbmPEVIjwTbcv58z8QyjnrOuikS0rWF03k5dQ=="], - "@babel/plugin-transform-regenerator": ["@babel/plugin-transform-regenerator@7.29.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog=="], + "@redis/graph": ["@redis/graph@1.1.1", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw=="], - "@babel/plugin-transform-regexp-modifiers": ["@babel/plugin-transform-regexp-modifiers@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg=="], + "@redis/json": ["@redis/json@5.11.0", "", { "peerDependencies": { "@redis/client": "^5.11.0" } }, "sha512-1iAy9kAtcD0quB21RbPTbUqqy+T2Uu2JxucwE+B4A+VaDbIRvpZR6DMqV8Iqaws2YxJYB3GC5JVNzPYio2ErUg=="], - "@babel/plugin-transform-reserved-words": ["@babel/plugin-transform-reserved-words@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw=="], + "@redis/search": ["@redis/search@5.11.0", "", { "peerDependencies": { "@redis/client": "^5.11.0" } }, "sha512-g1l7f3Rnyk/xI99oGHIgWHSKFl45Re5YTIcO8j/JE8olz389yUFyz2+A6nqVy/Zi031VgPDWscbbgOk8hlhZ3g=="], - "@babel/plugin-transform-runtime": ["@babel/plugin-transform-runtime@7.29.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w=="], + "@redis/time-series": ["@redis/time-series@5.11.0", "", { "peerDependencies": { "@redis/client": "^5.11.0" } }, "sha512-TWFeOcU4xkj0DkndnOyhtxvX1KWD+78UHT3XX3x3XRBUGWeQrKo3jqzDsZwxbggUgf9yLJr/akFHXru66X5UQA=="], - "@babel/plugin-transform-shorthand-properties": ["@babel/plugin-transform-shorthand-properties@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ=="], + "@remirror/core-constants": ["@remirror/core-constants@3.0.0", "", {}, "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg=="], - "@babel/plugin-transform-spread": ["@babel/plugin-transform-spread@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA=="], + "@remix-run/router": ["@remix-run/router@1.23.2", "", {}, "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w=="], - "@babel/plugin-transform-sticky-regex": ["@babel/plugin-transform-sticky-regex@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g=="], + "@remixicon/react": ["@remixicon/react@4.9.0", "", { "peerDependencies": { "react": ">=18.2.0" } }, "sha512-5/jLDD4DtKxH2B4QVXTobvV1C2uL8ab9D5yAYNtFt+w80O0Ys1xFOrspqROL3fjrZi+7ElFUWE37hBfaAl6U+Q=="], - "@babel/plugin-transform-template-literals": ["@babel/plugin-transform-template-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg=="], + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - "@babel/plugin-transform-typeof-symbol": ["@babel/plugin-transform-typeof-symbol@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw=="], + "@rollup/plugin-alias": ["@rollup/plugin-alias@3.1.9", "", { "dependencies": { "slash": "^3.0.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw=="], - "@babel/plugin-transform-unicode-escapes": ["@babel/plugin-transform-unicode-escapes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg=="], + "@rollup/plugin-babel": ["@rollup/plugin-babel@5.3.1", "", { "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", "rollup": "^1.20.0||^2.0.0" }, "optionalPeers": ["@types/babel__core"] }, "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q=="], - "@babel/plugin-transform-unicode-property-regex": ["@babel/plugin-transform-unicode-property-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A=="], + "@rollup/plugin-commonjs": ["@rollup/plugin-commonjs@17.1.0", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "commondir": "^1.0.1", "estree-walker": "^2.0.1", "glob": "^7.1.6", "is-reference": "^1.2.1", "magic-string": "^0.25.7", "resolve": "^1.17.0" }, "peerDependencies": { "rollup": "^2.30.0" } }, "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew=="], - "@babel/plugin-transform-unicode-regex": ["@babel/plugin-transform-unicode-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw=="], + "@rollup/plugin-json": ["@rollup/plugin-json@4.1.0", "", { "dependencies": { "@rollup/pluginutils": "^3.0.8" }, "peerDependencies": { "rollup": "^1.20.0 || ^2.0.0" } }, "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw=="], - "@babel/plugin-transform-unicode-sets-regex": ["@babel/plugin-transform-unicode-sets-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q=="], + "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@11.2.1", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.19.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg=="], - "@babel/preset-env": ["@babel/preset-env@7.29.2", "", { "dependencies": { "@babel/compat-data": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.28.6", "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.6", "@babel/plugin-transform-class-properties": "^7.28.6", "@babel/plugin-transform-class-static-block": "^7.28.6", "@babel/plugin-transform-classes": "^7.28.6", "@babel/plugin-transform-computed-properties": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.6", "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-numeric-separator": "^7.28.6", "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.28.6", "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.28.6", "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", "@babel/plugin-transform-regenerator": "^7.29.0", "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.15", "babel-plugin-polyfill-corejs3": "^0.14.0", "babel-plugin-polyfill-regenerator": "^0.6.6", "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw=="], + "@rollup/pluginutils": ["@rollup/pluginutils@4.2.1", "", { "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } }, "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="], - "@babel/preset-flow": ["@babel/preset-flow@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-transform-flow-strip-types": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.59.0", "", { "os": "android", "cpu": "arm" }, "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg=="], - "@babel/preset-modules": ["@babel/preset-modules@0.1.6-no-external-plugins", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.59.0", "", { "os": "android", "cpu": "arm64" }, "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q=="], - "@babel/preset-react": ["@babel/preset-react@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-transform-react-display-name": "^7.28.0", "@babel/plugin-transform-react-jsx": "^7.27.1", "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@babel/plugin-transform-react-pure-annotations": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.59.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg=="], - "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.59.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w=="], - "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.59.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA=="], - "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.59.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg=="], - "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw=="], - "@base-ui/react": ["@base-ui/react@1.3.0", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@base-ui/utils": "0.2.6", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "tabbable": "^6.4.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA=="], - "@base-ui/utils": ["@base-ui/utils@0.2.6", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA=="], - "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA=="], - "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="], + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg=="], - "@boxyhq/error-code-mnemonic": ["@boxyhq/error-code-mnemonic@0.1.1", "", {}, "sha512-NmO111OG8GQDE8W/+uSREb67YSqnY2N/tHykGeFoIZc9Leher+lW+jN4U1OXzlc66hwB8yO7WRu2cbYsAKsi9g=="], + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q=="], - "@boxyhq/metrics": ["@boxyhq/metrics@0.2.10", "", { "dependencies": { "@grpc/grpc-js": "1.12.6", "@opentelemetry/api": "1.9.0", "@opentelemetry/exporter-metrics-otlp-grpc": "0.57.1", "@opentelemetry/exporter-metrics-otlp-http": "0.57.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/semantic-conventions": "1.29.0" } }, "sha512-jsBKS5fNEyxYyizhYWT3q1oQM3dE9VVL/rEBrdGZMHXQZHxKZeE1Sg5wrfT7ILYjYQ+6CSs8yNJSK9jHJKN6cw=="], + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.59.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA=="], - "@boxyhq/saml-jackson": ["@boxyhq/saml-jackson@1.52.2", "", { "dependencies": { "@aws-sdk/client-dynamodb": "3.817.0", "@aws-sdk/credential-providers": "3.817.0", "@aws-sdk/util-dynamodb": "3.817.0", "@boxyhq/error-code-mnemonic": "0.1.1", "@boxyhq/metrics": "0.2.10", "@boxyhq/saml20": "1.12.1", "@googleapis/admin": "23.5.0", "@libsql/sqlite3": "0.3.1", "axios": "1.9.0", "encoding": "0.1.13", "ipaddr.js": "2.2.0", "jose": "6.0.11", "lodash": "4.17.21", "mixpanel": "0.18.1", "mongodb": "6.16.0", "mssql": "11.0.1", "mysql2": "3.14.1", "node-forge": "1.3.1", "openid-client": "6.5.0", "pg": "8.16.0", "redis": "4.7.0", "reflect-metadata": "0.2.2", "ripemd160": "2.0.2", "sqlite3": "5.1.7", "typeorm": "0.3.22" } }, "sha512-il8VEpaEHBBSeT7cbRmXYO32+PsmRp9urMB5C9ON7QB66XU0VVS9WKaVJROMLVf6QhqETRbSnluSaoevsuPHog=="], + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.59.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA=="], - "@boxyhq/saml20": ["@boxyhq/saml20@1.12.1", "", { "dependencies": { "@xmldom/xmldom": "0.9.8", "xml-crypto": "6.1.2", "xml-encryption": "3.1.0", "xml2js": "0.6.2", "xmlbuilder": "15.1.1" } }, "sha512-lAHJ13kTZqPgSFUuAV8+kg5As3/MoSfiEr96tNKP0sj6c6o/Sbwn6DIhUZLQRNzDtmyAu9zuQk3vdbY5BK56Xg=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg=="], - "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.2", "", {}, "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg=="], - "@bufbuild/protobuf": ["@bufbuild/protobuf@2.11.0", "", {}, "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.59.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w=="], - "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@10.5.0", "", { "dependencies": { "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg=="], - "@chevrotain/gast": ["@chevrotain/gast@10.5.0", "", { "dependencies": { "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg=="], - "@chevrotain/types": ["@chevrotain/types@11.1.2", "", {}, "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="], + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.59.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ=="], - "@chevrotain/utils": ["@chevrotain/utils@10.5.0", "", {}, "sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ=="], + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.59.0", "", { "os": "none", "cpu": "arm64" }, "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA=="], - "@codemirror/autocomplete": ["@codemirror/autocomplete@6.20.1", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0" } }, "sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.59.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A=="], - "@codemirror/commands": ["@codemirror/commands@6.10.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", "@codemirror/view": "^6.27.0", "@lezer/common": "^1.1.0" } }, "sha512-vvX1fsih9HledO1c9zdotZYUZnE4xV0m6i3m25s5DIfXofuprk6cRcLUZvSk3CASUbwjQX21tOGbkY2BH8TpnQ=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.59.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA=="], - "@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.5", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A=="], + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA=="], - "@codemirror/lang-json": ["@codemirror/lang-json@6.0.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@lezer/json": "^1.0.0" } }, "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ=="], + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA=="], - "@codemirror/language": ["@codemirror/language@6.12.2", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", "@lezer/common": "^1.5.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" } }, "sha512-jEPmz2nGGDxhRTg3lTpzmIyGKxz3Gp3SJES4b0nAuE5SWQoKdT5GoQ69cwMmFd+wvFUhYirtDTr0/DRHpQAyWg=="], + "@selderee/plugin-htmlparser2": ["@selderee/plugin-htmlparser2@0.11.0", "", { "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" } }, "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ=="], - "@codemirror/lint": ["@codemirror/lint@6.9.5", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.35.0", "crelt": "^1.0.5" } }, "sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA=="], + "@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@8.55.0", "", { "dependencies": { "@sentry/core": "8.55.0" } }, "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw=="], - "@codemirror/search": ["@codemirror/search@6.6.0", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.37.0", "crelt": "^1.0.5" } }, "sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw=="], + "@sentry-internal/feedback": ["@sentry-internal/feedback@8.55.0", "", { "dependencies": { "@sentry/core": "8.55.0" } }, "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw=="], - "@codemirror/state": ["@codemirror/state@6.5.4", "", { "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } }, "sha512-8y7xqG/hpB53l25CIoit9/ngxdfoG+fx+V3SHBrinnhOtLvKHRyAJJuHzkWrR4YXXLX8eXBsejgAAxHUOdW1yw=="], + "@sentry-internal/replay": ["@sentry-internal/replay@8.55.0", "", { "dependencies": { "@sentry-internal/browser-utils": "8.55.0", "@sentry/core": "8.55.0" } }, "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw=="], - "@codemirror/theme-one-dark": ["@codemirror/theme-one-dark@6.1.3", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/highlight": "^1.0.0" } }, "sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA=="], + "@sentry-internal/replay-canvas": ["@sentry-internal/replay-canvas@8.55.0", "", { "dependencies": { "@sentry-internal/replay": "8.55.0", "@sentry/core": "8.55.0" } }, "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w=="], - "@codemirror/view": ["@codemirror/view@6.39.16", "", { "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, "sha512-m6S22fFpKtOWhq8HuhzsI1WzUP/hB9THbDj0Tl5KX4gbO6Y91hwBl7Yky33NdvB6IffuRFiBxf1R8kJMyXmA4Q=="], + "@sentry/babel-plugin-component-annotate": ["@sentry/babel-plugin-component-annotate@3.6.1", "", {}, "sha512-zmvUa4RpzDG3LQJFpGCE8lniz8Rk1Wa6ZvvK+yEH+snZeaHHRbSnAQBMR607GOClP+euGHNO2YtaY4UAdNTYbg=="], - "@dnd-kit/accessibility": ["@dnd-kit/accessibility@3.1.1", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw=="], + "@sentry/browser": ["@sentry/browser@8.55.0", "", { "dependencies": { "@sentry-internal/browser-utils": "8.55.0", "@sentry-internal/feedback": "8.55.0", "@sentry-internal/replay": "8.55.0", "@sentry-internal/replay-canvas": "8.55.0", "@sentry/core": "8.55.0" } }, "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw=="], - "@dnd-kit/core": ["@dnd-kit/core@6.3.1", "", { "dependencies": { "@dnd-kit/accessibility": "^3.1.1", "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ=="], + "@sentry/bun": ["@sentry/bun@10.45.0", "", { "dependencies": { "@sentry/core": "10.45.0", "@sentry/node": "10.45.0" } }, "sha512-f9+24fp1Ew09qcqQ2DMKo0Dh/4WIE8G4D3/CLh8pgdwjP8A+5cvTQLcdUsqZll361P4jmXS+ZEi5KlmPv/ddGw=="], - "@dnd-kit/sortable": ["@dnd-kit/sortable@10.0.0", "", { "dependencies": { "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@dnd-kit/core": "^6.3.0", "react": ">=16.8.0" } }, "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg=="], + "@sentry/bundler-plugin-core": ["@sentry/bundler-plugin-core@3.6.1", "", { "dependencies": { "@babel/core": "^7.18.5", "@sentry/babel-plugin-component-annotate": "3.6.1", "@sentry/cli": "^2.49.0", "dotenv": "^16.3.1", "find-up": "^5.0.0", "glob": "^9.3.2", "magic-string": "0.30.8", "unplugin": "1.0.1" } }, "sha512-/ubWjPwgLep84sUPzHfKL2Ns9mK9aQrEX4aBFztru7ygiJidKJTxYGtvjh4dL2M1aZ0WRQYp+7PF6+VKwdZXcQ=="], - "@dnd-kit/utilities": ["@dnd-kit/utilities@3.2.2", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg=="], + "@sentry/cli": ["@sentry/cli@3.3.3", "", { "dependencies": { "progress": "^2.0.3", "proxy-from-env": "^1.1.0", "undici": "^6.22.0", "which": "^2.0.2" }, "optionalDependencies": { "@sentry/cli-darwin": "3.3.3", "@sentry/cli-linux-arm": "3.3.3", "@sentry/cli-linux-arm64": "3.3.3", "@sentry/cli-linux-i686": "3.3.3", "@sentry/cli-linux-x64": "3.3.3", "@sentry/cli-win32-arm64": "3.3.3", "@sentry/cli-win32-i686": "3.3.3", "@sentry/cli-win32-x64": "3.3.3" }, "bin": { "sentry-cli": "bin/sentry-cli" } }, "sha512-4CZtfgiOraX+BntMjYQhfLDArXwpqt3sEo5Zdj2pqWSZSd4yI3ncfQ21CsxLcI/sUQrjmD5Vzidu4/1OShyxtA=="], - "@electric-sql/pglite": ["@electric-sql/pglite@0.3.15", "", {}, "sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ=="], + "@sentry/cli-darwin": ["@sentry/cli-darwin@3.3.3", "", { "os": "darwin" }, "sha512-P8DoL79eX5fhKCfBHHl7xwwTShDPOb2drJC8lizZ3v1iS1JLPrNweM1KEzDefR30zH1wghbLSwsYv/svWdM3wA=="], - "@electric-sql/pglite-socket": ["@electric-sql/pglite-socket@0.0.20", "", { "peerDependencies": { "@electric-sql/pglite": "0.3.15" }, "bin": { "pglite-server": "dist/scripts/server.js" } }, "sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg=="], + "@sentry/cli-linux-arm": ["@sentry/cli-linux-arm@3.3.3", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "arm" }, "sha512-a7o/huozveLIImXHe0HDwEMVhvDopOP2tLcopvV7sQsVE8f/QOShR5FudKjmiaZz2opdLzPJO9pv5WuF9jAZPg=="], - "@electric-sql/pglite-tools": ["@electric-sql/pglite-tools@0.2.20", "", { "peerDependencies": { "@electric-sql/pglite": "0.3.15" } }, "sha512-BK50ZnYa3IG7ztXhtgYf0Q7zijV32Iw1cYS8C+ThdQlwx12V5VZ9KRJ42y82Hyb4PkTxZQklVQA9JHyUlex33A=="], + "@sentry/cli-linux-arm64": ["@sentry/cli-linux-arm64@3.3.3", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "arm64" }, "sha512-9jaX9RGyTpjo9u2urNi5ciBDpRdTt107YJpFXev+BFHJ6Lwz/owgRuYzPRfAen8hKkOOFheZ3iy07kl576eZzw=="], - "@emotion/is-prop-valid": ["@emotion/is-prop-valid@1.4.0", "", { "dependencies": { "@emotion/memoize": "^0.9.0" } }, "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw=="], + "@sentry/cli-linux-i686": ["@sentry/cli-linux-i686@3.3.3", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "ia32" }, "sha512-VngQYzR2kDm2oojCuYF20ebLTK8HKvEwxe785J6gxob8Ef9JvZkERyUqENYppBa9aVgN0pandqPAqOECWykTMA=="], - "@emotion/memoize": ["@emotion/memoize@0.9.0", "", {}, "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="], + "@sentry/cli-linux-x64": ["@sentry/cli-linux-x64@3.3.3", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "x64" }, "sha512-rBxXQeIYGefUNI2cXHxEr0y3bhxDQjOD4G6j/gqLz/Dj+l8gJ/iKP64kTudnoViNIpn0pdYccG69th7zmzM/Fg=="], - "@emotion/unitless": ["@emotion/unitless@0.10.0", "", {}, "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="], + "@sentry/cli-win32-arm64": ["@sentry/cli-win32-arm64@3.3.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-c52g+YS6BO0rzH8AEHqQPmpqZrw0GJjMWqy0tQ5jcqaGdaLVnxk0mMEubv8R6Dv5MR2LShoKjiNsaeVfrWIMUg=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + "@sentry/cli-win32-i686": ["@sentry/cli-win32-i686@3.3.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-DygYzSY/+tS7oFj/mfeg/yzYxsQx3fO8cI+IWc2pns/at+JcJ9O5xyM/x/q55wOxpnwla7RL1D3rsqK2mqkYfg=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + "@sentry/cli-win32-x64": ["@sentry/cli-win32-x64@3.3.3", "", { "os": "win32", "cpu": "x64" }, "sha512-i0glPcHwkqbVA2Y+0Yz7CD/l8TSkfft1a+lTU9yk/+DDU8WGkyArEAxAji9bGo4p+k5HIFC8OC2MwpKdcdFM4Q=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + "@sentry/core": ["@sentry/core@8.55.0", "", {}, "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + "@sentry/node": ["@sentry/node@10.45.0", "", { "dependencies": { "@fastify/otel": "0.17.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^2.6.0", "@opentelemetry/core": "^2.6.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/instrumentation-amqplib": "0.60.0", "@opentelemetry/instrumentation-connect": "0.56.0", "@opentelemetry/instrumentation-dataloader": "0.30.0", "@opentelemetry/instrumentation-express": "0.61.0", "@opentelemetry/instrumentation-fs": "0.32.0", "@opentelemetry/instrumentation-generic-pool": "0.56.0", "@opentelemetry/instrumentation-graphql": "0.61.0", "@opentelemetry/instrumentation-hapi": "0.59.0", "@opentelemetry/instrumentation-http": "0.213.0", "@opentelemetry/instrumentation-ioredis": "0.61.0", "@opentelemetry/instrumentation-kafkajs": "0.22.0", "@opentelemetry/instrumentation-knex": "0.57.0", "@opentelemetry/instrumentation-koa": "0.61.0", "@opentelemetry/instrumentation-lru-memoizer": "0.57.0", "@opentelemetry/instrumentation-mongodb": "0.66.0", "@opentelemetry/instrumentation-mongoose": "0.59.0", "@opentelemetry/instrumentation-mysql": "0.59.0", "@opentelemetry/instrumentation-mysql2": "0.59.0", "@opentelemetry/instrumentation-pg": "0.65.0", "@opentelemetry/instrumentation-redis": "0.61.0", "@opentelemetry/instrumentation-tedious": "0.32.0", "@opentelemetry/instrumentation-undici": "0.23.0", "@opentelemetry/resources": "^2.6.0", "@opentelemetry/sdk-trace-base": "^2.6.0", "@opentelemetry/semantic-conventions": "^1.40.0", "@prisma/instrumentation": "7.4.2", "@sentry/core": "10.45.0", "@sentry/node-core": "10.45.0", "@sentry/opentelemetry": "10.45.0", "import-in-the-middle": "^3.0.0" } }, "sha512-Kpiq9lRGnJc1ex8SwxOBl+FLQNl4Y137BydVooP7AFiAYZ6ftwHsIEF1bcYXaipHMT1YHS2bdhC2UQaaB2jkuQ=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + "@sentry/node-core": ["@sentry/node-core@10.45.0", "", { "dependencies": { "@sentry/core": "10.45.0", "@sentry/opentelemetry": "10.45.0", "import-in-the-middle": "^3.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0", "@opentelemetry/instrumentation": ">=0.57.1 <1", "@opentelemetry/resources": "^1.30.1 || ^2.1.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", "@opentelemetry/semantic-conventions": "^1.39.0" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/context-async-hooks", "@opentelemetry/core", "@opentelemetry/instrumentation", "@opentelemetry/resources", "@opentelemetry/sdk-trace-base", "@opentelemetry/semantic-conventions"] }, "sha512-KQZEvLKM344+EqXiA9HIzWbW5hzq6/9nnFUQ8niaBPoOgR9AiJhrccfIscfgb8vjkriiEtzE03OW/4h1CTgZ3Q=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + "@sentry/opentelemetry": ["@sentry/opentelemetry@10.45.0", "", { "dependencies": { "@sentry/core": "10.45.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", "@opentelemetry/semantic-conventions": "^1.39.0" } }, "sha512-PmuGO+p/gC3ZQ8ddOeJ5P9ApnTTm35i12Bpuyb13AckCbNSJFvG2ggZda35JQOmiFU0kKYiwkoFAa8Mvj9od3Q=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + "@sentry/react": ["@sentry/react@8.55.0", "", { "dependencies": { "@sentry/browser": "8.55.0", "@sentry/core": "8.55.0", "hoist-non-react-statics": "^3.3.2" }, "peerDependencies": { "react": "^16.14.0 || 17.x || 18.x || 19.x" } }, "sha512-/qNBvFLpvSa/Rmia0jpKfJdy16d4YZaAnH/TuKLAtm0BWlsPQzbXCU4h8C5Hsst0Do0zG613MEtEmWpWrVOqWA=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + "@sentry/vite-plugin": ["@sentry/vite-plugin@3.6.1", "", { "dependencies": { "@sentry/bundler-plugin-core": "3.6.1", "unplugin": "1.0.1" } }, "sha512-x8WMdv2K2HcGS2ezEUIEZXpT/fNeWQ9rsEeF0K9DfKXK8Z9lzRmCr6TVA6I9+yW39Is+1/0cv1Rsu0LhO7lHzg=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + "@sinclair/typebox": ["@sinclair/typebox@0.27.10", "", {}, "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + "@slates/proto": ["@slates/proto@1.0.0-rc.8", "", { "dependencies": { "@lowerdeck/emitter": "^1.0.4", "@lowerdeck/error": "^1.1.0", "@toon-format/toon": "^2.1.0", "axios": "^1.13.2", "zod": "^4.2.1" } }, "sha512-3PB2SCFi13mYNkkptX9dbz8xOFgEdtXd6atDtaaIDs8vSxIMWy8C9JoSqtqXDmJOfM8Jk/dCSWxjoTPEYnMfgQ=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + "@smithy/abort-controller": ["@smithy/abort-controller@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + "@smithy/chunked-blob-reader": ["@smithy/chunked-blob-reader@5.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-y5d4xRiD6TzeP5BWlb+Ig/VFqF+t9oANNhGeMqyzU7obw7FYgTgVi50i5JqBTeKp+TABeDIeeXFZdz65RipNtA=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + "@smithy/chunked-blob-reader-native": ["@smithy/chunked-blob-reader-native@4.2.2", "", { "dependencies": { "@smithy/util-base64": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-QzzYIlf4yg0w5TQaC9VId3B3ugSk1MI/wb7tgcHtd7CBV9gNRKZrhc2EPSxSZuDy10zUZ0lomNMgkc6/VVe8xg=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + "@smithy/config-resolver": ["@smithy/config-resolver@4.4.13", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + "@smithy/core": ["@smithy/core@3.23.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-stream": "^4.5.20", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.12", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.12", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + "@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.12", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + "@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + "@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.12", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + "@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.12", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.15", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + "@smithy/hash-blob-browser": ["@smithy/hash-blob-browser@4.2.11", "", { "dependencies": { "@smithy/chunked-blob-reader": "^5.2.1", "@smithy/chunked-blob-reader-native": "^4.2.2", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-DrcAx3PM6AEbWZxsKl6CWAGnVwiz28Wp1ZhNu+Hi4uI/6C1PIZBIaPM2VoqBDAsOWbM6ZVzOEQMxFLLdmb4eBQ=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + "@smithy/hash-node": ["@smithy/hash-node@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + "@smithy/hash-stream-node": ["@smithy/hash-stream-node@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-w78xsYrOlwXKwN5tv1GnKIRbHb1HygSpeZMP6xDxCPGf1U/xDHjCpJu64c5T35UKyEPwa0bPeIcvU69VY3khUA=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g=="], - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], + "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q=="], - "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], + "@smithy/md5-js": ["@smithy/md5-js@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-Op+Dh6dPLWTjWITChFayDllIaCXRofOed8ecpggTC5fkh8yXes0vAEX7gRUfjGK+TlyxoCAA05gHbZW/zB9JwQ=="], - "@eslint/config-array": ["@eslint/config-array@0.21.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="], + "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA=="], - "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], + "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.27", "", { "dependencies": { "@smithy/core": "^3.23.12", "@smithy/middleware-serde": "^4.2.15", "@smithy/node-config-provider": "^4.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-middleware": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA=="], - "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], + "@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.44", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/protocol-http": "^5.3.12", "@smithy/service-error-classification": "^4.2.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA=="], - "@eslint/eslintrc": ["@eslint/eslintrc@3.3.4", "", { "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", "minimatch": "^3.1.3", "strip-json-comments": "^3.1.1" } }, "sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ=="], + "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.15", "", { "dependencies": { "@smithy/core": "^3.23.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg=="], - "@eslint/js": ["@eslint/js@9.39.3", "", {}, "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw=="], + "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw=="], - "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], + "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.12", "", { "dependencies": { "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw=="], - "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], + "@smithy/node-http-handler": ["@smithy/node-http-handler@4.5.0", "", { "dependencies": { "@smithy/abort-controller": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A=="], - "@fastify/otel": ["@fastify/otel@0.17.1", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.212.0", "@opentelemetry/semantic-conventions": "^1.28.0", "minimatch": "^10.2.4" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0" } }, "sha512-K4wyxfUZx2ux5o+b6BtTqouYFVILohLZmSbA2tKUueJstNcBnoGPVhllCaOvbQ3ZrXdUxUC/fyrSWSCqHhdOPg=="], + "@smithy/property-provider": ["@smithy/property-provider@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A=="], - "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], + "@smithy/protocol-http": ["@smithy/protocol-http@5.3.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw=="], - "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], + "@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg=="], - "@floating-ui/react": ["@floating-ui/react@0.27.19", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog=="], + "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw=="], - "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.8", "", { "dependencies": { "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A=="], + "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1" } }, "sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ=="], - "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], + "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.7", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw=="], - "@function-bay/build": ["@function-bay/build@workspace:src/systems/function-bay/packages/build"], + "@smithy/signature-v4": ["@smithy/signature-v4@5.3.12", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw=="], - "@function-bay/nodejs": ["@function-bay/nodejs@workspace:src/systems/function-bay/packages/nodejs"], + "@smithy/smithy-client": ["@smithy/smithy-client@4.12.7", "", { "dependencies": { "@smithy/core": "^3.23.12", "@smithy/middleware-endpoint": "^4.4.27", "@smithy/middleware-stack": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-stream": "^4.5.20", "tslib": "^2.6.2" } }, "sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ=="], - "@function-bay/tsconfig": ["@function-bay/tsconfig@workspace:src/systems/function-bay/packages/tsconfig"], + "@smithy/types": ["@smithy/types@4.13.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g=="], - "@function-bay/types": ["@function-bay/types@workspace:src/systems/function-bay/packages/types"], + "@smithy/url-parser": ["@smithy/url-parser@4.2.12", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA=="], - "@function-bay/utils": ["@function-bay/utils@workspace:src/systems/function-bay/packages/utils"], + "@smithy/util-base64": ["@smithy/util-base64@4.3.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ=="], - "@gar/promisify": ["@gar/promisify@1.1.3", "", {}, "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="], + "@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ=="], - "@gitbeaker/core": ["@gitbeaker/core@43.8.0", "", { "dependencies": { "@gitbeaker/requester-utils": "^43.8.0", "qs": "^6.14.0", "xcase": "^2.0.1" } }, "sha512-H+LfKuf4dExBinb79c+CXViRBvTVQNf5BYLNSizm2SiqdED5JruhKX88payefleY0szp7G/mySlFSXPyGRH1dQ=="], + "@smithy/util-body-length-node": ["@smithy/util-body-length-node@4.2.3", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g=="], - "@gitbeaker/requester-utils": ["@gitbeaker/requester-utils@43.8.0", "", { "dependencies": { "picomatch-browser": "^2.2.6", "qs": "^6.14.0", "rate-limiter-flexible": "^8.0.1", "xcase": "^2.0.1" } }, "sha512-d/SiJdxijc+aH5ZBQOw83XLxNSXqsBZNm5k3nPu1EHxGxK0fajXmxdMl0/vNXbKRggnIquFCxURkrQSEzfjqxQ=="], + "@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.2", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q=="], - "@gitbeaker/rest": ["@gitbeaker/rest@43.8.0", "", { "dependencies": { "@gitbeaker/core": "^43.8.0", "@gitbeaker/requester-utils": "^43.8.0" } }, "sha512-xxqsNsUXaFang9b2e/NTIgqUeuUlifA2Opy1mOVqTDuJZZNIOTgUNyziwBJoleBhMC0XuvY3JNVMWthufcVjRw=="], + "@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ=="], - "@googleapis/admin": ["@googleapis/admin@23.5.0", "", { "dependencies": { "googleapis-common": "^7.0.0" } }, "sha512-B8jWEYs9fscIb1yEYx0OBxovIUKbXlRA5aUtR/JvZJXbBVnZRgsH8UJ96Rd4CqKF3mLq9dFJGy87U2foQ/G/HQ=="], + "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.43", "", { "dependencies": { "@smithy/property-provider": "^4.2.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ=="], - "@grpc/grpc-js": ["@grpc/grpc-js@1.14.3", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA=="], + "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.47", "", { "dependencies": { "@smithy/config-resolver": "^4.4.13", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ=="], - "@grpc/proto-loader": ["@grpc/proto-loader@0.8.0", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.3", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ=="], + "@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.3", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig=="], - "@hono/node-server": ["@hono/node-server@1.19.10", "", { "peerDependencies": { "hono": "^4" } }, "sha512-hZ7nOssGqRgyV3FVVQdfi+U4q02uB23bpnYpdvNXkYTRRyWx84b7yf1ans+dnJ/7h41sGL3CeQTfO+ZGxuO+Iw=="], + "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg=="], - "@hono/zod-validator": ["@hono/zod-validator@0.7.6", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Io1B6d011Gj1KknV4rXYz4le5+5EubcWEU/speUjuw9XMMIaP3n78yXLhjd2A3PXaXaUwEAluOiAyLqhBEJgsw=="], + "@smithy/util-middleware": ["@smithy/util-middleware@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ=="], - "@hookform/resolvers": ["@hookform/resolvers@5.2.2", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA=="], + "@smithy/util-retry": ["@smithy/util-retry@4.2.12", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ=="], - "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + "@smithy/util-stream": ["@smithy/util-stream@4.5.20", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.15", "@smithy/node-http-handler": "^4.5.0", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw=="], - "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + "@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw=="], - "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + "@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="], - "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + "@smithy/util-waiter": ["@smithy/util-waiter@4.2.13", "", { "dependencies": { "@smithy/abort-controller": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-2zdZ9DTHngRtcYxJK1GUDxruNr53kv5W2Lupe0LMU+Imr6ohQg8M2T14MNkj1Y0wS3FFwpgpGQyvuaMF7CiTmQ=="], - "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], + "@smithy/uuid": ["@smithy/uuid@1.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g=="], - "@iconify/utils": ["@iconify/utils@3.1.3", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "import-meta-resolve": "^4.2.0" } }, "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw=="], + "@sqltools/formatter": ["@sqltools/formatter@1.2.5", "", {}, "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw=="], - "@inquirer/ansi": ["@inquirer/ansi@1.0.2", "", {}, "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ=="], + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@inquirer/checkbox": ["@inquirer/checkbox@4.3.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA=="], + "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], - "@inquirer/confirm": ["@inquirer/confirm@5.1.21", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ=="], + "@surma/rollup-plugin-off-main-thread": ["@surma/rollup-plugin-off-main-thread@2.2.3", "", { "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", "magic-string": "^0.25.0", "string.prototype.matchall": "^4.0.6" } }, "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ=="], - "@inquirer/core": ["@inquirer/core@10.3.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A=="], + "@svgdotjs/svg.draggable.js": ["@svgdotjs/svg.draggable.js@3.0.6", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA=="], - "@inquirer/editor": ["@inquirer/editor@4.2.23", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/external-editor": "^1.0.3", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ=="], + "@svgdotjs/svg.filter.js": ["@svgdotjs/svg.filter.js@3.0.9", "", { "dependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw=="], - "@inquirer/expand": ["@inquirer/expand@4.0.23", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew=="], + "@svgdotjs/svg.js": ["@svgdotjs/svg.js@3.2.5", "", {}, "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ=="], - "@inquirer/external-editor": ["@inquirer/external-editor@1.0.3", "", { "dependencies": { "chardet": "^2.1.1", "iconv-lite": "^0.7.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA=="], + "@svgdotjs/svg.resize.js": ["@svgdotjs/svg.resize.js@2.0.5", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4", "@svgdotjs/svg.select.js": "^4.0.1" } }, "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA=="], - "@inquirer/figures": ["@inquirer/figures@1.0.15", "", {}, "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g=="], + "@svgdotjs/svg.select.js": ["@svgdotjs/svg.select.js@4.0.3", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg=="], - "@inquirer/input": ["@inquirer/input@4.3.1", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g=="], + "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.25", "", { "dependencies": { "@tanstack/virtual-core": "3.15.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-bmNoqMu6gcAW9JGrKVB0Q1tN1i5RONZF8r1fW0bbE4Oyf3DwEGnzzQJ2OW+Ozg1P4s8PyugkHg2ULZoFQN+cqw=="], - "@inquirer/number": ["@inquirer/number@3.0.23", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg=="], + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.15.0", "", {}, "sha512-0AwPGx0I8QxPYjAxShT/+z+ZOe9u8mW5rsXvivCTjRfRmz9a43+3mRyi4wwlyoUqOC56q/jatKa0Bh9M99BEHQ=="], - "@inquirer/password": ["@inquirer/password@4.0.23", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA=="], + "@tediousjs/connection-string": ["@tediousjs/connection-string@0.5.0", "", {}, "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ=="], - "@inquirer/prompts": ["@inquirer/prompts@7.10.1", "", { "dependencies": { "@inquirer/checkbox": "^4.3.2", "@inquirer/confirm": "^5.1.21", "@inquirer/editor": "^4.2.23", "@inquirer/expand": "^4.0.23", "@inquirer/input": "^4.3.1", "@inquirer/number": "^3.0.23", "@inquirer/password": "^4.0.23", "@inquirer/rawlist": "^4.1.11", "@inquirer/search": "^3.2.2", "@inquirer/select": "^4.4.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg=="], + "@tiptap/core": ["@tiptap/core@3.6.1", "", { "peerDependencies": { "@tiptap/pm": "^3.6.1" } }, "sha512-Ascvlh0PmScOJyPxcgPOqFLSOruY/7JjPYdTyqShOIks1S2dr3w8A07omQCmeEHI0mX9L2eZyR2qXwFlyMdfEA=="], - "@inquirer/rawlist": ["@inquirer/rawlist@4.1.11", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw=="], + "@tiptap/extension-blockquote": ["@tiptap/extension-blockquote@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-LQzn6aGtL4WXz2+rYshl/7/VnP2qJTpD7fWL96GXAzhqviPEY1bJES7poqJb3MU/gzl8VJUVzVzU1VoVfUKlbA=="], - "@inquirer/search": ["@inquirer/search@3.2.2", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA=="], + "@tiptap/extension-bold": ["@tiptap/extension-bold@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-sQklEWiyf58yDjiHtm5vmkVjfIc/cBuSusmCsQ0q9vGYnEF1iOHKhGpvnCeEXNeqF3fiJQRlquzt/6ymle3Iwg=="], - "@inquirer/select": ["@inquirer/select@4.4.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w=="], + "@tiptap/extension-bubble-menu": ["@tiptap/extension-bubble-menu@3.20.0", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-MDosUfs8Tj+nwg8RC+wTMWGkLJORXmbR6YZgbiX4hrc7G90Gopdd6kj6ht5/T8t7dLLaX7N0+DEHdUEPGED7dw=="], - "@inquirer/type": ["@inquirer/type@3.0.10", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA=="], + "@tiptap/extension-bullet-list": ["@tiptap/extension-bullet-list@3.20.0", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.0" } }, "sha512-OcKMeopBbqWzhSi6o8nNz0aayogg1sfOAhto3NxJu3Ya32dwBFqmHXSYM6uW4jOphNvVPyjiq9aNRh3qTdd1dw=="], - "@ioredis/commands": ["@ioredis/commands@1.5.1", "", {}, "sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw=="], + "@tiptap/extension-character-count": ["@tiptap/extension-character-count@3.6.1", "", { "peerDependencies": { "@tiptap/extensions": "^3.6.1" } }, "sha512-7D1etVbA9g2e9aDWfbPEZPTprjYr+YQgcfeUNTWFJDRPrzWLgv0R6HOAr4fEmAvgFLXegnn+VXv5pcMfj8kK0g=="], - "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + "@tiptap/extension-code": ["@tiptap/extension-code@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-TYDWFeSQ9umiyrqsT6VecbuhL8XIHkUhO+gEk0sVvH67ZLwjFDhAIIgWIr1/dbIGPcvMZM19E7xUUhAdIaXaOQ=="], - "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + "@tiptap/extension-code-block": ["@tiptap/extension-code-block@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-lBbmNek14aCjrHcBcq3PRqWfNLvC6bcRa2Osc6e/LtmXlcpype4f6n+Yx+WZ+f2uUh0UmDRCz7BEyUETEsDmlQ=="], - "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], + "@tiptap/extension-code-block-lowlight": ["@tiptap/extension-code-block-lowlight@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/extension-code-block": "^3.6.1", "@tiptap/pm": "^3.6.1", "highlight.js": "^11", "lowlight": "^2 || ^3" } }, "sha512-xAfiQKWzOYiiuL9yi4vX7V5O5bQEXV2ZWMSPtYoBggbRN8Ja12qMlUchpZQMs4IiiScjjFqMpWaDL7cYrtGpwA=="], - "@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], + "@tiptap/extension-collaboration": ["@tiptap/extension-collaboration@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1", "@tiptap/y-tiptap": "^3.0.0-beta.3", "yjs": "^13" } }, "sha512-c0hkH/90pf/3Aevy2MgW7Hg2yeV4fkeOFoBWEu5nwA1YeulJL+usGQrudhpBSgzAvpv94OZXkdVQjJwRq1hvzg=="], - "@jitl/quickjs-ffi-types": ["@jitl/quickjs-ffi-types@0.32.0", "", {}, "sha512-v9T+GQpmk43VDJ7d72sf0Nexhk+ArvtUihW27dy7lqAl0zBObFKtSBBIm5RBjwIhE8VwsPPm9PNuvPvNqLWUEg=="], + "@tiptap/extension-color": ["@tiptap/extension-color@3.20.0", "", { "peerDependencies": { "@tiptap/extension-text-style": "^3.20.0" } }, "sha512-KGXQ3I18uLHQ61FZpXDu0gH6+0jqmDkVwkPNXmM3oPNDSH80SG5UeZlrXi/PwtlusePJ3dFHtoQ1g6j2bJUssg=="], - "@jitl/quickjs-wasmfile-debug-asyncify": ["@jitl/quickjs-wasmfile-debug-asyncify@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-EX8zbXwGqCgAE764M+qvkHtyXDi/FUoMBea0JnES7vCM3P7a2+EOZOjGv85wtZ2sJhI1oJ+nekmqpOODFDY+hw=="], + "@tiptap/extension-document": ["@tiptap/extension-document@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-oJfLIG3vAtZo/wg29WiBcyWt22KUgddpP8wqtCE+kY5Dw8znLR9ehNmVWlSWJA5OJUMO0ntAHx4bBT+I2MBd5w=="], - "@jitl/quickjs-wasmfile-debug-sync": ["@jitl/quickjs-wasmfile-debug-sync@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-LeYWrPGC1uNCTBWvibo3ZLJj0CSVNYUXvJpXMCmuQ5Sap2cCACc3uvGvYV4homHHBAzfw5akoTqMMS4YFRtw+Q=="], + "@tiptap/extension-drag-handle": ["@tiptap/extension-drag-handle@3.6.1", "", { "dependencies": { "@floating-ui/dom": "^1.6.13" }, "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/extension-collaboration": "^3.6.1", "@tiptap/extension-node-range": "^3.6.1", "@tiptap/pm": "^3.6.1", "@tiptap/y-tiptap": "^3.0.0-beta.3" } }, "sha512-+U4HhT9eRqBPY9FYvpHoRKH/DSfJIt8bS3AuaG8wsq3h1YhZFTzqjpnmYHVnVcllT2kT555JVAQQe4bMlI/1Lg=="], - "@jitl/quickjs-wasmfile-release-asyncify": ["@jitl/quickjs-wasmfile-release-asyncify@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-3oSwPfja12ICz4aIblB58cuY8JlEq5Txt8Cut4VLo+LH47QN+mzCnSgnbB03hWzg1LBcc+VyyI9UOag7a1NF+Q=="], + "@tiptap/extension-drag-handle-react": ["@tiptap/extension-drag-handle-react@3.6.1", "", { "peerDependencies": { "@tiptap/extension-drag-handle": "^3.6.1", "@tiptap/pm": "^3.6.1", "@tiptap/react": "^3.6.1", "react": "^16.8 || ^17 || ^18 || ^19", "react-dom": "^16.8 || ^17 || ^18 || ^19" } }, "sha512-n92Rk+57+koTiHk9kffOpnHEMk8cTpTpJUu/CVIV5Wy3si0xQoMJ7rQsD4qQhRNBe9izqQbAmJed9bGgmZkFiw=="], - "@jitl/quickjs-wasmfile-release-sync": ["@jitl/quickjs-wasmfile-release-sync@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-BKNDI/TPBfGlLNGYpLrhcDGXmIk4xHm4MRAisOBnOzpXVn9HZWsfmMAc9WMBrAHjvvds6HOikKeaOBKdPdpVrg=="], + "@tiptap/extension-dropcursor": ["@tiptap/extension-dropcursor@3.20.0", "", { "peerDependencies": { "@tiptap/extensions": "^3.20.0" } }, "sha512-d+cxplRlktVgZPwatnc34IArlppM0IFKS1J5wLk+ba1jidizsbMVh45tP/BTK2flhyfRqcNoB5R0TArhUpbkNQ=="], - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + "@tiptap/extension-floating-menu": ["@tiptap/extension-floating-menu@3.20.0", "", { "peerDependencies": { "@floating-ui/dom": "^1.0.0", "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-rYs4Bv5pVjqZ/2vvR6oe7ammZapkAwN51As/WDbemvYDjfOGRqK58qGauUjYZiDzPOEIzI2mxGwsZ4eJhPW4Ig=="], - "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + "@tiptap/extension-gapcursor": ["@tiptap/extension-gapcursor@3.20.0", "", { "peerDependencies": { "@tiptap/extensions": "^3.20.0" } }, "sha512-P/LasfvG9/qFq43ZAlNbAnPnXC+/RJf49buTrhtFvI9Zg0+Lbpjx1oh6oMHB19T88Y28KtrckfFZ8aTSUWDq6w=="], - "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + "@tiptap/extension-hard-break": ["@tiptap/extension-hard-break@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-rqvhMOw4f+XQmEthncbvDjgLH6fz8L9splnKZC7OeS0eX8b0qd7+xI1u5kyxF3KA2Z0BnigES++jjWuecqV6mA=="], - "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], + "@tiptap/extension-heading": ["@tiptap/extension-heading@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-EsJrPUPxQqPwJNuboX/Z/l+f2YleJWYMJ75TyCfBrPhOkcaXasiUSyfK/qm9NxcFOGPTgnTMAhE9PfQ04eptQQ=="], - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + "@tiptap/extension-highlight": ["@tiptap/extension-highlight@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-ANL1wFz0s1ScNR4uBfO0s6Sz+qqGp2u6ynrCVk6TCT3d10CQ+gD1gSDTrVRC3CtlMKtHHH4fYrFAq284+J0gKA=="], - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "@tiptap/extension-horizontal-rule": ["@tiptap/extension-horizontal-rule@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-6uvcutFMv+9wPZgptDkbRDjAm3YVxlibmkhWD5GuaWwS9L/yUtobpI3GycujRSUZ8D3q6Q9J7LqpmQtQRTalWA=="], - "@js-joda/core": ["@js-joda/core@5.7.0", "", {}, "sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg=="], + "@tiptap/extension-image": ["@tiptap/extension-image@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-0t7HYncV0kYEQS79NFczxdlZoZ8zu8X4VavDqt+mbSAUKRq3gCvgtZ5Zyd778sNmtmbz3arxkEYMIVou2swD0g=="], - "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], + "@tiptap/extension-italic": ["@tiptap/extension-italic@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-/DhnKQF8yN8RxtuL8abZ28wd5281EaGoE2Oha35zXSOF1vNYnbyt8Ymkv/7u1BcWEWTvRPgaju0YCGXisPRLYw=="], - "@lezer/common": ["@lezer/common@1.5.1", "", {}, "sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw=="], + "@tiptap/extension-link": ["@tiptap/extension-link@3.20.0", "", { "dependencies": { "linkifyjs": "^4.3.2" }, "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-qI/5A+R0ZWBxo/8HxSn1uOyr7odr3xHBZ/gzOR1GUJaZqjlJxkWFX0RtXMbLKEGEvT25o345cF7b0wFznEh8qA=="], - "@lezer/highlight": ["@lezer/highlight@1.2.3", "", { "dependencies": { "@lezer/common": "^1.3.0" } }, "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g=="], + "@tiptap/extension-list": ["@tiptap/extension-list@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-+V0/gsVWAv+7vcY0MAe6D52LYTIicMSHw00wz3ISZgprSb2yQhJ4+4gurOnUrQ4Du3AnRQvxPROaofwxIQ66WQ=="], - "@lezer/javascript": ["@lezer/javascript@1.5.4", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.1.3", "@lezer/lr": "^1.3.0" } }, "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA=="], + "@tiptap/extension-list-item": ["@tiptap/extension-list-item@3.20.0", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.0" } }, "sha512-qEtjaaGPuqaFB4VpLrGDoIe9RHnckxPfu6d3rc22ap6TAHCDyRv05CEyJogqccnFceG/v5WN4znUBER8RWnWHA=="], - "@lezer/json": ["@lezer/json@1.0.3", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ=="], + "@tiptap/extension-list-keymap": ["@tiptap/extension-list-keymap@3.20.0", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.0" } }, "sha512-Z4GvKy04Ms4cLFN+CY6wXswd36xYsT2p/YL0V89LYFMZTerOeTjFYlndzn6svqL8NV1PRT5Diw4WTTxJSmcJPA=="], - "@lezer/lr": ["@lezer/lr@1.4.8", "", { "dependencies": { "@lezer/common": "^1.0.0" } }, "sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA=="], + "@tiptap/extension-node-range": ["@tiptap/extension-node-range@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-CB9La+HmR52BwMtuOOh1qPBTMpxMAkLqz5w0AiqEnrQ0OCumP+RvZgF1CGDqoIGKzrwFRxoHTaMLq/xmoVtqzA=="], - "@libsql/hrana-client": ["@libsql/hrana-client@0.4.4", "", { "dependencies": { "@libsql/isomorphic-fetch": "^0.1.1", "@libsql/isomorphic-ws": "^0.1.2", "js-base64": "^3.7.5" } }, "sha512-BevUg0UBRLs5AEqn0fjrMcl49xCtwuFavgK4MzCb3PTtxpEbQ24oGXctspN9drBiUVmqSZr7go887aiLLzSO3A=="], + "@tiptap/extension-ordered-list": ["@tiptap/extension-ordered-list@3.20.0", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.0" } }, "sha512-jVKnJvrizLk7etwBMfyoj6H2GE4M+PD4k7Bwp6Bh1ohBWtfIA1TlngdS842Mx5i1VB2e3UWIwr8ZH46gl6cwMA=="], - "@libsql/isomorphic-fetch": ["@libsql/isomorphic-fetch@0.1.12", "", { "dependencies": { "@types/node-fetch": "^2.6.11", "node-fetch": "^2.7.0" } }, "sha512-MRo4UcmjAGAa3ac56LoD5OE13m2p0lu0VEtZC2NZMcogM/jc5fU9YtMQ3qbPjFJ+u2BBjFZgMPkQaLS1dlMhpg=="], + "@tiptap/extension-paragraph": ["@tiptap/extension-paragraph@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-mM99zK4+RnEXIMCv6akfNATAs0Iija6FgyFA9J9NZ6N4o8y9QiNLLa6HjLpAC+W+VoCgQIekyoF/Q9ftxmAYDQ=="], - "@libsql/isomorphic-ws": ["@libsql/isomorphic-ws@0.1.5", "", { "dependencies": { "@types/ws": "^8.5.4", "ws": "^8.13.0" } }, "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg=="], + "@tiptap/extension-placeholder": ["@tiptap/extension-placeholder@3.20.0", "", { "peerDependencies": { "@tiptap/extensions": "^3.20.0" } }, "sha512-ZhYD3L5m16ydSe2z8vqz+RdtAG/iOQaFHHedFct70tKRoLqi2ajF5kgpemu8DwpaRTcyiCN4G99J/+MqehKNjQ=="], - "@libsql/sqlite3": ["@libsql/sqlite3@0.3.1", "", { "dependencies": { "@libsql/hrana-client": "^0.4.1" } }, "sha512-KOOBUuKDjqzteM6QA0W1vnZDfOt5MNMyo2yr4TaH1RcCd7Fsts4lpzfty6FmE1d6QDrRxjRq2ZciO6VdQ9ZF3A=="], + "@tiptap/extension-strike": ["@tiptap/extension-strike@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-0vcTZRRAiDfon3VM1mHBr9EFmTkkUXMhm0Xtdtn0bGe+sIqufyi+hUYTEw93EQOD9XNsPkrud6jzQNYpX2H3AQ=="], - "@looped/hooks": ["@looped/hooks@0.1.3", "", { "dependencies": { "lodash": "^4.17.21", "use-interval": "^1.4.0" }, "peerDependencies": { "react": ">=16" } }, "sha512-1WN1Ak+CBif9/J3Jt/Epxit4ZW92hQuYCLFmEYjJVtiqiBUGuqXsnyz1EC0XPiJCUE5h4L/0jnyetxcgPIB1NQ=="], + "@tiptap/extension-subscript": ["@tiptap/extension-subscript@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-EX3GPey4Gp9W04zM2MsP5OfMnwGtQTh1Q0ZokJAdENHpyXbche9WjK31FTzwEmTSqlU5stSsH5KwhSYlDwm5rA=="], - "@lowerdeck/api-key": ["@lowerdeck/api-key@1.0.3", "", { "dependencies": { "@lowerdeck/id": "^1.0.8" } }, "sha512-VG/Wk3PUUUZRetLX6+h01w+KuEPYgHRKIN/II74VZDrKiD7rEcStzuvhK/bYTVaubCLYm7QsRlPL8ZqS+Em4ow=="], + "@tiptap/extension-superscript": ["@tiptap/extension-superscript@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-NNFv58LM/7JMu4aq9Apq8yuaB8MDL5dvVZ7R6qMuQNZDVGAGgoiBqtglA1RXldNl/9IFcVg67rT8oF86qykYKA=="], - "@lowerdeck/api-mux": ["@lowerdeck/api-mux@1.0.4", "", { "dependencies": { "@lowerdeck/error": "^1.2.2" } }, "sha512-Uiw0XJWS122NKj7yPgse1A051Iw2z1mD3lPNFZ25xw8ie9RexN3gStg2hFwbSlOTAWQfWM2JIUJJmqzeTr070Q=="], + "@tiptap/extension-table": ["@tiptap/extension-table@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-DRVy+hqysOWeB6RCaveV06+eTpq8JnBFowx8fkAdcyyLVPEaeZvnIvulL8vMYJjSOqxJ7rCLoqhK2N6CXbewiQ=="], - "@lowerdeck/base62": ["@lowerdeck/base62@1.0.4", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PIx4GWbQWWCz7YigmAFD0M6I3ydJ97dgqNCzpHG+bt1tFGv2+Kb8t0vsY/cdoH55lG5A019wHglUnxLqmme5Cw=="], + "@tiptap/extension-table-cell": ["@tiptap/extension-table-cell@3.6.1", "", { "peerDependencies": { "@tiptap/extension-table": "^3.6.1" } }, "sha512-O4JS/kcsNtW0vWCJyu6RAomSrknEUrEiDb4/V1qscvSeQUe51Ou6yFDZyFiFCyyte0O1j3HAo5I++8LfhBYFeQ=="], - "@lowerdeck/cache": ["@lowerdeck/cache@1.0.2", "", { "dependencies": { "@lowerdeck/redis": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "lru-cache": "^11.2.4", "superjson": "^2.2.6" } }, "sha512-gycPnsehLwuRudiVgocYjJpaEkPGcyE+YV94uBIOhSVD6G2L8IX85VnHZ9zeh5fprAY57ayGofcEdGRLF8MV9g=="], + "@tiptap/extension-table-header": ["@tiptap/extension-table-header@3.6.1", "", { "peerDependencies": { "@tiptap/extension-table": "^3.6.1" } }, "sha512-zKJLxGVM1qfB2Gllrpt/q6XEWmAwzD0+B2gRegW1HekmDj0q2uPaBDwU7R6lhDXniqp/JyQ7zcFrZIOF8/Ul+w=="], - "@lowerdeck/canonicalize": ["@lowerdeck/canonicalize@1.0.4", "", {}, "sha512-9SquJ0A2Mpm7vVmp6zZt0Lem+Klo0OrIh5KwjJZjedfD8eSq06spiCXqlK67RAJzz2MSRqlRqAnOeuzAx7cbLg=="], + "@tiptap/extension-table-row": ["@tiptap/extension-table-row@3.6.1", "", { "peerDependencies": { "@tiptap/extension-table": "^3.6.1" } }, "sha512-9YwnfKWiDr/Fz/SCwBvkcN7aHkXKfM8YNlsz4mwrLaP38cJBDabnxeZarNAqPSZDejp9ceUSwhQgmm3U0dP5YA=="], - "@lowerdeck/case": ["@lowerdeck/case@1.0.9", "", {}, "sha512-nyKaHgj6UDRtzfRWeGA01H1S/tGpaFc28U8aeWaDTLnEcuXbZfspv78kfo+S7ZEeIkth+klz1pUEhhIUUOiEkA=="], + "@tiptap/extension-task-item": ["@tiptap/extension-task-item@3.6.1", "", { "peerDependencies": { "@tiptap/extension-list": "^3.6.1" } }, "sha512-xgqLyt+sMwHWTNf/Z8TZmJEqKjMTbqRjyoiCR2ZF4HdQlDa6xLCZ5zTUYsSpASHmAWrKRA7vZUrsiOd13ua+tQ=="], - "@lowerdeck/cron": ["@lowerdeck/cron@1.1.3", "", { "dependencies": { "@lowerdeck/execution-context": "^1.1.1", "@lowerdeck/id": "^1.0.8", "@lowerdeck/queue": "^1.0.11", "@lowerdeck/redis": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "bullmq": "^5.34.3" } }, "sha512-fiYQ6xkwG43M2rnqJM/KdUhp1IVk+6HMKwpYi49gJ6AX7MUVx66V2+tr0RX/vsqLyHjIPk7pydjUV7dFu0pbMQ=="], + "@tiptap/extension-task-list": ["@tiptap/extension-task-list@3.6.1", "", { "peerDependencies": { "@tiptap/extension-list": "^3.6.1" } }, "sha512-IHAIV0lcp0y3mM12LSJPm+iIAliIvKKGc/EQCUddITSwckNX2vqPHpqbZGyLhTG0mFyIb2wKJyeWMnws7f2zGA=="], - "@lowerdeck/delay": ["@lowerdeck/delay@1.0.4", "", {}, "sha512-rdXFPnNVnOfO5ZXc6RqcOV8C1gYcGdc0ri0rrYX27NuBqLj5xt7LgFA1h47no5j35pJwLBBdmVmaNMRV/pCAlg=="], + "@tiptap/extension-text": ["@tiptap/extension-text@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-tf8bE8tSaOEWabCzPm71xwiUhyMFKqY9jkP5af3Kr1/F45jzZFIQAYZooHI/+zCHRrgJ99MQHKHe1ZNvODrKHQ=="], - "@lowerdeck/emitter": ["@lowerdeck/emitter@1.0.4", "", {}, "sha512-eRoJnfF4zqe/O+QO+CuccPNXj6FNd6E6sEGvydB4JdQhAu/pJ0YMNp99WlDaTRGVoj1bpA43UwbnHCVl2RTOGA=="], + "@tiptap/extension-text-align": ["@tiptap/extension-text-align@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-4s0r+bovtH6yeGDUD+Ui8j5WOV5koB5P6AuzOMqoLwaFGRSkKf64ly6DXjjmjIgnYCLZN/XO6llaQKVVdvad2g=="], - "@lowerdeck/encryption": ["@lowerdeck/encryption@1.0.8", "", { "dependencies": { "@lowerdeck/base62": "^1.0.4", "@lowerdeck/id": "^1.0.8", "base-x": "^5.0.0" } }, "sha512-nnQ7eSw8unGkU0l1MhPqTlJx5JXpPaUzqaOPJ4lEBsKjjtGnDbApTeiX9rGWtc87X09RDJe+UdnhZbQZt2t4Gw=="], + "@tiptap/extension-text-style": ["@tiptap/extension-text-style@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-zyWW1a6W+kaXAn3wv2svJ1XuVMapujftvH7Xn2Q3QmKKiDkO+NiFkrGe8BhMopu8Im51nO3NylIgVA0X1mS1rQ=="], - "@lowerdeck/env": ["@lowerdeck/env@1.0.6", "", { "dependencies": { "@lowerdeck/validation": "^1.0.10" } }, "sha512-bEWuSj3I/pJ0D8hE1/Wf6XKcGWCCJfPI6UDW77IP/5Ye30JjrcT9Ehut/mcSENWEgXolltYivl7BB5BbAbDxNg=="], + "@tiptap/extension-typography": ["@tiptap/extension-typography@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-XpstIJ/hCK6+N87DdzjaYie1iH1gunbDK0UCsqsLemd8rMR/WAlF04M/yeJ6F2QtNzNh83bkoTxyNAHLDdUm2A=="], - "@lowerdeck/error": ["@lowerdeck/error@1.2.3", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.10" } }, "sha512-LAMJ9wsUQQ7xkIqbK457vE5ZPlhaijLjKYDKyLLBYFv6BWr9heGkb/4vuU0TEKyCkF2ReZFiAI7fRWJwm9aqbw=="], + "@tiptap/extension-underline": ["@tiptap/extension-underline@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-LzNXuy2jwR/y+ymoUqC72TiGzbOCjioIjsDu0MNYpHuHqTWPK5aV9Mh0nbZcYFy/7fPlV1q0W139EbJeYBZEAQ=="], - "@lowerdeck/event": ["@lowerdeck/event@1.0.3", "", { "dependencies": { "@lowerdeck/memo": "^1.0.4", "@lowerdeck/redis": "^1.0.5", "@lowerdeck/sentry": "^1.0.2", "p-queue": "^9.1.0" } }, "sha512-+Xfw+h6nVudZjdNjSSJbHMFdIdotdmKlWcJW7njz2QJzOW9tcXMEYNVsdbDgYj5VpMhHT28Yv+e2g9nWK/WV0A=="], + "@tiptap/extensions": ["@tiptap/extensions@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-HIsXX942w3nbxEQBlMAAR/aa6qiMBEP7CsSMxaxmTIVAmW35p6yUASw6GdV1u0o3lCZjXq2OSRMTskzIqi5uLg=="], - "@lowerdeck/execution-context": ["@lowerdeck/execution-context@1.1.1", "", { "dependencies": { "@lowerdeck/id": "^1.0.8", "@lowerdeck/sentry": "^1.0.2", "@opentelemetry/api": "^1.9.0" } }, "sha512-+Sm5FCCoGCEmF2LLD418h91HIBT47c2qZRgaD1UHfLxLvgsFvTdsRzruhJzs87WclqYEcx3wZV/T6Z761mdLlA=="], + "@tiptap/pm": ["@tiptap/pm@3.20.0", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.24.1", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-jn+2KnQZn+b+VXr8EFOJKsnjVNaA4diAEr6FOazupMt8W8ro1hfpYtZ25JL87Kao/WbMze55sd8M8BDXLUKu1A=="], - "@lowerdeck/forwarded-for": ["@lowerdeck/forwarded-for@1.0.4", "", {}, "sha512-8z9w6T44wigkNYplp09rf+2H27eLAJ/ZW7Gc1iX4xwb2+oZD0dKSO/il5jvIOhB6QcaclvhjDfAwz1QejlEuDA=="], + "@tiptap/react": ["@tiptap/react@3.20.0", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "fast-equals": "^5.3.3", "use-sync-external-store": "^1.4.0" }, "optionalDependencies": { "@tiptap/extension-bubble-menu": "^3.20.0", "@tiptap/extension-floating-menu": "^3.20.0" }, "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-jFLNzkmn18zqefJwPje0PPd9VhZ7Oy28YHiSvSc7YpBnQIbuN/HIxZ2lrOsKyEHta0WjRZjfU5X1pGxlbcGwOA=="], - "@lowerdeck/hash": ["@lowerdeck/hash@1.0.4", "", { "dependencies": { "@lowerdeck/base62": "^1.0.4" } }, "sha512-ERC0JhZO2uNNnrHG5n0qxXrFUesdszA1G1qGDf3ihjM2iRy7ELQ10WCX0sHz75GhR/OW+AXctFRfJN8VCCQjFw=="], + "@tiptap/starter-kit": ["@tiptap/starter-kit@3.20.0", "", { "dependencies": { "@tiptap/core": "^3.20.0", "@tiptap/extension-blockquote": "^3.20.0", "@tiptap/extension-bold": "^3.20.0", "@tiptap/extension-bullet-list": "^3.20.0", "@tiptap/extension-code": "^3.20.0", "@tiptap/extension-code-block": "^3.20.0", "@tiptap/extension-document": "^3.20.0", "@tiptap/extension-dropcursor": "^3.20.0", "@tiptap/extension-gapcursor": "^3.20.0", "@tiptap/extension-hard-break": "^3.20.0", "@tiptap/extension-heading": "^3.20.0", "@tiptap/extension-horizontal-rule": "^3.20.0", "@tiptap/extension-italic": "^3.20.0", "@tiptap/extension-link": "^3.20.0", "@tiptap/extension-list": "^3.20.0", "@tiptap/extension-list-item": "^3.20.0", "@tiptap/extension-list-keymap": "^3.20.0", "@tiptap/extension-ordered-list": "^3.20.0", "@tiptap/extension-paragraph": "^3.20.0", "@tiptap/extension-strike": "^3.20.0", "@tiptap/extension-text": "^3.20.0", "@tiptap/extension-underline": "^3.20.0", "@tiptap/extensions": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-W4+1re35pDNY/7rpXVg+OKo/Fa4Gfrn08Bq3E3fzlJw6gjE3tYU8dY9x9vC2rK9pd9NOp7Af11qCFDaWpohXkw=="], - "@lowerdeck/hono": ["@lowerdeck/hono@1.0.10", "", { "dependencies": { "@lowerdeck/error": "^1.2.3", "@lowerdeck/forwarded-for": "^1.0.4", "@lowerdeck/validation": "^1.0.10", "hono": "^4.5.5" } }, "sha512-sdGS9k+un6rhjn7yHj4WoT2atV3II3/koK4288p1CxImG2LmaXi1d8sLd7Hy2nYIhrNR3lYvRmdwx+qfKabOrg=="], + "@tiptap/suggestion": ["@tiptap/suggestion@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-C2bDamOCqcWbyB4Ogvk1pCUkbrnIMOsVYyt8sd1JsjZUA/QYTBWt8Bt/3venI1mx6ad47oCsU16KDQRKKfu+cA=="], - "@lowerdeck/id": ["@lowerdeck/id@1.0.8", "", { "dependencies": { "@lowerdeck/error": "^1.2.2", "@lowerdeck/hash": "^1.0.4", "nanoid": "^5.0.7", "short-uuid": "^5.2.0", "snowflake-uuid": "^1.0.0" } }, "sha512-0u8iDVzD+xvRr4ABec8SeJ47xLNz8sG3D3/IinN92VdLqxwewgyxzXRryArSdBbaa3PmyDpjFEdG0ifm0nptPw=="], + "@tiptap/y-tiptap": ["@tiptap/y-tiptap@3.0.3", "", { "dependencies": { "lib0": "^0.2.100" }, "peerDependencies": { "prosemirror-model": "^1.7.1", "prosemirror-state": "^1.2.3", "prosemirror-view": "^1.9.10", "y-protocols": "^1.0.1", "yjs": "^13.5.38" } }, "sha512-8UvuV4lTisCE9cMTc/X8kRyTn9edUO7Kball0I6wb17VwZSjNDfh/YKtP4O5vcPawEzFHQIvZGq/k1h37kAf0w=="], - "@lowerdeck/ip-info": ["@lowerdeck/ip-info@1.0.4", "", {}, "sha512-MDKlmMTNeZHX8itil0JHGMKEj0jeGuAMYHtS3P4waggKDkZ2CNRDu516cC0UwIV51iFN5xpS1WlAwtE5PmaUNQ=="], + "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], - "@lowerdeck/join-paths": ["@lowerdeck/join-paths@1.0.4", "", {}, "sha512-nLPDXdg6gsybw6WwtkjHOvBoQySMFsD7+/4ch52e5fLaJbkMbNXOyRfV+gjimGrfUNP7EA05SXtzuFJfIpsB0g=="], + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], - "@lowerdeck/lock": ["@lowerdeck/lock@1.0.6", "", { "dependencies": { "@lowerdeck/delay": "^1.0.4", "@lowerdeck/redis": "^1.0.6", "@types/bun": "^1.2.11", "ioredis": "^5.4.1", "redlock": "^5.0.0-beta.2", "superjson": "^2.2.5" } }, "sha512-nf8P6FuWgSQ+hQEVSBGXTPVvFxezoemUtMOXuWP9uVEbAxvtWIKA2SzQoo4XsS3sHHQ2BlCc/8sSCzUzsPPyEQ=="], + "@toon-format/toon": ["@toon-format/toon@2.1.0", "", {}, "sha512-JwWptdF5eOA0HaQxbKAzkpQtR4wSWTEfDlEy/y3/4okmOAX1qwnpLZMmtEWr+ncAhTTY1raCKH0kteHhSXnQqg=="], - "@lowerdeck/memo": ["@lowerdeck/memo@1.0.4", "", {}, "sha512-Fyhi14j1EocQeAjZ6sqeYZaydPlCt23P+CEv99QVPb46Y6n77RGrslbHE7HDPgV0f9CJi4UWxSbfhk+Spmmj5g=="], + "@tootallnate/once": ["@tootallnate/once@1.1.2", "", {}, "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="], - "@lowerdeck/once": ["@lowerdeck/once@1.0.4", "", {}, "sha512-na46nHHIVxO0Pc5Umm0T9CffI3rD7Z7+KSjODW543c1pLX/dmC9MG3X0QRp9wHQwcAF8c4Y3IOpTUMMdEN0EzA=="], + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], - "@lowerdeck/pagination": ["@lowerdeck/pagination@1.0.8", "", { "dependencies": { "@lowerdeck/base62": "^1.0.4", "@lowerdeck/error": "^1.2.3", "@lowerdeck/validation": "^1.0.10" } }, "sha512-Fp9RbLcXKc5+U956LpMhUOl3uS1Yf+rfG1A9L6JhAi7XQsj+LyVSJ911yQQ+68m3+PKfFLHNisLnrWO2rIr8LA=="], + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], - "@lowerdeck/programmable-promise": ["@lowerdeck/programmable-promise@1.0.6", "", {}, "sha512-37ZWpHNSbjQgrHoGEcgFVa72D5db7tPFwc5glECFBszy+LN9/8uC5zzEHg7t9+0QIlnz2ET+wFmmckxXlWwa7Q=="], + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], - "@lowerdeck/proxy": ["@lowerdeck/proxy@1.0.4", "", {}, "sha512-29S6bDAtkeD0Iww6RiMiwok4eCPWLfoyJW9XIfJxcpvRhQov/GIKtaix9W9lkZvqlt7u78X4LkLmWFc6QA/BjA=="], + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], - "@lowerdeck/queue": ["@lowerdeck/queue@1.0.11", "", { "dependencies": { "@lowerdeck/delay": "^1.0.4", "@lowerdeck/execution-context": "^1.1.1", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/redis": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/telemetry": "^1.1.1", "bullmq": "^5.66.0", "superjson": "^2.2.6" } }, "sha512-3pBrV89EcjBYsx6JGif3nl8GHFJ3N+09S0rLnKXJ/o3zQVHKh/yXbQbzgJosZo1g/lBunl3o9NAG+JkHjZ/Gxw=="], + "@types/body-parser": ["@types/body-parser@1.19.6", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="], - "@lowerdeck/random-number": ["@lowerdeck/random-number@1.0.4", "", {}, "sha512-tbKPWkS//DaYwdDIvFhpMXALbGL870UJt9IZVdEZ5aG/2VfkHgqO4bmL80HbSPbSjQ2WznBvBWrQQFhIlkA28g=="], + "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], - "@lowerdeck/redis": ["@lowerdeck/redis@1.0.6", "", { "dependencies": { "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/random-number": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "ioredis": "^5.8.2", "p-queue": "^9.0.1", "redis": "^5.10.0" } }, "sha512-o6pD9ynMoFUyVa846Dhnp46Cb9L/Ktv+o2O2q43XYRh+7boQc/01hV9zHv/HG/7Tk5ZqDk2uBDdCpQ4/xMMDVg=="], + "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], - "@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.4", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.3", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-d4tZsXDp7hxNLVU191Qkhry+dZUveUh7aejDBevAPB05fT+O5IyDgpo5E0TOpSh2/7zq1Ww6wMdIJXUchptYkA=="], + "@types/chai-subset": ["@types/chai-subset@1.3.6", "", { "peerDependencies": { "@types/chai": "<5.2.0" } }, "sha512-m8lERkkQj+uek18hXOZuec3W/fCRTrU4hrnXjH3qhHy96ytuPaPiWGgu7sJb7tZxZonO75vYAjCvpe/e4VUwRw=="], - "@lowerdeck/rpc-server": ["@lowerdeck/rpc-server@1.0.11", "", { "dependencies": { "@lowerdeck/error": "^1.2.3", "@lowerdeck/execution-context": "^1.1.1", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", "@lowerdeck/telemetry": "^1.1.1", "@lowerdeck/validation": "^1.0.10", "cookie": "^1.1.1" } }, "sha512-huTBKKqXyEaaHuVnI4KDyZuMmCefeTDMhAiEkOsiQnpZ0taRbcdU7ogybu8Et1g87xtIcBVsMepxFho8xsYDxw=="], + "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], - "@lowerdeck/sentry": ["@lowerdeck/sentry@1.0.2", "", { "dependencies": { "@sentry/core": "^10.32.1" } }, "sha512-HYNcxpC1ZOEGn8+wxoTNU0Y9e3tVHE5Wb0W9etRCu589uv3VD+1InMyLypBZdgnrJI5KRpPdJcMHm+aj7WEjig=="], + "@types/cors": ["@types/cors@2.8.19", "", { "dependencies": { "@types/node": "*" } }, "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg=="], - "@lowerdeck/serialize": ["@lowerdeck/serialize@1.0.4", "", { "dependencies": { "superjson": "^2.2.5" } }, "sha512-IlCBKiIHma9Pd+HBG9mwrLN9ySi4/Z/8fi40YBGS4X5iu5uhl9wfkr5ttTOrBiwOFhSc+WWCD8J7cO9hs9yE2w=="], + "@types/d3": ["@types/d3@7.4.3", "", { "dependencies": { "@types/d3-array": "*", "@types/d3-axis": "*", "@types/d3-brush": "*", "@types/d3-chord": "*", "@types/d3-color": "*", "@types/d3-contour": "*", "@types/d3-delaunay": "*", "@types/d3-dispatch": "*", "@types/d3-drag": "*", "@types/d3-dsv": "*", "@types/d3-ease": "*", "@types/d3-fetch": "*", "@types/d3-force": "*", "@types/d3-format": "*", "@types/d3-geo": "*", "@types/d3-hierarchy": "*", "@types/d3-interpolate": "*", "@types/d3-path": "*", "@types/d3-polygon": "*", "@types/d3-quadtree": "*", "@types/d3-random": "*", "@types/d3-scale": "*", "@types/d3-scale-chromatic": "*", "@types/d3-selection": "*", "@types/d3-shape": "*", "@types/d3-time": "*", "@types/d3-time-format": "*", "@types/d3-timer": "*", "@types/d3-transition": "*", "@types/d3-zoom": "*" } }, "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww=="], - "@lowerdeck/service": ["@lowerdeck/service@1.0.7", "", { "dependencies": { "@lowerdeck/telemetry": "^1.0.1" } }, "sha512-2PTeifxeNhOe6kkPjlod6LEmkYTVrd6vzrbl89A6uUKocPBdxTzF3m1/Jf3VtwpZVG5bwnDmmKwbmDnFmKbMuw=="], + "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], - "@lowerdeck/shadow-id": ["@lowerdeck/shadow-id@1.0.7", "", { "dependencies": { "@lowerdeck/base62": "^1.0.4" } }, "sha512-xmMWAtTeSH8doR9F7YCWTE6q+wCECJJMV9RS9ccRgLO8aMnQmnBdp6piSrfWQn1UNDOFzE5NO/i5USqvwPb5IQ=="], + "@types/d3-axis": ["@types/d3-axis@3.0.6", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw=="], - "@lowerdeck/slugify": ["@lowerdeck/slugify@1.0.6", "", { "dependencies": { "@lowerdeck/id": "^1.0.8", "slugify": "^1.6.6" } }, "sha512-HJA+Eq29zTbnQXkp0aUUvkL0zm7tCpk6BjMaXD8QQ7OmxeWCiqSdsHzEyfqrMdpExYLi7Roc4lyY5toKAcbI9g=="], + "@types/d3-brush": ["@types/d3-brush@3.0.6", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A=="], - "@lowerdeck/snowflake": ["@lowerdeck/snowflake@1.0.2", "", {}, "sha512-Wcv5unEv0ZvPT2146NzaqRAadbPQgpYzL5VeVy8MttLZ5PgfSSr225iTz+cNQoVeP9SxkeOXgTHtm6ISABAdfw=="], + "@types/d3-chord": ["@types/d3-chord@3.0.6", "", {}, "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg=="], - "@lowerdeck/telemetry": ["@lowerdeck/telemetry@1.1.1", "", { "dependencies": { "@lowerdeck/execution-context": "^1.1.0", "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^2.5.0", "@opentelemetry/core": "^2.5.0", "@opentelemetry/exporter-trace-otlp-http": "^0.211.0", "@opentelemetry/instrumentation": "^0.212.0", "@opentelemetry/resources": "^2.5.0", "@opentelemetry/sdk-trace-base": "^2.5.0", "@opentelemetry/sdk-trace-node": "^2.5.0", "@opentelemetry/semantic-conventions": "^1.39.0", "@prisma/instrumentation": "^7.4.1" } }, "sha512-IOcVHadI9VftSn845hFtWPU8k+tk2k0/hey0PrZsddJorY1D485ODapq5x2bdCmL8B46ZBMSduU0NH+d/S5lgg=="], + "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], - "@lowerdeck/testing-tools": ["@lowerdeck/testing-tools@1.0.1", "", { "dependencies": { "vite": "^5.4.1" }, "peerDependencies": { "vitest": ">=3.0.0" } }, "sha512-udR6he9ewXBJwwmhGH5RnaWKG9KEY/UXGJsfMJb+6MOBVYq5mlYAvHnGdauDksFAElfs/vDSIy9q6rblUfBTog=="], + "@types/d3-contour": ["@types/d3-contour@3.0.6", "", { "dependencies": { "@types/d3-array": "*", "@types/geojson": "*" } }, "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg=="], - "@lowerdeck/tokens": ["@lowerdeck/tokens@1.0.5", "", { "dependencies": { "@lowerdeck/base62": "^1.0.4", "@lowerdeck/memo": "^1.0.4" } }, "sha512-eqt+/UcXBYP83RYHOrBRm2Iw508Jl1+s7M//H82aNazFnxUkMpJncwwmZKRcHP21eYEzlXrbkJwoV/JNXP/Jhg=="], + "@types/d3-delaunay": ["@types/d3-delaunay@6.0.4", "", {}, "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw=="], - "@lowerdeck/unique": ["@lowerdeck/unique@1.0.4", "", {}, "sha512-cJh8XG0NdijeVoWY9WDnHZtwXzL846jJSrXmu3YynJZog2+DWHwyG1VZpT3eT0Txn/aYDwQyErT8gUtRyff4jA=="], + "@types/d3-dispatch": ["@types/d3-dispatch@3.0.7", "", {}, "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA=="], - "@lowerdeck/validation": ["@lowerdeck/validation@1.0.10", "", {}, "sha512-M6F1+SRuxUKkgR9qPi3EhO5+WUXckAxhRnNYCtp1CbFl0HZSV+IIOdvfVq29RRn7TIObB2/rYvqJQ38tSHq6Pw=="], + "@types/d3-drag": ["@types/d3-drag@3.0.7", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ=="], - "@mapbox/node-pre-gyp": ["@mapbox/node-pre-gyp@2.0.3", "", { "dependencies": { "consola": "^3.2.3", "detect-libc": "^2.0.0", "https-proxy-agent": "^7.0.5", "node-fetch": "^2.6.7", "nopt": "^8.0.0", "semver": "^7.5.3", "tar": "^7.4.0" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" } }, "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg=="], + "@types/d3-dsv": ["@types/d3-dsv@3.0.7", "", {}, "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g=="], - "@marijn/find-cluster-break": ["@marijn/find-cluster-break@1.0.2", "", {}, "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g=="], + "@types/d3-ease": ["@types/d3-ease@3.0.2", "", {}, "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="], - "@marsidev/react-turnstile": ["@marsidev/react-turnstile@1.5.0", "", { "peerDependencies": { "react": "^17.0.2 || ^18.0.0 || ^19.0", "react-dom": "^17.0.2 || ^18.0.0 || ^19.0" } }, "sha512-Ph6mcj8u9WBDsBO7s9jKPsyRDz1sBPBJwrk+Ngx09vFInvKsQ6U6kW5amEcGq4dHOreB6DgFrOJk7/fy318YlQ=="], + "@types/d3-fetch": ["@types/d3-fetch@3.0.7", "", { "dependencies": { "@types/d3-dsv": "*" } }, "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA=="], - "@mermaid-js/parser": ["@mermaid-js/parser@1.1.1", "", { "dependencies": { "@chevrotain/types": "~11.1.1" } }, "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw=="], + "@types/d3-force": ["@types/d3-force@3.0.10", "", {}, "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw=="], - "@metorial-cargo/db": ["@metorial-cargo/db@workspace:src/systems/cargo/db"], + "@types/d3-format": ["@types/d3-format@3.0.4", "", {}, "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g=="], - "@metorial-cargo/list-utils": ["@metorial-cargo/list-utils@workspace:src/systems/cargo/packages/list-utils"], + "@types/d3-geo": ["@types/d3-geo@3.1.0", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ=="], - "@metorial-cargo/module-doc": ["@metorial-cargo/module-doc@workspace:src/systems/cargo/modules/doc"], + "@types/d3-hierarchy": ["@types/d3-hierarchy@3.1.7", "", {}, "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg=="], - "@metorial-cargo/module-file": ["@metorial-cargo/module-file@workspace:src/systems/cargo/modules/file"], + "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="], - "@metorial-cargo/module-search": ["@metorial-cargo/module-search@workspace:src/systems/cargo/modules/search"], + "@types/d3-path": ["@types/d3-path@3.1.1", "", {}, "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="], - "@metorial-cargo/module-skill": ["@metorial-cargo/module-skill@workspace:src/systems/cargo/modules/skill"], + "@types/d3-polygon": ["@types/d3-polygon@3.0.2", "", {}, "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA=="], - "@metorial-cargo/module-store": ["@metorial-cargo/module-store@workspace:src/systems/cargo/modules/store"], + "@types/d3-quadtree": ["@types/d3-quadtree@3.0.6", "", {}, "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg=="], - "@metorial-cargo/service": ["@metorial-cargo/service@workspace:src/systems/cargo/service"], + "@types/d3-random": ["@types/d3-random@3.0.3", "", {}, "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ=="], - "@metorial-io/data-hooks": ["@metorial-io/data-hooks@1.0.1", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.0.10", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/validation": "^1.0.4", "@metorial-io/ui": "^1.0.0", "@metorial/util-endpoint": "^1.0.0", "fast-deep-equal": "^3.1.3", "formik": "^2.4.9", "react": "^19.2.3", "sonner": "^2.0.7", "yup": "^1.7.1" } }, "sha512-weAOBBCdjgweQHY+aYKsLxi6ZCA0JsYlX5sfJzePfN5/xXMijaXKcp2nzfyxB6V1caDtbNRHX7gG4N9aADcRmQ=="], + "@types/d3-scale": ["@types/d3-scale@4.0.9", "", { "dependencies": { "@types/d3-time": "*" } }, "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw=="], - "@metorial-io/layout": ["@metorial-io/layout@1.0.1", "", { "dependencies": { "@metorial-io/data-hooks": "latest", "@metorial-io/ui": "latest", "@remixicon/react": "^4.8.0", "clsx": "^2.1.1", "framer-motion": "^12.24.9", "react": "^19.2.3", "react-dom": "^19.2.3", "react-router-dom": "^7.11.0", "react-use": "^17.6.0", "styled-components": "^6.2.0" } }, "sha512-pBymQeAa4bKhNEtWJ2pNtmZOj5rIGBprF1hfVGtYtgZi0CVHu+e92mN/dTJgfo9ygsh9cTX1KLHlRCquVoD2qQ=="], + "@types/d3-scale-chromatic": ["@types/d3-scale-chromatic@3.1.0", "", {}, "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ=="], - "@metorial-io/pages": ["@metorial-io/pages@1.0.0", "", { "dependencies": { "react": "^19.1.0", "react-wrap-balancer": "^1.1.1", "styled-components": "^6.1.17" } }, "sha512-EWK3W1vGmvNljyfTGc1Y9an+AHhNYT9gfJ6Agc5U30EsiwDvqfajiuRtrw1V4E3G8NaQhCpPMUblER4CGzFGKg=="], + "@types/d3-selection": ["@types/d3-selection@3.0.11", "", {}, "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="], - "@metorial-io/ui": ["@metorial-io/ui@1.0.0", "", { "dependencies": { "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@looped/hooks": "^0.1.3", "@lowerdeck/memo": "^1.0.4", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-toggle-group": "^1.1.11", "@radix-ui/react-tooltip": "^1.2.8", "@radix-ui/react-visually-hidden": "^1.2.4", "@remixicon/react": "^4.8.0", "clsx": "^2.1.1", "copy-to-clipboard": "^3.3.3", "date-fns": "^4.1.0", "framer-motion": "^12.24.4", "react": "^19.2.3", "react-dom": "^19.2.3", "react-feather": "^2.0.10", "react-textarea-autosize": "^8.5.9", "react-use": "^17.6.0", "react-wrap-balancer": "^1.1.1", "shleemy": "^1.2.2", "sonner": "^2.0.7", "styled-components": "^6.2.0", "use-delayed": "^0.1.0" } }, "sha512-JQzEoGzaWPPEhUZY1sIhVNII6xHhnrGsPNE98LCnM9fw37khdvLtI31X9bNJSfM5FvZSIwdzZfGjEAWQxHVn2Q=="], + "@types/d3-shape": ["@types/d3-shape@3.1.8", "", { "dependencies": { "@types/d3-path": "*" } }, "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w=="], - "@metorial-io/ui-product": ["@metorial-io/ui-product@1.0.0", "", { "dependencies": { "@metorial-io/ui": "latest", "@remixicon/react": "^4.8.0", "copy-to-clipboard": "^3.3.3", "react": "^19.2.3", "react-dom": "^19.2.3", "react-router-dom": "^7.11.0", "styled-components": "^6.2.0" } }, "sha512-lEhM6JNxdRGyf9B73DGV82bn+81G6DrzDTHOigd9LFb8vWmgme2NRjXH0dW7tb3igwdCuJb/DyjgCzcQ+eD0SQ=="], + "@types/d3-time": ["@types/d3-time@3.0.4", "", {}, "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="], - "@metorial-platform-systems/ares-client": ["@metorial-platform-systems/ares-client@workspace:src/systems/_clients/ares"], + "@types/d3-time-format": ["@types/d3-time-format@4.0.3", "", {}, "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg=="], - "@metorial-platform-systems/cargo-client": ["@metorial-platform-systems/cargo-client@workspace:src/systems/_clients/cargo"], + "@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="], - "@metorial-platform-systems/forge-client": ["@metorial-platform-systems/forge-client@workspace:src/systems/_clients/forge"], + "@types/d3-transition": ["@types/d3-transition@3.0.9", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg=="], - "@metorial-platform-systems/function-bay-client": ["@metorial-platform-systems/function-bay-client@workspace:src/systems/_clients/function-bay"], + "@types/d3-zoom": ["@types/d3-zoom@3.0.8", "", { "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw=="], - "@metorial-platform-systems/object-storage-client": ["@metorial-platform-systems/object-storage-client@workspace:src/systems/_clients/object-storage"], + "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], - "@metorial-platform-systems/origin-client": ["@metorial-platform-systems/origin-client@workspace:src/systems/_clients/origin-client"], + "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], - "@metorial-platform-systems/relay-client": ["@metorial-platform-systems/relay-client@workspace:src/systems/_clients/relay"], + "@types/diff": ["@types/diff@7.0.2", "", {}, "sha512-JSWRMozjFKsGlEjiiKajUjIJVKuKdE3oVy2DNtK+fUo8q82nhFZ2CPQwicAIkXrofahDXrWJ7mjelvZphMS98Q=="], - "@metorial-platform-systems/shuttle-client": ["@metorial-platform-systems/shuttle-client@workspace:src/systems/_clients/shuttle"], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - "@metorial-platform-systems/signal-client": ["@metorial-platform-systems/signal-client@workspace:src/systems/_clients/signal"], + "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], - "@metorial-platform-systems/slates-client": ["@metorial-platform-systems/slates-client@workspace:src/systems/_clients/slates"], + "@types/express": ["@types/express@5.0.6", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "^2" } }, "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA=="], - "@metorial-platform-systems/subspace-client": ["@metorial-platform-systems/subspace-client@workspace:src/systems/_clients/subspace"], + "@types/express-serve-static-core": ["@types/express-serve-static-core@5.1.1", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A=="], - "@metorial-platform-systems/synthesis-client": ["@metorial-platform-systems/synthesis-client@workspace:src/systems/_clients/synthesis"], + "@types/fs-extra": ["@types/fs-extra@11.0.4", "", { "dependencies": { "@types/jsonfile": "*", "@types/node": "*" } }, "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ=="], - "@metorial-platform-systems/voyager-client": ["@metorial-platform-systems/voyager-client@workspace:src/systems/_clients/voyager"], + "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], - "@metorial-services/forge-client": ["@metorial-services/forge-client@1.0.4", "", { "dependencies": { "@lowerdeck/rpc-client": "latest" } }, "sha512-riTCFBoCd72LuBBuXZI7MmXd+C04QdxvsPAAgR46Ps07z7qdAOV3g3ir86XiZme+QVDcCLK3wcO3UH6oxfoTrA=="], + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], - "@metorial-services/registry-client": ["@metorial-services/registry-client@1.0.0", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.3", "@lowerdeck/rpc-server": "^1.0.6", "@lowerdeck/validation": "^1.0.4" } }, "sha512-6A3tb7rtxex7GlygF6W832p8zoW5I1tkEzEpGzlhjA7wWIwPKVIlYF2XxKhua3z2+kXRKUW6WKjKwc+P81TIdw=="], + "@types/hoist-non-react-statics": ["@types/hoist-non-react-statics@3.3.7", "", { "dependencies": { "hoist-non-react-statics": "^3.3.0" }, "peerDependencies": { "@types/react": "*" } }, "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g=="], - "@metorial-services/scout-client": ["@metorial-services/scout-client@1.0.0", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.2" } }, "sha512-iZUt3ot1libD7mDh/9K5O/oYmuZGWxaxEIuTypzz0UQY0Ra4BFWwtfB88VwQCew58Fz6S2wf6iDsFLsq+/2s7w=="], + "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], - "@metorial-services/slates-registry-client": ["@metorial-services/slates-registry-client@workspace:src/systems/slates/clients/registry"], + "@types/isomorphic-fetch": ["@types/isomorphic-fetch@0.0.39", "", {}, "sha512-I0gou/ZdA1vMG7t7gMzL7VYu2xAKU78rW9U1l10MI0nn77pEHq3tQqHQ8hMmXdMpBlkxZOorjI4sO594Z3kKJw=="], - "@metorial-services/slates-registry-internal-client": ["@metorial-services/slates-registry-internal-client@workspace:src/systems/slates/clients/registry-internal"], + "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], - "@metorial-services/voyager-client": ["@metorial-services/voyager-client@1.0.1", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.2" } }, "sha512-KBMgQr4/Hb3YOyMmSVbXZle1N1tVPqJr1fdG0DSGCJEAUHebUUZjgOf4pJTjh/BGUFLgEEJ65gDSDPd9V/VjWw=="], + "@types/js-cookie": ["@types/js-cookie@2.2.7", "", {}, "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA=="], - "@metorial-subspace/app-controller": ["@metorial-subspace/app-controller@workspace:src/systems/subspace/apps/controller"], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@metorial-subspace/app-public": ["@metorial-subspace/app-public@workspace:src/systems/subspace/apps/public"], + "@types/jsonfile": ["@types/jsonfile@6.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ=="], - "@metorial-subspace/app-worker": ["@metorial-subspace/app-worker@workspace:src/systems/subspace/apps/worker"], + "@types/linkify-it": ["@types/linkify-it@3.0.5", "", {}, "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw=="], - "@metorial-subspace/conduit": ["@metorial-subspace/conduit@workspace:src/systems/subspace/packages/conduit"], + "@types/lodash": ["@types/lodash@4.17.24", "", {}, "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ=="], - "@metorial-subspace/connection-utils": ["@metorial-subspace/connection-utils@workspace:src/systems/subspace/packages/connection-utils"], + "@types/lodash.throttle": ["@types/lodash.throttle@4.1.9", "", { "dependencies": { "@types/lodash": "*" } }, "sha512-PCPVfpfueguWZQB7pJQK890F2scYKoDUL3iM522AptHWn7d5NQmeS/LTEHIcLr5PaTzl3dK2Z0xSUHHTHwaL5g=="], - "@metorial-subspace/db": ["@metorial-subspace/db@workspace:src/systems/subspace/db"], + "@types/markdown-it": ["@types/markdown-it@13.0.9", "", { "dependencies": { "@types/linkify-it": "^3", "@types/mdurl": "^1" } }, "sha512-1XPwR0+MgXLWfTn9gCsZ55AHOKW1WN+P9vr0PaQh5aerR9LLQXUbjfEAFhjmEmyoYFWAyuN2Mqkn40MZ4ukjBw=="], - "@metorial-subspace/generator": ["@metorial-subspace/generator@workspace:src/systems/subspace/packages/generator"], + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], - "@metorial-subspace/list-utils": ["@metorial-subspace/list-utils@workspace:src/systems/subspace/packages/list-utils"], + "@types/mdurl": ["@types/mdurl@1.0.5", "", {}, "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA=="], - "@metorial-subspace/module-agent": ["@metorial-subspace/module-agent@workspace:src/systems/subspace/modules/agent"], + "@types/minimatch": ["@types/minimatch@5.1.2", "", {}, "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA=="], - "@metorial-subspace/module-auth": ["@metorial-subspace/module-auth@workspace:src/systems/subspace/modules/auth"], + "@types/mocha": ["@types/mocha@10.0.10", "", {}, "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q=="], - "@metorial-subspace/module-callback": ["@metorial-subspace/module-callback@workspace:src/systems/subspace/modules/callback"], + "@types/mongoose": ["@types/mongoose@5.11.97", "", { "dependencies": { "mongoose": "*" } }, "sha512-cqwOVYT3qXyLiGw7ueU2kX9noE8DPGRY6z8eUxudhXY8NZ7DMKYAxyZkLSevGfhCX3dO/AoX5/SO9lAzfjon0Q=="], - "@metorial-subspace/module-catalog": ["@metorial-subspace/module-catalog@workspace:src/systems/subspace/modules/catalog"], + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@metorial-subspace/module-connection": ["@metorial-subspace/module-connection@workspace:src/systems/subspace/modules/connection"], + "@types/mysql": ["@types/mysql@2.15.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA=="], - "@metorial-subspace/module-custom-provider": ["@metorial-subspace/module-custom-provider@workspace:src/systems/subspace/modules/custom-provider"], + "@types/node": ["@types/node@22.19.13", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw=="], - "@metorial-subspace/module-deployment": ["@metorial-subspace/module-deployment@workspace:src/systems/subspace/modules/deployment"], + "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], - "@metorial-subspace/module-identity": ["@metorial-subspace/module-identity@workspace:src/systems/subspace/modules/identity"], + "@types/nodemailer": ["@types/nodemailer@7.0.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g=="], - "@metorial-subspace/module-integration": ["@metorial-subspace/module-integration@workspace:src/systems/subspace/modules/integration"], + "@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="], - "@metorial-subspace/module-provider-internal": ["@metorial-subspace/module-provider-internal@workspace:src/systems/subspace/modules/provider-internal"], + "@types/pg": ["@types/pg@8.20.0", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow=="], - "@metorial-subspace/module-search": ["@metorial-subspace/module-search@workspace:src/systems/subspace/modules/search"], + "@types/pg-pool": ["@types/pg-pool@2.0.7", "", { "dependencies": { "@types/pg": "*" } }, "sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng=="], - "@metorial-subspace/module-session": ["@metorial-subspace/module-session@workspace:src/systems/subspace/modules/session"], + "@types/prismjs": ["@types/prismjs@1.26.6", "", {}, "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw=="], - "@metorial-subspace/module-skills": ["@metorial-subspace/module-skills@workspace:src/systems/subspace/modules/skills"], + "@types/qs": ["@types/qs@6.14.0", "", {}, "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ=="], - "@metorial-subspace/module-tenant": ["@metorial-subspace/module-tenant@workspace:src/systems/subspace/modules/tenant"], + "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], - "@metorial-subspace/presenters": ["@metorial-subspace/presenters@workspace:src/systems/subspace/packages/presenters"], + "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], - "@metorial-subspace/provider": ["@metorial-subspace/provider@workspace:src/systems/subspace/provider-backends/provider-manager"], + "@types/react-avatar-editor": ["@types/react-avatar-editor@13.0.4", "", { "dependencies": { "@types/react": "*" } }, "sha512-WQjmacEOoEYQb6CkAXYspmtruCPXFzLjEI92zV27yqveGBRkh7Quo5oYMvAgaEeqpXsGEr/wzXcdSTaH982Wtg=="], - "@metorial-subspace/provider-native": ["@metorial-subspace/provider-native@workspace:src/systems/subspace/provider-backends/provider-native"], + "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], - "@metorial-subspace/provider-shuttle": ["@metorial-subspace/provider-shuttle@workspace:src/systems/subspace/provider-backends/provider-shuttle"], + "@types/react-helmet": ["@types/react-helmet@6.1.11", "", { "dependencies": { "@types/react": "*" } }, "sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g=="], - "@metorial-subspace/provider-slates": ["@metorial-subspace/provider-slates@workspace:src/systems/subspace/provider-backends/provider-slates"], + "@types/readable-stream": ["@types/readable-stream@4.0.23", "", { "dependencies": { "@types/node": "*" } }, "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig=="], - "@metorial-subspace/provider-utils": ["@metorial-subspace/provider-utils@workspace:src/systems/subspace/provider-backends/provider-utils"], + "@types/resolve": ["@types/resolve@1.17.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw=="], - "@metorial-subspace/redis-url": ["@metorial-subspace/redis-url@workspace:src/systems/subspace/packages/redis-url"], + "@types/semver": ["@types/semver@7.7.1", "", {}, "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA=="], - "@metorial-subspace/retry-utils": ["@metorial-subspace/retry-utils@workspace:src/systems/subspace/packages/retry-utils"], + "@types/send": ["@types/send@1.2.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ=="], - "@metorial-subspace/store": ["@metorial-subspace/store@workspace:src/systems/subspace/packages/store"], + "@types/serve-static": ["@types/serve-static@2.2.0", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*" } }, "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ=="], - "@metorial-subspace/tsconfig": ["@metorial-subspace/tsconfig@workspace:src/systems/subspace/packages/tsconfig"], + "@types/stylis": ["@types/stylis@4.2.7", "", {}, "sha512-VgDNokpBoKF+wrdvhAAfS55OMQpL6QRglwTwNC3kIgBrzZxA4WsFj+2eLfEA/uMUDzBcEhYmjSbwQakn/i3ajA=="], - "@metorial/api-auth": ["@metorial/api-auth@workspace:src/backend/apis/auth"], + "@types/tar-stream": ["@types/tar-stream@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-921gW0+g29mCJX0fRvqeHzBlE/XclDaAG0Ousy1LCghsOhvaKacDeRGEVzQP9IPfKn8Vysy7FEXAIxycpc/CMg=="], - "@metorial/api-connection": ["@metorial/api-connection@workspace:src/backend/apis/connection"], + "@types/tedious": ["@types/tedious@4.0.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw=="], - "@metorial/api-core": ["@metorial/api-core@workspace:src/backend/apis/core"], + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], - "@metorial/api-custom-portal": ["@metorial/api-custom-portal@workspace:src/backend/apis/custom-portal"], + "@types/ua-parser-js": ["@types/ua-parser-js@0.7.39", "", {}, "sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg=="], - "@metorial/api-files": ["@metorial/api-files@workspace:src/backend/apis/files"], + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "@metorial/api-keys": ["@metorial/api-keys@workspace:src/packages/server/api-keys"], + "@types/unzipper": ["@types/unzipper@0.10.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-D25im2zjyMCcgL9ag6N46+wbtJBnXIr7SI4zHf9eJD2Dw2tEB5e+p5MYkrxKIVRscs5QV0EhtU9rgXSPx90oJg=="], - "@metorial/api-oauth": ["@metorial/api-oauth@workspace:src/backend/apis/oauth"], + "@types/use-sync-external-store": ["@types/use-sync-external-store@0.0.6", "", {}, "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg=="], - "@metorial/app-api": ["@metorial/app-api@workspace:src/backend/apps/api"], + "@types/vscode": ["@types/vscode@1.110.0", "", {}, "sha512-AGuxUEpU4F4mfuQjxPPaQVyuOMhs+VT/xRok1jiHVBubHK7lBRvCuOMZG0LKUwxncrPorJ5qq/uil3IdZBd5lA=="], - "@metorial/app-dashboard": ["@metorial/app-dashboard@workspace:src/frontend/apps/dashboard"], + "@types/webidl-conversions": ["@types/webidl-conversions@7.0.3", "", {}, "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="], - "@metorial/ares": ["@metorial/ares@workspace:src/systems/ares/service"], + "@types/whatwg-url": ["@types/whatwg-url@11.0.5", "", { "dependencies": { "@types/webidl-conversions": "*" } }, "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ=="], - "@metorial/auth": ["@metorial/auth@workspace:src/backend/auth"], + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], - "@metorial/bearer": ["@metorial/bearer@workspace:src/packages/server/bearer"], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.56.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/type-utils": "8.56.1", "@typescript-eslint/utils": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.56.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A=="], - "@metorial/cache": ["@metorial/cache@workspace:src/packages/backend/cache"], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.56.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg=="], - "@metorial/chart": ["@metorial/chart@workspace:src/packages/frontend/chart"], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.56.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.56.1", "@typescript-eslint/types": "^8.56.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ=="], - "@metorial/code": ["@metorial/code@workspace:src/packages/frontend/code"], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1" } }, "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w=="], - "@metorial/code-bucket-service-generated": ["@metorial/code-bucket-service-generated@workspace:src/systems/origin/apps/code-bucket"], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.56.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ=="], - "@metorial/code-editor": ["@metorial/code-editor@workspace:src/packages/frontend/code-editor"], + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/utils": "8.56.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg=="], - "@metorial/code-workspace": ["@metorial/code-workspace@workspace:src/systems/origin/apps/code-workspace"], + "@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], - "@metorial/config": ["@metorial/config@workspace:src/backend/config"], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.56.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.56.1", "@typescript-eslint/tsconfig-utils": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg=="], - "@metorial/consumer-auth": ["@metorial/consumer-auth@workspace:src/packages/backend/consumer-auth"], + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.56.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA=="], - "@metorial/consumer-sdk": ["@metorial/consumer-sdk@workspace:clients/metorial-consumer"], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], - "@metorial/context": ["@metorial/context@workspace:src/packages/server/context"], + "@typespec/ts-http-runtime": ["@typespec/ts-http-runtime@0.3.5", "", { "dependencies": { "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "tslib": "^2.6.2" } }, "sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw=="], - "@metorial/control": ["@metorial/control@workspace:src/tooling/control"], + "@uiw/codemirror-extensions-basic-setup": ["@uiw/codemirror-extensions-basic-setup@4.25.7", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/lint": "^6.0.0", "@codemirror/search": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-tPV/AGjF4yM22D5mnyH7EuYBkWO05wF5Y4x3lmQJo6LuHmhjh0RQsVDjqeIgNOkXT3UO9OdkL4dzxw465/JZVg=="], - "@metorial/cron": ["@metorial/cron@workspace:src/packages/backend/cron"], + "@uiw/codemirror-themes": ["@uiw/codemirror-themes@4.25.7", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-Rcx1XiQiMOJzk/efVuZioCv3VuswUb2CPmiM1NIXY5N4vEMmWLY3N8T4/WkPzJ8ZZuk7o3OH2VI5bj7729fDYg=="], - "@metorial/dashboard-sdk": ["@metorial/dashboard-sdk@workspace:clients/metorial-dashboard"], + "@uiw/react-codemirror": ["@uiw/react-codemirror@4.25.7", "", { "dependencies": { "@babel/runtime": "^7.18.6", "@codemirror/commands": "^6.1.0", "@codemirror/state": "^6.1.1", "@codemirror/theme-one-dark": "^6.0.0", "@uiw/codemirror-extensions-basic-setup": "4.25.7", "codemirror": "^6.0.0" }, "peerDependencies": { "@codemirror/view": ">=6.0.0", "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-s/EbEe0dFANWEgfLbfdIrrOGv0R7M1XhkKG3ShroBeH6uP9pVNQy81YHOLRCSVcytTp9zAWRNfXR/+XxZTvV7w=="], - "@metorial/data-hooks": ["@metorial/data-hooks@workspace:src/packages/frontend/data-hooks"], + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], - "@metorial/db": ["@metorial/db@workspace:src/backend/db"], + "@upsetjs/venn.js": ["@upsetjs/venn.js@2.0.0", "", { "optionalDependencies": { "d3-selection": "^3.0.0", "d3-transition": "^3.0.1" } }, "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw=="], - "@metorial/debug": ["@metorial/debug@workspace:src/packages/shared/debug"], + "@vercel/ncc": ["@vercel/ncc@0.38.4", "", { "bin": { "ncc": "dist/ncc/cli.js" } }, "sha512-8LwjnlP39s08C08J5NstzriPvW1SP8Zfpp1BvC2sI35kPeZnHfxVkCwu4/+Wodgnd60UtT1n8K8zw+Mp7J9JmQ=="], - "@metorial/dynamic-component": ["@metorial/dynamic-component@workspace:src/packages/frontend/dynamic-component"], + "@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="], - "@metorial/event": ["@metorial/event@workspace:src/packages/backend/event"], + "@visual-json/core": ["@visual-json/core@0.4.0", "", {}, "sha512-T/HvRIp7r6SehxVnO+akV72NLv2OMBEoQdYTFbpwMi6uU2TaXQOpIOHBG4r9XBz7OqC2e8aedOwal/NtqtzyCg=="], - "@metorial/explorer": ["@metorial/explorer@workspace:src/frontend/apps/explorer"], + "@visual-json/react": ["@visual-json/react@0.4.0", "", { "dependencies": { "@visual-json/core": "0.4.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-qiDrXI7wu9VoTE0TaLoJp7kwRj8SQTpkS/wkts5sBPA8078zdrIKc+0u0Y8wAXGYd3udw9dNfD4kmpO48OEwXQ=="], - "@metorial/fabric": ["@metorial/fabric@workspace:src/packages/backend/fabric"], + "@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], - "@metorial/fetch": ["@metorial/fetch@1.0.0", "", { "dependencies": { "cross-fetch": "^4.1.0" } }, "sha512-5R+FqW0tnSWyir6hEkGkYGnr9+urUX7zYtjVFmQhzFB253M/UwiewDiEqGAzbIm3+qwS2c/fbk0BwSxwSSz9PA=="], + "@vitest/coverage-v8": ["@vitest/coverage-v8@4.1.2", "", { "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.2", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magicast": "^0.5.2", "obug": "^2.1.1", "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "@vitest/browser": "4.1.2", "vitest": "4.1.2" }, "optionalPeers": ["@vitest/browser"] }, "sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg=="], - "@metorial/forge": ["@metorial/forge@workspace:src/systems/forge/service"], + "@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], - "@metorial/frontend-config": ["@metorial/frontend-config@workspace:src/frontend/config"], + "@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], - "@metorial/function-bay": ["@metorial/function-bay@workspace:src/systems/function-bay/service"], + "@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], - "@metorial/generated": ["@metorial/generated@1.0.0", "", { "dependencies": { "@metorial/util-endpoint": "^1.0.0", "@metorial/util-resource-mapper": "^1.0.0", "jose": "^5.9.6" } }, "sha512-qlCVP8KFcjzgD3qZk2CPT8P6B2EcEXlFEcDDuSz432pgfoXRxdc+TFL5seT5LAgLFP1guGPdSuvlj3iVh7tiww=="], + "@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], - "@metorial/id": ["@metorial/id@workspace:src/packages/shared/id"], + "@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], - "@metorial/internal-clients": ["@metorial/internal-clients@workspace:src/backend/internal-clients"], + "@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], - "@metorial/layout": ["@metorial/layout@workspace:src/frontend/layout"], + "@vitest/ui": ["@vitest/ui@4.1.2", "", { "dependencies": { "@vitest/utils": "4.1.2", "fflate": "^0.8.2", "flatted": "^3.4.2", "pathe": "^2.0.3", "sirv": "^3.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "vitest": "4.1.2" } }, "sha512-/irhyeAcKS2u6Zokagf9tqZJ0t8S6kMZq4ZG9BHZv7I+fkRrYfQX4w7geYeC2r6obThz39PDxvXQzZX+qXqGeg=="], - "@metorial/lock": ["@metorial/lock@workspace:src/packages/backend/lock"], + "@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], - "@metorial/logging": ["@metorial/logging@workspace:src/packages/backend/logging"], + "@vscode/test-cli": ["@vscode/test-cli@0.0.11", "", { "dependencies": { "@types/mocha": "^10.0.2", "c8": "^9.1.0", "chokidar": "^3.5.3", "enhanced-resolve": "^5.15.0", "glob": "^10.3.10", "minimatch": "^9.0.3", "mocha": "^11.1.0", "supports-color": "^9.4.0", "yargs": "^17.7.2" }, "bin": { "vscode-test": "out/bin.mjs" } }, "sha512-qO332yvzFqGhBMJrp6TdwbIydiHgCtxXc2Nl6M58mbH/Z+0CyLR76Jzv4YWPEthhrARprzCRJUqzFvTHFhTj7Q=="], - "@metorial/markdown": ["@metorial/markdown@workspace:src/packages/frontend/markdown"], + "@vscode/test-electron": ["@vscode/test-electron@2.5.2", "", { "dependencies": { "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.5", "jszip": "^3.10.1", "ora": "^8.1.0", "semver": "^7.6.2" } }, "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg=="], - "@metorial/mcp": ["@metorial/mcp@workspace:src/systems/shuttle/sdk/packages/mcp"], + "@xmldom/is-dom-node": ["@xmldom/is-dom-node@1.0.1", "", {}, "sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q=="], - "@metorial/mcp-server": ["@metorial/mcp-server@workspace:src/systems/shuttle/sdk/packages/mcp-server"], + "@xmldom/xmldom": ["@xmldom/xmldom@0.9.8", "", {}, "sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A=="], - "@metorial/mcp-transport-memory": ["@metorial/mcp-transport-memory@workspace:src/systems/shuttle/sdk/packages/mcp-transport-memory"], + "@xobotyi/scrollbar-width": ["@xobotyi/scrollbar-width@1.9.5", "", {}, "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ=="], - "@metorial/mcp-utils": ["@metorial/mcp-utils@workspace:src/packages/mcp/mcp-utils"], + "@yr/monotone-cubic-spline": ["@yr/monotone-cubic-spline@1.0.3", "", {}, "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA=="], - "@metorial/microfrontend": ["@metorial/microfrontend@workspace:src/packages/frontend/microfrontend"], + "abbrev": ["abbrev@3.0.1", "", {}, "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg=="], - "@metorial/module-access": ["@metorial/module-access@workspace:src/backend/modules/access"], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], - "@metorial/module-assistant": ["@metorial/module-assistant@workspace:src/backend/modules/assistant"], + "abort-controller-x": ["abort-controller-x@0.4.3", "", {}, "sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA=="], - "@metorial/module-community": ["@metorial/module-community@workspace:src/backend/modules/community"], + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], - "@metorial/module-consumer": ["@metorial/module-consumer@workspace:src/backend/modules/consumer"], + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], - "@metorial/module-email": ["@metorial/module-email@workspace:src/backend/modules/email"], + "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], - "@metorial/module-event": ["@metorial/module-event@workspace:src/backend/modules/event"], + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - "@metorial/module-file": ["@metorial/module-file@workspace:src/backend/modules/file"], + "acorn-walk": ["acorn-walk@8.3.5", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw=="], - "@metorial/module-flags": ["@metorial/module-flags@workspace:src/backend/modules/flags"], + "agent-base": ["agent-base@9.0.0", "", {}, "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA=="], - "@metorial/module-machine-access": ["@metorial/module-machine-access@workspace:src/backend/modules/machine-access"], + "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], - "@metorial/module-magic": ["@metorial/module-magic@workspace:src/backend/modules/magic"], + "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], - "@metorial/module-markdown": ["@metorial/module-markdown@workspace:src/backend/modules/markdown"], + "ai": ["ai@6.0.177", "", { "dependencies": { "@ai-sdk/gateway": "3.0.112", "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-1xQtbeWwNcLyyM86ixZhkKvT+WRXc1lvarIKqPVtsyn8F9NDikwUMBqYu+aQKDgMht50SMXh4qboYuU8MeHZZA=="], - "@metorial/module-organization": ["@metorial/module-organization@workspace:src/backend/modules/organization"], + "ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - "@metorial/module-protect": ["@metorial/module-protect@workspace:src/backend/modules/protect"], + "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], - "@metorial/module-search": ["@metorial/module-search@workspace:src/backend/modules/search"], + "algoliasearch": ["algoliasearch@5.52.1", "", { "dependencies": { "@algolia/abtesting": "1.18.1", "@algolia/client-abtesting": "5.52.1", "@algolia/client-analytics": "5.52.1", "@algolia/client-common": "5.52.1", "@algolia/client-insights": "5.52.1", "@algolia/client-personalization": "5.52.1", "@algolia/client-query-suggestions": "5.52.1", "@algolia/client-search": "5.52.1", "@algolia/ingestion": "1.52.1", "@algolia/monitoring": "1.52.1", "@algolia/recommend": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-fHA8+kXTbjagw3jkLiaS7KKrH8qe2DyOsiUhGlN4cdT77PEsfqXZl7ewDk1hsg+pJnPlnE50XtLxjR91iJOpmg=="], - "@metorial/module-subspace": ["@metorial/module-subspace@workspace:src/backend/modules/subspace"], + "anser": ["anser@2.3.5", "", {}, "sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ=="], - "@metorial/module-usage": ["@metorial/module-usage@workspace:src/backend/modules/usage"], + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - "@metorial/module-user": ["@metorial/module-user@workspace:src/backend/modules/user"], + "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], - "@metorial/multi-region": ["@metorial/multi-region@workspace:src/backend/multi-region"], + "ansi-to-react": ["ansi-to-react@6.2.6", "", { "dependencies": { "anser": "^2.3.2", "escape-carriage": "^1.3.1", "linkify-it": "^3.0.3" }, "peerDependencies": { "react": "^16.3.2 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.3.2 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Eqi0iaMK5OZ3jsVFxWvU2B74UZBnGuHlkflKMX6wTOeH+luy9KE2O0gUkc2PxhIP1R4IO0xohv62UMFInQOSeg=="], - "@metorial/origin": ["@metorial/origin@workspace:src/systems/origin/apps/service"], + "ansis": ["ansis@3.17.0", "", {}, "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg=="], - "@metorial/pages": ["@metorial/pages@workspace:src/packages/frontend/pages"], + "any-base": ["any-base@1.1.0", "", {}, "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="], - "@metorial/presenter": ["@metorial/presenter@workspace:src/packages/server/presenter"], + "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], - "@metorial/queue": ["@metorial/queue@workspace:src/packages/backend/queue"], + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], - "@metorial/redis": ["@metorial/redis@workspace:src/packages/backend/redis"], + "apexcharts": ["apexcharts@4.7.0", "", { "dependencies": { "@svgdotjs/svg.draggable.js": "^3.0.4", "@svgdotjs/svg.filter.js": "^3.0.8", "@svgdotjs/svg.js": "^3.2.4", "@svgdotjs/svg.resize.js": "^2.0.2", "@svgdotjs/svg.select.js": "^4.0.1", "@yr/monotone-cubic-spline": "^1.0.3" } }, "sha512-iZSrrBGvVlL+nt2B1NpqfDuBZ9jX61X9I2+XV0hlYXHtTwhwLTHDKGXjNXAgFBDLuvSYCB/rq2nPWVPRv2DrGA=="], - "@metorial/relay": ["@metorial/relay@workspace:src/systems/relay/service"], + "app-root-path": ["app-root-path@3.1.0", "", {}, "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA=="], - "@metorial/rest": ["@metorial/rest@workspace:src/packages/server/rest"], + "aproba": ["aproba@2.1.0", "", {}, "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew=="], - "@metorial/root": ["@metorial/root@workspace:src/systems/shuttle/sdk"], + "are-we-there-yet": ["are-we-there-yet@3.0.1", "", { "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" } }, "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg=="], - "@metorial/rpc": ["@metorial/rpc@workspace:src/packages/backend/rpc"], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "@metorial/scene-assistant": ["@metorial/scene-assistant@workspace:src/frontend/scenes/assistant"], + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], - "@metorial/scene-docs": ["@metorial/scene-docs@workspace:src/frontend/scenes/docs"], + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], - "@metorial/scene-skills": ["@metorial/scene-skills@workspace:src/frontend/scenes/skills"], + "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], - "@metorial/shuttle": ["@metorial/shuttle@workspace:src/systems/shuttle/service"], + "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], - "@metorial/signal": ["@metorial/signal@workspace:src/systems/signal/service"], + "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], - "@metorial/slates": ["@metorial/slates@workspace:src/systems/slates/apps/hub"], + "ast-v8-to-istanbul": ["ast-v8-to-istanbul@1.0.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", "js-tokens": "^10.0.0" } }, "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg=="], - "@metorial/slates-registry": ["@metorial/slates-registry@workspace:src/systems/slates/apps/registry"], + "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], - "@metorial/state": ["@metorial/state@workspace:src/frontend/state"], + "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], - "@metorial/storage": ["@metorial/storage@workspace:src/packages/frontend/storage"], + "async-ratelimiter": ["async-ratelimiter@1.6.4", "", {}, "sha512-N+13neNNogoYr6Vte76RrxDhM03/oT1Qzxe+klK+0st4UuhUD+oAPyeTe8gGOPfqvkd3cenPIc3KRKv0aLv46w=="], - "@metorial/subspace-dev": ["@metorial/subspace-dev@workspace:src/systems/subspace/apps/dev"], + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "@metorial/synthesis": ["@metorial/synthesis@workspace:src/systems/synthesis/service"], + "asyncro": ["asyncro@3.0.0", "", {}, "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg=="], - "@metorial/tsconfig": ["@metorial/tsconfig@workspace:src/packages/shared/tsconfig"], + "attr-accept": ["attr-accept@2.2.5", "", {}, "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ=="], - "@metorial/ui": ["@metorial/ui@workspace:src/packages/frontend/ui"], + "autoprefixer": ["autoprefixer@10.4.27", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-lite": "^1.0.30001774", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA=="], - "@metorial/ui-product": ["@metorial/ui-product@workspace:src/packages/frontend/ui-product"], + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "@metorial/unified-id": ["@metorial/unified-id@workspace:src/packages/mcp/unified-id"], + "aws-ssl-profiles": ["aws-ssl-profiles@1.1.2", "", {}, "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g=="], - "@metorial/util-async-iterator": ["@metorial/util-async-iterator@1.0.0", "", {}, "sha512-Q7R+eB6E/eMirxowFvFi+EXnkFOn6EWr1SBwsMLCknu5qIZ/Kgm3yiqyaaisHm1vl7zki5+gIxYST9LxPjdrTA=="], + "axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], - "@metorial/util-endpoint": ["@metorial/util-endpoint@1.0.1", "", { "dependencies": { "@metorial/util-async-iterator": "^1.0.0", "@types/qs": "^6.14.0", "cross-fetch": "^4.1.0", "qs": "^6.13.1" } }, "sha512-LqRt1EX5lx+/zYiDwlOHBg9NXqkARl+XQWquaJihbGc8+TPVCxw8yWEh/n6mwPU7ydG3QiAqlEM1cfPMRFpTbQ=="], + "axios-mock-adapter": ["axios-mock-adapter@1.22.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "is-buffer": "^2.0.5" }, "peerDependencies": { "axios": ">= 0.17.0" } }, "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw=="], - "@metorial/util-resource-mapper": ["@metorial/util-resource-mapper@1.0.0", "", {}, "sha512-CUPXTqEJXyYBYIDaUXvMQywimC43Q5DTycXcXEpT+cxSVngKswqe3F1Zih0CLFyaLHeSGqXRRaSOBsZebSv+iw=="], + "b4a": ["b4a@1.8.0", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg=="], - "@metorial/util-websocket": ["@metorial/util-websocket@1.0.0", "", { "dependencies": { "mitt": "^3.0.1", "ws": "^8.18.2" } }, "sha512-o0qRqbrjlmpjuKGyND4WDDCKBBRPztV8VkaX1HFSnbbKl/Jftz8CPtKnKmLQ38O4XPWPwl7Y7+9OPW7nqDg7UA=="], + "babel-plugin-macros": ["babel-plugin-macros@3.1.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", "resolve": "^1.19.0" } }, "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg=="], - "@metorial/voyager": ["@metorial/voyager@workspace:src/systems/voyager/service"], + "babel-plugin-polyfill-corejs2": ["babel-plugin-polyfill-corejs2@0.4.17", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w=="], - "@mixmark-io/domino": ["@mixmark-io/domino@2.2.0", "", {}, "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw=="], + "babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.14.2", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.8", "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g=="], - "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.27.1", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA=="], + "babel-plugin-polyfill-regenerator": ["babel-plugin-polyfill-regenerator@0.6.8", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg=="], - "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.4.6", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g=="], + "babel-plugin-styled-components": ["babel-plugin-styled-components@2.1.4", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", "@babel/plugin-syntax-jsx": "^7.22.5", "lodash": "^4.17.21", "picomatch": "^2.3.1" }, "peerDependencies": { "styled-components": ">= 2" } }, "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g=="], - "@mongodb-js/zstd": ["@mongodb-js/zstd@7.0.0", "", { "dependencies": { "node-addon-api": "^8.5.0", "prebuild-install": "^7.1.3" } }, "sha512-mQ2s0pYYiav+tzCDR05Zptem8Ey2v8s11lri5RKGhTtL4COVCvVCk5vtyRYNT+9L8qSfyOqqefF9UtnW8mC5jA=="], + "babel-plugin-transform-async-to-promises": ["babel-plugin-transform-async-to-promises@0.8.18", "", {}, "sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw=="], - "@mrleebo/prisma-ast": ["@mrleebo/prisma-ast@0.13.1", "", { "dependencies": { "chevrotain": "^10.5.0", "lilconfig": "^2.1.0" } }, "sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw=="], + "babel-plugin-transform-replace-expressions": ["babel-plugin-transform-replace-expressions@0.2.0", "", { "dependencies": { "@babel/parser": "^7.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA=="], - "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw=="], + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], - "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw=="], + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "@msgpackr-extract/msgpackr-extract-linux-arm": ["@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3", "", { "os": "linux", "cpu": "arm" }, "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw=="], + "bare-events": ["bare-events@2.8.2", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ=="], - "@msgpackr-extract/msgpackr-extract-linux-arm64": ["@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg=="], + "bare-fs": ["bare-fs@4.7.1", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw=="], - "@msgpackr-extract/msgpackr-extract-linux-x64": ["@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg=="], + "bare-os": ["bare-os@3.8.7", "", {}, "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w=="], - "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="], + "bare-path": ["bare-path@3.0.0", "", { "dependencies": { "bare-os": "^3.0.1" } }, "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw=="], - "@napi-rs/canvas": ["@napi-rs/canvas@0.1.100", "", { "optionalDependencies": { "@napi-rs/canvas-android-arm64": "0.1.100", "@napi-rs/canvas-darwin-arm64": "0.1.100", "@napi-rs/canvas-darwin-x64": "0.1.100", "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.100", "@napi-rs/canvas-linux-arm64-gnu": "0.1.100", "@napi-rs/canvas-linux-arm64-musl": "0.1.100", "@napi-rs/canvas-linux-riscv64-gnu": "0.1.100", "@napi-rs/canvas-linux-x64-gnu": "0.1.100", "@napi-rs/canvas-linux-x64-musl": "0.1.100", "@napi-rs/canvas-win32-arm64-msvc": "0.1.100", "@napi-rs/canvas-win32-x64-msvc": "0.1.100" } }, "sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA=="], + "bare-stream": ["bare-stream@2.13.0", "", { "dependencies": { "streamx": "^2.25.0", "teex": "^1.0.1" }, "peerDependencies": { "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-abort-controller", "bare-buffer", "bare-events"] }, "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA=="], - "@napi-rs/canvas-android-arm64": ["@napi-rs/canvas-android-arm64@0.1.100", "", { "os": "android", "cpu": "arm64" }, "sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ=="], + "bare-url": ["bare-url@2.4.0", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA=="], - "@napi-rs/canvas-darwin-arm64": ["@napi-rs/canvas-darwin-arm64@0.1.100", "", { "os": "darwin", "cpu": "arm64" }, "sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A=="], + "base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], - "@napi-rs/canvas-darwin-x64": ["@napi-rs/canvas-darwin-x64@0.1.100", "", { "os": "darwin", "cpu": "x64" }, "sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw=="], + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], - "@napi-rs/canvas-linux-arm-gnueabihf": ["@napi-rs/canvas-linux-arm-gnueabihf@0.1.100", "", { "os": "linux", "cpu": "arm" }, "sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.0", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA=="], - "@napi-rs/canvas-linux-arm64-gnu": ["@napi-rs/canvas-linux-arm64-gnu@0.1.100", "", { "os": "linux", "cpu": "arm64" }, "sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw=="], + "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], - "@napi-rs/canvas-linux-arm64-musl": ["@napi-rs/canvas-linux-arm64-musl@0.1.100", "", { "os": "linux", "cpu": "arm64" }, "sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ=="], + "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], - "@napi-rs/canvas-linux-riscv64-gnu": ["@napi-rs/canvas-linux-riscv64-gnu@0.1.100", "", { "os": "linux", "cpu": "none" }, "sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw=="], + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], - "@napi-rs/canvas-linux-x64-gnu": ["@napi-rs/canvas-linux-x64-gnu@0.1.100", "", { "os": "linux", "cpu": "x64" }, "sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg=="], + "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], - "@napi-rs/canvas-linux-x64-musl": ["@napi-rs/canvas-linux-x64-musl@0.1.100", "", { "os": "linux", "cpu": "x64" }, "sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA=="], + "bl": ["bl@6.1.6", "", { "dependencies": { "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", "inherits": "^2.0.4", "readable-stream": "^4.2.0" } }, "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg=="], - "@napi-rs/canvas-win32-arm64-msvc": ["@napi-rs/canvas-win32-arm64-msvc@0.1.100", "", { "os": "win32", "cpu": "arm64" }, "sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw=="], + "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], - "@napi-rs/canvas-win32-x64-msvc": ["@napi-rs/canvas-win32-x64-msvc@0.1.100", "", { "os": "win32", "cpu": "x64" }, "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA=="], + "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], - "@nodable/entities": ["@nodable/entities@2.1.0", "", {}, "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA=="], + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + "brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "@npmcli/fs": ["@npmcli/fs@1.1.1", "", { "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" } }, "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ=="], + "brotli-size": ["brotli-size@4.0.0", "", { "dependencies": { "duplexer": "0.1.1" } }, "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA=="], - "@npmcli/move-file": ["@npmcli/move-file@1.1.2", "", { "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" } }, "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg=="], + "browser-stdout": ["browser-stdout@1.3.1", "", {}, "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="], - "@octokit/auth-app": ["@octokit/auth-app@8.2.0", "", { "dependencies": { "@octokit/auth-oauth-app": "^9.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "toad-cache": "^3.7.0", "universal-github-app-jwt": "^2.2.0", "universal-user-agent": "^7.0.0" } }, "sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g=="], + "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], - "@octokit/auth-oauth-app": ["@octokit/auth-oauth-app@9.0.3", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg=="], + "bson": ["bson@6.10.4", "", {}, "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng=="], - "@octokit/auth-oauth-device": ["@octokit/auth-oauth-device@8.0.3", "", { "dependencies": { "@octokit/oauth-methods": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw=="], + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - "@octokit/auth-oauth-user": ["@octokit/auth-oauth-user@6.0.2", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.3", "@octokit/oauth-methods": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A=="], + "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], - "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], - "@octokit/core": ["@octokit/core@7.0.6", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.3", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q=="], + "builtin-modules": ["builtin-modules@3.3.0", "", {}, "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw=="], - "@octokit/endpoint": ["@octokit/endpoint@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag=="], + "bullmq": ["bullmq@5.70.1", "", { "dependencies": { "cron-parser": "4.9.0", "ioredis": "5.9.3", "msgpackr": "1.11.5", "node-abort-controller": "3.1.1", "semver": "7.7.4", "tslib": "2.8.1", "uuid": "11.1.0" } }, "sha512-HjfGHfICkAClrFL0Y07qNbWcmiOCv1l+nusupXUjrvTPuDEyPEJ23MP0lUwUs/QEy1a3pWt/P/sCsSZ1RjRK+w=="], - "@octokit/graphql": ["@octokit/graphql@9.0.3", "", { "dependencies": { "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA=="], + "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], - "@octokit/oauth-authorization-url": ["@octokit/oauth-authorization-url@8.0.0", "", {}, "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ=="], + "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], - "@octokit/oauth-methods": ["@octokit/oauth-methods@6.0.2", "", { "dependencies": { "@octokit/oauth-authorization-url": "^8.0.0", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0" } }, "sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng=="], + "bundle-require": ["bundle-require@5.1.0", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.18" } }, "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA=="], - "@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - "@octokit/request": ["@octokit/request@10.0.8", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" } }, "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw=="], + "c12": ["c12@3.1.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.6.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw=="], - "@octokit/request-error": ["@octokit/request-error@7.1.0", "", { "dependencies": { "@octokit/types": "^16.0.0" } }, "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw=="], + "c8": ["c8@9.1.0", "", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", "foreground-child": "^3.1.1", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.1.6", "test-exclude": "^6.0.0", "v8-to-istanbul": "^9.0.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1" }, "bin": { "c8": "bin/c8.js" } }, "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg=="], - "@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], - "@openharness/core": ["@openharness/core@0.6.2", "", { "dependencies": { "@ai-sdk/mcp": "^1.0.21", "ai": "^6.0.97", "zod": "^4.3.6" } }, "sha512-532Wqdj+D3or7EsiwsQBJc667muV07BCWlqBzA78mKYkdi71RqiiPtsb/9QhBNy9eW9zWkGTTzNTV7rh8b36SQ=="], + "cacache": ["cacache@15.3.0", "", { "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "glob": "^7.1.4", "infer-owner": "^1.0.4", "lru-cache": "^6.0.0", "minipass": "^3.1.1", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.2", "mkdirp": "^1.0.3", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^8.0.1", "tar": "^6.0.2", "unique-filename": "^1.1.1" } }, "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ=="], - "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], - "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.212.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg=="], + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@2.6.0", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q=="], + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "@opentelemetry/core": ["@opentelemetry/core@2.6.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg=="], + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "@opentelemetry/exporter-metrics-otlp-grpc": ["@opentelemetry/exporter-metrics-otlp-grpc@0.57.1", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/exporter-metrics-otlp-http": "0.57.1", "@opentelemetry/otlp-exporter-base": "0.57.1", "@opentelemetry/otlp-grpc-exporter-base": "0.57.1", "@opentelemetry/otlp-transformer": "0.57.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-8B7k5q4AUldbfvubcHApg1XQaio/cO/VUWsM5PSaRP2fsjGNwbn2ih04J3gLD+AmgslvyuDcA2SZiDXEKwAxtQ=="], + "camel-case": ["camel-case@4.1.2", "", { "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw=="], - "@opentelemetry/exporter-metrics-otlp-http": ["@opentelemetry/exporter-metrics-otlp-http@0.57.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-exporter-base": "0.57.1", "@opentelemetry/otlp-transformer": "0.57.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-jpKYVZY7fdwTdy+eAy/Mp9DZMaQpj7caMzlo3QqQDSJx5FZEY6zWzgcKvDvF6h+gdHE7LgUjaPOvJVUs354jJg=="], + "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - "@opentelemetry/exporter-trace-otlp-http": ["@opentelemetry/exporter-trace-otlp-http@0.211.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/otlp-exporter-base": "0.211.0", "@opentelemetry/otlp-transformer": "0.211.0", "@opentelemetry/resources": "2.5.0", "@opentelemetry/sdk-trace-base": "2.5.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-F1Rv3JeMkgS//xdVjbQMrI3+26e5SXC7vXA6trx8SWEA0OUhw4JHB+qeHtH0fJn46eFItrYbL5m8j4qi9Sfaxw=="], + "camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="], - "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.212.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.212.0", "import-in-the-middle": "^2.0.6", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg=="], + "caniuse-api": ["caniuse-api@3.0.0", "", { "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" } }, "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="], - "@opentelemetry/instrumentation-amqplib": ["@opentelemetry/instrumentation-amqplib@0.60.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-q/B2IvoVXRm1M00MvhnzpMN6rKYOszPXVsALi6u0ss4AYHe+TidZEtLW9N1ZhrobI1dSriHnBqqtAOZVAv07sg=="], + "caniuse-lite": ["caniuse-lite@1.0.30001776", "", {}, "sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw=="], - "@opentelemetry/instrumentation-connect": ["@opentelemetry/instrumentation-connect@0.56.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.38" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-PKp+sSZ7AfzMvGgO3VCyo1inwNu+q7A1k9X88WK4PQ+S6Hp7eFk8pie+sWHDTaARovmqq5V2osav3lQej2B0nw=="], + "case-anything": ["case-anything@2.1.13", "", {}, "sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng=="], - "@opentelemetry/instrumentation-dataloader": ["@opentelemetry/instrumentation-dataloader@0.30.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-MXHP2Q38cd2OhzEBKAIXUi9uBlPEYzF6BNJbyjUXBQ6kLaf93kRC41vNMIz0Nl5mnuwK7fDvKT+/lpx7BXRwdg=="], + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], - "@opentelemetry/instrumentation-express": ["@opentelemetry/instrumentation-express@0.61.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Xdmqo9RZuZlL29Flg8QdwrrX7eW1CZ7wFQPKHyXljNymgKhN1MCsYuqQ/7uxavhSKwAl7WxkTzKhnqpUApLMvQ=="], + "chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], - "@opentelemetry/instrumentation-fs": ["@opentelemetry/instrumentation-fs@0.32.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-koR6apx0g0wX6RRiPpjA4AFQUQUbXrK16kq4/SZjVp7u5cffJhNkY4TnITxcGA4acGSPYAfx3NHRIv4Khn1axQ=="], + "chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], - "@opentelemetry/instrumentation-generic-pool": ["@opentelemetry/instrumentation-generic-pool@0.56.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-fg+Jffs6fqrf0uQS0hom7qBFKsbtpBiBl8+Vkc63Gx8xh6pVh+FhagmiO6oM0m3vyb683t1lP7yGYq22SiDnqg=="], + "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], - "@opentelemetry/instrumentation-graphql": ["@opentelemetry/instrumentation-graphql@0.61.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pUiVASv6nh2XrerTvlbVHh7vKFzscpgwiQ/xvnZuAIzQ5lRjWVdRPUuXbvZJ/Yq79QsE81TZdJ7z9YsXiss1ew=="], + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], - "@opentelemetry/instrumentation-hapi": ["@opentelemetry/instrumentation-hapi@0.59.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-33wa4mEr+9+ztwdgLor1SeBu4Opz4IsmpcLETXAd3VmBrOjez8uQtrsOhPCa5Vhbm5gzDlMYTgFRLQzf8/YHFA=="], + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], - "@opentelemetry/instrumentation-http": ["@opentelemetry/instrumentation-http@0.213.0", "", { "dependencies": { "@opentelemetry/core": "2.6.0", "@opentelemetry/instrumentation": "0.213.0", "@opentelemetry/semantic-conventions": "^1.29.0", "forwarded-parse": "2.1.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-B978Xsm5XEPGhm1P07grDoaOFLHapJPkOG9h016cJsyWWxmiLnPu2M/4Nrm7UCkHSiLnkXgC+zVGUAIahy8EEA=="], + "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], - "@opentelemetry/instrumentation-ioredis": ["@opentelemetry/instrumentation-ioredis@0.61.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/redis-common": "^0.38.2", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-hsHDadUtAFbws1YSDc1XW0svGFKiUbqv2td1Cby+UAiwvojm1NyBo/taifH0t8CuFZ0x/2SDm0iuTwrM5pnVOg=="], + "chardet": ["chardet@2.1.1", "", {}, "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ=="], - "@opentelemetry/instrumentation-kafkajs": ["@opentelemetry/instrumentation-kafkajs@0.22.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.30.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-wJU4IBQMUikdJAcTChLFqK5lo+flo7pahqd8DSLv7uMxsdOdAHj6RzKYAm8pPfUS6ItKYutYyuicwKaFwQKsoA=="], + "check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], - "@opentelemetry/instrumentation-knex": ["@opentelemetry/instrumentation-knex@0.57.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-vMCSh8kolEm5rRsc+FZeTZymWmIJwc40hjIKnXH4O0Dv/gAkJJIRXCsPX5cPbe0c0j/34+PsENd0HqKruwhVYw=="], + "chevrotain": ["chevrotain@10.5.0", "", { "dependencies": { "@chevrotain/cst-dts-gen": "10.5.0", "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "@chevrotain/utils": "10.5.0", "lodash": "4.17.21", "regexp-to-ast": "0.5.0" } }, "sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A=="], - "@opentelemetry/instrumentation-koa": ["@opentelemetry/instrumentation-koa@0.61.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.36.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0" } }, "sha512-lvrfWe9ShK/D2X4brmx8ZqqeWPfRl8xekU0FCn7C1dHm5k6+rTOOi36+4fnaHAP8lig9Ux6XQ1D4RNIpPCt1WQ=="], + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - "@opentelemetry/instrumentation-lru-memoizer": ["@opentelemetry/instrumentation-lru-memoizer@0.57.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-cEqpUocSKJfwDtLYTTJehRLWzkZ2eoePCxfVIgGkGkb83fMB71O+y4MvRHJPbeV2bdoWdOVrl8uO0+EynWhTEA=="], + "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], - "@opentelemetry/instrumentation-mongodb": ["@opentelemetry/instrumentation-mongodb@0.66.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-d7m9QnAY+4TCWI4q1QRkfrc6fo/92VwssaB1DzQfXNRvu51b78P+HJlWP7Qg6N6nkwdb9faMZNBCZJfftmszkw=="], + "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], - "@opentelemetry/instrumentation-mongoose": ["@opentelemetry/instrumentation-mongoose@0.59.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-6/jWU+c1NgznkVLDU/2y0bXV2nJo3o9FWZ9mZ9nN6T/JBNRoMnVXZl2FdBmgH+a5MwaWLs5kmRJTP5oUVGIkPw=="], + "cjs-module-lexer": ["cjs-module-lexer@2.2.0", "", {}, "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ=="], - "@opentelemetry/instrumentation-mysql": ["@opentelemetry/instrumentation-mysql@0.59.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@types/mysql": "2.15.27" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-r+V/Fh0sm7Ga8/zk/TI5H5FQRAjwr0RrpfPf8kNIehlsKf12XnvIaZi8ViZkpX0gyPEpLXqzqWD6QHlgObgzZw=="], + "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], - "@opentelemetry/instrumentation-mysql2": ["@opentelemetry/instrumentation-mysql2@0.59.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@opentelemetry/sql-common": "^0.41.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-n9/xrVCRBfG9egVbffnlU1uhr+HX0vF4GgtAB/Bvm48wpFgRidqD8msBMiym1kRYzmpWvJqTxNT47u1MkgBEdw=="], + "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], - "@opentelemetry/instrumentation-pg": ["@opentelemetry/instrumentation-pg@0.65.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.34.0", "@opentelemetry/sql-common": "^0.41.2", "@types/pg": "8.15.6", "@types/pg-pool": "2.0.7" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-W0zpHEIEuyZ8zvb3njaX9AAbHgPYOsSWVOoWmv1sjVRSF6ZpBqtlxBWbU+6hhq1TFWBeWJOXZ8nZS/PUFpLJYQ=="], + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], - "@opentelemetry/instrumentation-redis": ["@opentelemetry/instrumentation-redis@0.61.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/redis-common": "^0.38.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-JnPexA034/0UJRsvH96B0erQoNOqKJZjE2ZRSw9hiTSC23LzE0nJE/u6D+xqOhgUhRnhhcPHq4MdYtmUdYTF+Q=="], + "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], - "@opentelemetry/instrumentation-tedious": ["@opentelemetry/instrumentation-tedious@0.32.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@types/tedious": "^4.0.14" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BQS6gG8RJ1foEqfEZ+wxoqlwfCAzb1ZVG0ad8Gfe4x8T658HJCLGLd4E4NaoQd8EvPfLqOXgzGaE/2U4ytDSWA=="], + "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], - "@opentelemetry/instrumentation-undici": ["@opentelemetry/instrumentation-undici@0.23.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/semantic-conventions": "^1.24.0" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0" } }, "sha512-LL0VySzKVR2cJSFVZaTYpZl1XTpBGnfzoQPe2W7McS2267ldsaEIqtQY6VXs2KCXN0poFjze5110PIpxHDaDGg=="], + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], - "@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.211.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/otlp-transformer": "0.211.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-bp1+63V8WPV+bRI9EQG6E9YID1LIHYSZVbp7f+44g9tRzCq+rtw/o4fpL5PC31adcUsFiz/oN0MdLISSrZDdrg=="], + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], - "@opentelemetry/otlp-grpc-exporter-base": ["@opentelemetry/otlp-grpc-exporter-base@0.57.1", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-exporter-base": "0.57.1", "@opentelemetry/otlp-transformer": "0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-wWflmkDhH/3wf6yEqPmzmqA6r+A8+LQABfIVZC0jDGtWVJj6eCWcGHU41UxupMbbsgjZRLYtWDilaCHOjmR7gg=="], + "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], - "@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.211.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.211.0", "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0", "@opentelemetry/sdk-logs": "0.211.0", "@opentelemetry/sdk-metrics": "2.5.0", "@opentelemetry/sdk-trace-base": "2.5.0", "protobufjs": "8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-julhCJ9dXwkOg9svuuYqqjXLhVaUgyUvO2hWbTxwjvLXX2rG3VtAaB0SzxMnGTuoCZizBT7Xqqm2V7+ggrfCXA=="], + "codemirror": ["codemirror@6.0.2", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/lint": "^6.0.0", "@codemirror/search": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw=="], - "@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.38.2", "", {}, "sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA=="], + "color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], - "@opentelemetry/resources": ["@opentelemetry/resources@2.6.0", "", { "dependencies": { "@opentelemetry/core": "2.6.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-D4y/+OGe3JSuYUCBxtH5T9DSAWNcvCb/nQWIga8HNtXTVPQn59j0nTBAgaAXxUVBDl40mG3Tc76b46wPlZaiJQ=="], + "color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], - "@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.211.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.211.0", "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-O5nPwzgg2JHzo59kpQTPUOTzFi0Nv5LxryG27QoXBciX3zWM3z83g+SNOHhiQVYRWFSxoWn1JM2TGD5iNjOwdA=="], + "color-support": ["color-support@1.1.3", "", { "bin": { "color-support": "bin.js" } }, "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="], - "@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog=="], + "colord": ["colord@2.9.3", "", {}, "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="], - "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.6.0", "", { "dependencies": { "@opentelemetry/core": "2.6.0", "@opentelemetry/resources": "2.6.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-g/OZVkqlxllgFM7qMKqbPV9c1DUPhQ7d4n3pgZFcrnrNft9eJXZM2TNHTPYREJBrtNdRytYyvwjgL5geDKl3EQ=="], + "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], - "@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@2.6.0", "", { "dependencies": { "@opentelemetry/context-async-hooks": "2.6.0", "@opentelemetry/core": "2.6.0", "@opentelemetry/sdk-trace-base": "2.6.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-YhswtasmsbIGEFvLGvR9p/y3PVRTfFf+mgY8van4Ygpnv4sA3vooAjvh+qAn9PNWxs4/IwGGqiQS0PPsaRJ0vQ=="], + "colorjs.io": ["colorjs.io@0.5.2", "", {}, "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw=="], - "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.40.0", "", {}, "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw=="], + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], - "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.41.2", "", { "dependencies": { "@opentelemetry/core": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ=="], + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], - "@parcel/watcher": ["@parcel/watcher@2.5.6", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.3" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.6", "@parcel/watcher-darwin-arm64": "2.5.6", "@parcel/watcher-darwin-x64": "2.5.6", "@parcel/watcher-freebsd-x64": "2.5.6", "@parcel/watcher-linux-arm-glibc": "2.5.6", "@parcel/watcher-linux-arm-musl": "2.5.6", "@parcel/watcher-linux-arm64-glibc": "2.5.6", "@parcel/watcher-linux-arm64-musl": "2.5.6", "@parcel/watcher-linux-x64-glibc": "2.5.6", "@parcel/watcher-linux-x64-musl": "2.5.6", "@parcel/watcher-win32-arm64": "2.5.6", "@parcel/watcher-win32-ia32": "2.5.6", "@parcel/watcher-win32-x64": "2.5.6" } }, "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ=="], + "commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], - "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.6", "", { "os": "android", "cpu": "arm64" }, "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A=="], + "commondir": ["commondir@1.0.1", "", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], - "@parcel/watcher-darwin-arm64": ["@parcel/watcher-darwin-arm64@2.5.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA=="], + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "@parcel/watcher-darwin-x64": ["@parcel/watcher-darwin-x64@2.5.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg=="], + "concat-with-sourcemaps": ["concat-with-sourcemaps@1.1.0", "", { "dependencies": { "source-map": "^0.6.1" } }, "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg=="], - "@parcel/watcher-freebsd-x64": ["@parcel/watcher-freebsd-x64@2.5.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng=="], + "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="], - "@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.5.6", "", { "os": "linux", "cpu": "arm" }, "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ=="], + "connect-history-api-fallback": ["connect-history-api-fallback@1.6.0", "", {}, "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="], - "@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.5.6", "", { "os": "linux", "cpu": "arm" }, "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg=="], + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], - "@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA=="], + "console-control-strings": ["console-control-strings@1.1.0", "", {}, "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="], - "@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA=="], + "content-disposition": ["content-disposition@1.0.1", "", {}, "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q=="], - "@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ=="], + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - "@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg=="], + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - "@parcel/watcher-win32-arm64": ["@parcel/watcher-win32-arm64@2.5.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q=="], + "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], - "@parcel/watcher-win32-ia32": ["@parcel/watcher-win32-ia32@2.5.6", "", { "os": "win32", "cpu": "ia32" }, "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g=="], + "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], - "@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.6", "", { "os": "win32", "cpu": "x64" }, "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw=="], + "copy-anything": ["copy-anything@4.0.5", "", { "dependencies": { "is-what": "^5.2.0" } }, "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA=="], - "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + "copy-to-clipboard": ["copy-to-clipboard@3.3.3", "", { "dependencies": { "toggle-selection": "^1.0.6" } }, "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA=="], - "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], + "core-js-compat": ["core-js-compat@3.49.0", "", { "dependencies": { "browserslist": "^4.28.1" } }, "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA=="], - "@prisma/adapter-pg": ["@prisma/adapter-pg@7.5.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "7.5.0", "@types/pg": "8.11.11", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "sha512-EJx7OLULahcC3IjJgdx2qRDNCT+ToY2v66UkeETMCLhNOTgqVzRzYvOEphY7Zp0eHyzfkC33Edd/qqeadf9R4A=="], + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], - "@prisma/client": ["@prisma/client@7.4.2", "", { "dependencies": { "@prisma/client-runtime-utils": "7.4.2" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-ts2mu+cQHriAhSxngO3StcYubBGTWDtu/4juZhXCUKOwgh26l+s4KD3vT2kMUzFyrYnll9u/3qWrtzRv9CGWzA=="], + "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], - "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.4.2", "", {}, "sha512-cID+rzOEb38VyMsx5LwJMEY4NGIrWCNpKu/0ImbeooQ2Px7TI+kOt7cm0NelxUzF2V41UVVXAmYjANZQtCu1/Q=="], + "cose-base": ["cose-base@1.0.3", "", { "dependencies": { "layout-base": "^1.0.0" } }, "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg=="], - "@prisma/config": ["@prisma/config@7.4.2", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.18.4", "empathic": "2.0.0" } }, "sha512-CftBjWxav99lzY1Z4oDgomdb1gh9BJFAOmWF6P2v1xRfXqQb56DfBub+QKcERRdNoAzCb3HXy3Zii8Vb4AsXhg=="], + "cosmiconfig": ["cosmiconfig@7.1.0", "", { "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" } }, "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="], - "@prisma/debug": ["@prisma/debug@7.5.0", "", {}, "sha512-163+nffny0JoPEkDhfNco0vcuT3ymIJc9+WX7MHSQhfkeKUmKe9/wqvGk5SjppT93DtBjVwr5HPJYlXbzm6qtg=="], + "crelt": ["crelt@1.0.6", "", {}, "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="], - "@prisma/dev": ["@prisma/dev@0.20.0", "", { "dependencies": { "@electric-sql/pglite": "0.3.15", "@electric-sql/pglite-socket": "0.0.20", "@electric-sql/pglite-tools": "0.2.20", "@hono/node-server": "1.19.9", "@mrleebo/prisma-ast": "0.13.1", "@prisma/get-platform": "7.2.0", "@prisma/query-plan-executor": "7.2.0", "foreground-child": "3.3.1", "get-port-please": "3.2.0", "hono": "4.11.4", "http-status-codes": "2.3.0", "pathe": "2.0.3", "proper-lockfile": "4.1.2", "remeda": "2.33.4", "std-env": "3.10.0", "valibot": "1.2.0", "zeptomatch": "2.1.0" } }, "sha512-ovlBYwWor0OzG+yH4J3Ot+AneD818BttLA+Ii7wjbcLHUrnC4tbUPVGyNd3c/+71KETPKZfjhkTSpdS15dmXNQ=="], + "cron-parser": ["cron-parser@4.9.0", "", { "dependencies": { "luxon": "^3.2.1" } }, "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q=="], - "@prisma/dmmf": ["@prisma/dmmf@7.4.2", "", {}, "sha512-EurUPjBwmAd69MM8PLZ5n94xeeQ+7SB3Wd9p2+YsgXhvqCa1cgJRBJiB6fTWkPTz5Lf05ySNJ/59EnuEJMAnrw=="], + "cross-fetch": ["cross-fetch@4.1.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw=="], - "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@7.5.0", "", { "dependencies": { "@prisma/debug": "7.5.0" } }, "sha512-B79N/amgV677mFesFDBAdrW0OIaqawap9E0sjgLBtzIz2R3hIMS1QB8mLZuUEiS4q5Y8Oh3I25Kw4SLxMypk9Q=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - "@prisma/engines": ["@prisma/engines@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "@prisma/fetch-engine": "7.4.2", "@prisma/get-platform": "7.4.2" } }, "sha512-B+ZZhI4rXlzjVqRw/93AothEKOU5/x4oVyJFGo9RpHPnBwaPwk4Pi0Q4iGXipKxeXPs/dqljgNBjK0m8nocOJA=="], + "css-color-keywords": ["css-color-keywords@1.0.0", "", {}, "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg=="], - "@prisma/engines-version": ["@prisma/engines-version@7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "", {}, "sha512-5FIKY3KoYQlBuZC2yc16EXfVRQ8HY+fLqgxkYfWCtKhRb3ajCRzP/rPeoSx11+NueJDANdh4hjY36mdmrTcGSg=="], + "css-declaration-sorter": ["css-declaration-sorter@6.4.1", "", { "peerDependencies": { "postcss": "^8.0.9" } }, "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g=="], - "@prisma/extension-read-replicas": ["@prisma/extension-read-replicas@0.5.0", "", { "peerDependencies": { "@prisma/client": "^7.0.0" } }, "sha512-t0kLjqFMte4wwGrZFhya4iFoyoOY4kjlyyE60WXZL66PqP6PcBpW/35eKb/3UcxgjJxcDlaJKfmGokFLOyafiQ=="], + "css-in-js-utils": ["css-in-js-utils@3.1.0", "", { "dependencies": { "hyphenate-style-name": "^1.0.3" } }, "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A=="], - "@prisma/fetch-engine": ["@prisma/fetch-engine@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "@prisma/get-platform": "7.4.2" } }, "sha512-f/c/MwYpdJO7taLETU8rahEstLeXfYgQGlz5fycG7Fbmva3iPdzGmjiSWHeSWIgNnlXnelUdCJqyZnFocurZuA=="], + "css-select": ["css-select@4.3.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="], - "@prisma/generator": ["@prisma/generator@7.4.2", "", {}, "sha512-+4B8Rrq5Ef2cm7cW7Wyu6oXn/QVcDVdNti9mKEkcbPVLlA85I6Rbd+j6r+k2E2nlj0zKZbDbq8fIx/Xnt1SmkA=="], + "css-to-react-native": ["css-to-react-native@3.2.0", "", { "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", "postcss-value-parser": "^4.0.2" } }, "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ=="], - "@prisma/generator-helper": ["@prisma/generator-helper@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/dmmf": "7.4.2", "@prisma/generator": "7.4.2" } }, "sha512-PWTkqlMILGVghoWP8SZB3prw/EcthiyPYJsMoiVZrClqPMQn6doPjphCQffPDyGzZvAwmA64edbc6Gm/6Omkjg=="], + "css-tree": ["css-tree@1.1.3", "", { "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q=="], - "@prisma/get-platform": ["@prisma/get-platform@7.2.0", "", { "dependencies": { "@prisma/debug": "7.2.0" } }, "sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA=="], + "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], - "@prisma/instrumentation": ["@prisma/instrumentation@7.4.2", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.207.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-r9JfchJF1Ae6yAxcaLu/V1TGqBhAuSDe3mRNOssBfx1rMzfZ4fdNvrgUBwyb/TNTGXFxlH9AZix5P257x07nrg=="], + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - "@prisma/query-plan-executor": ["@prisma/query-plan-executor@7.2.0", "", {}, "sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ=="], + "cssnano": ["cssnano@5.1.15", "", { "dependencies": { "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw=="], - "@prisma/studio-core": ["@prisma/studio-core@0.13.1", "", { "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-agdqaPEePRHcQ7CexEfkX1RvSH9uWDb6pXrZnhCRykhDFAV0/0P3d07WtfiY8hZWb7oRU4v+NkT4cGFHkQJIPg=="], + "cssnano-preset-default": ["cssnano-preset-default@5.2.14", "", { "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", "postcss-normalize-positions": "^5.1.1", "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A=="], - "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], + "cssnano-utils": ["cssnano-utils@3.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA=="], - "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], + "csso": ["csso@4.2.0", "", { "dependencies": { "css-tree": "^1.1.2" } }, "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA=="], - "@protobufjs/codegen": ["@protobufjs/codegen@2.0.4", "", {}, "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="], + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - "@protobufjs/eventemitter": ["@protobufjs/eventemitter@1.1.0", "", {}, "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="], + "cytoscape": ["cytoscape@3.33.3", "", {}, "sha512-Gej7U+OKR+LZ8kvX7rb2HhCYJ0IhvEFsnkud4SB1PR+BUY/TsSO0dmOW59WEVLu51b1Rm+gQRKoz4bLYxGSZ2g=="], - "@protobufjs/fetch": ["@protobufjs/fetch@1.1.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ=="], + "cytoscape-cose-bilkent": ["cytoscape-cose-bilkent@4.1.0", "", { "dependencies": { "cose-base": "^1.0.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ=="], - "@protobufjs/float": ["@protobufjs/float@1.0.2", "", {}, "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="], + "cytoscape-fcose": ["cytoscape-fcose@2.2.0", "", { "dependencies": { "cose-base": "^2.2.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ=="], - "@protobufjs/inquire": ["@protobufjs/inquire@1.1.0", "", {}, "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="], + "d3": ["d3@7.9.0", "", { "dependencies": { "d3-array": "3", "d3-axis": "3", "d3-brush": "3", "d3-chord": "3", "d3-color": "3", "d3-contour": "4", "d3-delaunay": "6", "d3-dispatch": "3", "d3-drag": "3", "d3-dsv": "3", "d3-ease": "3", "d3-fetch": "3", "d3-force": "3", "d3-format": "3", "d3-geo": "3", "d3-hierarchy": "3", "d3-interpolate": "3", "d3-path": "3", "d3-polygon": "3", "d3-quadtree": "3", "d3-random": "3", "d3-scale": "4", "d3-scale-chromatic": "3", "d3-selection": "3", "d3-shape": "3", "d3-time": "3", "d3-time-format": "4", "d3-timer": "3", "d3-transition": "3", "d3-zoom": "3" } }, "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA=="], - "@protobufjs/path": ["@protobufjs/path@1.1.2", "", {}, "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="], + "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="], - "@protobufjs/pool": ["@protobufjs/pool@1.1.0", "", {}, "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="], + "d3-axis": ["d3-axis@3.0.0", "", {}, "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="], - "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], + "d3-brush": ["d3-brush@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "3", "d3-transition": "3" } }, "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ=="], - "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], + "d3-chord": ["d3-chord@3.0.1", "", { "dependencies": { "d3-path": "1 - 3" } }, "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g=="], - "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], + "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="], - "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA=="], + "d3-contour": ["d3-contour@4.0.2", "", { "dependencies": { "d3-array": "^3.2.0" } }, "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA=="], - "@radix-ui/react-alert-dialog": ["@radix-ui/react-alert-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw=="], + "d3-delaunay": ["d3-delaunay@6.0.4", "", { "dependencies": { "delaunator": "5" } }, "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A=="], - "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="], + "d3-dispatch": ["d3-dispatch@3.0.1", "", {}, "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="], - "@radix-ui/react-checkbox": ["@radix-ui/react-checkbox@1.3.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw=="], + "d3-drag": ["d3-drag@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" } }, "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg=="], - "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA=="], + "d3-dsv": ["d3-dsv@3.0.1", "", { "dependencies": { "commander": "7", "iconv-lite": "0.6", "rw": "1" }, "bin": { "csv2json": "bin/dsv2json.js", "csv2tsv": "bin/dsv2dsv.js", "dsv2dsv": "bin/dsv2dsv.js", "dsv2json": "bin/dsv2json.js", "json2csv": "bin/json2dsv.js", "json2dsv": "bin/json2dsv.js", "json2tsv": "bin/json2dsv.js", "tsv2csv": "bin/dsv2dsv.js", "tsv2json": "bin/dsv2json.js" } }, "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q=="], - "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], + "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="], - "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + "d3-fetch": ["d3-fetch@3.0.1", "", { "dependencies": { "d3-dsv": "1 - 3" } }, "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw=="], - "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], + "d3-force": ["d3-force@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", "d3-timer": "1 - 3" } }, "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg=="], - "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], + "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="], - "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], + "d3-geo": ["d3-geo@3.1.1", "", { "dependencies": { "d3-array": "2.5.0 - 3" } }, "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q=="], - "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], + "d3-hierarchy": ["d3-hierarchy@3.1.2", "", {}, "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="], - "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw=="], + "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], - "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], + "d3-path": ["d3-path@3.1.0", "", {}, "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="], - "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], + "d3-polygon": ["d3-polygon@3.0.1", "", {}, "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg=="], - "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + "d3-quadtree": ["d3-quadtree@3.0.1", "", {}, "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="], - "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg=="], + "d3-random": ["d3-random@3.0.1", "", {}, "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="], - "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA=="], + "d3-sankey": ["d3-sankey@0.12.3", "", { "dependencies": { "d3-array": "1 - 2", "d3-shape": "^1.2.0" } }, "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ=="], - "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="], + "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", "d3-interpolate": "1.2.0 - 3", "d3-time": "2.1.1 - 3", "d3-time-format": "2 - 4" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="], - "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], + "d3-scale-chromatic": ["d3-scale-chromatic@3.1.0", "", { "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" } }, "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ=="], - "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], + "d3-selection": ["d3-selection@3.0.0", "", {}, "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="], - "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + "d3-shape": ["d3-shape@3.2.0", "", { "dependencies": { "d3-path": "^3.1.0" } }, "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA=="], - "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], + "d3-time": ["d3-time@3.1.0", "", { "dependencies": { "d3-array": "2 - 3" } }, "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q=="], - "@radix-ui/react-select": ["@radix-ui/react-select@2.2.6", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ=="], + "d3-time-format": ["d3-time-format@4.1.0", "", { "dependencies": { "d3-time": "1 - 3" } }, "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg=="], - "@radix-ui/react-slider": ["@radix-ui/react-slider@1.3.6", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw=="], + "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], - "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + "d3-transition": ["d3-transition@3.0.1", "", { "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", "d3-ease": "1 - 3", "d3-interpolate": "1 - 3", "d3-timer": "1 - 3" }, "peerDependencies": { "d3-selection": "2 - 3" } }, "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w=="], - "@radix-ui/react-switch": ["@radix-ui/react-switch@1.2.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ=="], + "d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="], - "@radix-ui/react-toggle": ["@radix-ui/react-toggle@1.1.10", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ=="], + "dagre-d3-es": ["dagre-d3-es@7.0.14", "", { "dependencies": { "d3": "^7.9.0", "lodash-es": "^4.17.21" } }, "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg=="], - "@radix-ui/react-toggle-group": ["@radix-ui/react-toggle-group@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q=="], + "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], - "@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg=="], + "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], - "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], - "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], - "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], + "dayjs": ["dayjs@1.11.20", "", {}, "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="], - "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + "decamelize": ["decamelize@4.0.0", "", {}, "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="], - "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ=="], + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], - "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.1", "", { "dependencies": { "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w=="], + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], - "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ=="], + "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], - "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.4", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg=="], + "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], - "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], + "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], - "@react-email/body": ["@react-email/body@0.2.1", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-ljDiQiJDu/Fq//vSIIP0z5Nuvt4+DX1RqGasstChDGJB/14ogd4VdNS9aacoede/ZjGy3o3Qb+cxyS+XgM6SwQ=="], + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], - "@react-email/button": ["@react-email/button@0.2.1", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-qXyj7RZLE7POy9BMKSoqQ00tOXThjOZSUnI2Yu9i29IHngPlmrNayIWBoVKtElES7OWwypUcpiajwi1mUWx6/A=="], + "deepmerge": ["deepmerge@2.2.1", "", {}, "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA=="], - "@react-email/code-block": ["@react-email/code-block@0.2.1", "", { "dependencies": { "prismjs": "^1.30.0" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-M3B7JpVH4ytgn83/ujRR1k1DQHvTeABiDM61OvAbjLRPhC/5KLHU5KkzIbbuGIrjWwxAbL1kSQzU8MhLEtSxyw=="], + "deepmerge-ts": ["deepmerge-ts@7.1.5", "", {}, "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw=="], - "@react-email/code-inline": ["@react-email/code-inline@0.0.6", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-jfhebvv3dVsp3OdPgKXnk8+e2pBiDVZejDOBFzBa/IblrAJ9cQDkN6rBD5IyEg8hTOxwbw3iaI/yZFmDmIguIA=="], + "default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="], - "@react-email/column": ["@react-email/column@0.0.14", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-f+W+Bk2AjNO77zynE33rHuQhyqVICx4RYtGX9NKsGUg0wWjdGP0qAuIkhx9Rnmk4/hFMo1fUrtYNqca9fwJdHg=="], + "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], - "@react-email/components": ["@react-email/components@1.0.8", "", { "dependencies": { "@react-email/body": "0.2.1", "@react-email/button": "0.2.1", "@react-email/code-block": "0.2.1", "@react-email/code-inline": "0.0.6", "@react-email/column": "0.0.14", "@react-email/container": "0.0.16", "@react-email/font": "0.0.10", "@react-email/head": "0.0.13", "@react-email/heading": "0.0.16", "@react-email/hr": "0.0.12", "@react-email/html": "0.0.12", "@react-email/img": "0.0.12", "@react-email/link": "0.0.13", "@react-email/markdown": "0.0.18", "@react-email/preview": "0.0.14", "@react-email/render": "2.0.4", "@react-email/row": "0.0.13", "@react-email/section": "0.0.17", "@react-email/tailwind": "2.0.5", "@react-email/text": "0.1.6" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-zY81ED6o5MWMzBkr9uZFuT24lWarT+xIbOZxI6C9dsFmCWBczM8IE1BgOI8rhpUK4JcYVDy1uKxYAFqsx2Bc4w=="], + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - "@react-email/container": ["@react-email/container@0.0.16", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-QWBB56RkkU0AJ9h+qy33gfT5iuZknPC7Un/IjZv9B0QmMIK+WWacc0cH6y2SV5Cv/b99hU94fjEMOOO4enpkbQ=="], + "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], - "@react-email/font": ["@react-email/font@0.0.10", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-0urVSgCmQIfx5r7Xc586miBnQUVnGp3OTYUm8m5pwtQRdTRO5XrTtEfNJ3JhYhSOruV0nD8fd+dXtKXobum6tA=="], + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - "@react-email/head": ["@react-email/head@0.0.13", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-AJg6le/08Gz4tm+6MtKXqtNNyKHzmooOCdmtqmWxD7FxoAdU1eVcizhtQ0gcnVaY6ethEyE/hnEzQxt1zu5Kog=="], + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], - "@react-email/heading": ["@react-email/heading@0.0.16", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-jmsKnQm1ykpBzw4hCYHwBkt5pW2jScXffPeEH5ZRF5tZeF5b1pvlFTO9han7C0pCkZYo1kEvWiRtx69yfCIwuw=="], + "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], - "@react-email/hr": ["@react-email/hr@0.0.12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-TwmOmBDibavUQpXBxpmZYi2Iks/yeZOzFYh+di9EltMSnEabH8dMZXrl+pxNXzCgZ2XE8HY7VmUL65Lenfu5PA=="], + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], - "@react-email/html": ["@react-email/html@0.0.12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-KTShZesan+UsreU7PDUV90afrZwU5TLwYlALuCSU0OT+/U8lULNNbAUekg+tGwCnOfIKYtpDPKkAMRdYlqUznw=="], + "delegates": ["delegates@1.0.0", "", {}, "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="], - "@react-email/img": ["@react-email/img@0.0.12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-sRCpEARNVTf3FQhZOC+JTvu5r6ubiYWkT0ucYXg8ctkyi4G8QG+jgYPiNUqVeTLA2STOfmPM/nrk1nb84y6CPQ=="], + "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], - "@react-email/link": ["@react-email/link@0.0.13", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-lkWc/NjOcefRZMkQoSDDbuKBEBDES9aXnFEOuPH845wD3TxPwh+QTf0fStuzjoRLUZWpHnio4z7qGGRYusn/sw=="], + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], - "@react-email/markdown": ["@react-email/markdown@0.0.18", "", { "dependencies": { "marked": "^15.0.12" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-gSuYK5fsMbGk87jDebqQ6fa2fKcWlkf2Dkva8kMONqLgGCq8/0d+ZQYMEJsdidIeBo3kmsnHZPrwdFB4HgjUXg=="], + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], - "@react-email/preview": ["@react-email/preview@0.0.14", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-aYK8q0IPkBXyMsbpMXgxazwHxYJxTrXrV95GFuu2HbEiIToMwSyUgb8HDFYwPqqfV03/jbwqlsXmFxsOd+VNaw=="], + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], - "@react-email/render": ["@react-email/render@2.0.4", "", { "dependencies": { "html-to-text": "^9.0.5", "prettier": "^3.5.3" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-kht2oTFQ1SwrLpd882ahTvUtNa9s53CERHstiTbzhm6aR2Hbykp/mQ4tpPvsBGkKAEvKRlDEoooh60Uk6nHK1g=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - "@react-email/row": ["@react-email/row@0.0.13", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-bYnOac40vIKCId7IkwuLAAsa3fKfSfqCvv6epJKmPE0JBuu5qI4FHFCl9o9dVpIIS08s/ub+Y/txoMt0dYziGw=="], + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], - "@react-email/section": ["@react-email/section@0.0.17", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-qNl65ye3W0Rd5udhdORzTV9ezjb+GFqQQSae03NDzXtmJq6sqVXNWNiVolAjvJNypim+zGXmv6J9TcV5aNtE/w=="], + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - "@react-email/tailwind": ["@react-email/tailwind@2.0.5", "", { "dependencies": { "tailwindcss": "^4.1.18" }, "peerDependencies": { "@react-email/body": "0.2.1", "@react-email/button": "0.2.1", "@react-email/code-block": "0.2.1", "@react-email/code-inline": "0.0.6", "@react-email/container": "0.0.16", "@react-email/heading": "0.0.16", "@react-email/hr": "0.0.12", "@react-email/img": "0.0.12", "@react-email/link": "0.0.13", "@react-email/preview": "0.0.14", "@react-email/text": "0.1.6", "react": "^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@react-email/body", "@react-email/button", "@react-email/code-block", "@react-email/code-inline", "@react-email/container", "@react-email/heading", "@react-email/hr", "@react-email/img", "@react-email/link", "@react-email/preview"] }, "sha512-7Ey+kiWliJdxPMCLYsdDts8ffp4idlP//w4Ui3q/A5kokVaLSNKG8DOg/8qAuzWmRiGwNQVOKBk7PXNlK5W+sg=="], + "diff": ["diff@9.0.0", "", {}, "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw=="], - "@react-email/text": ["@react-email/text@0.1.6", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-TYqkioRS45wTR5il3dYk/SbUjjEdhSwh9BtRNB99qNH1pXAwA45H7rAuxehiu8iJQJH0IyIr+6n62gBz9ezmsw=="], + "diff-sequences": ["diff-sequences@29.6.3", "", {}, "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="], - "@redis/bloom": ["@redis/bloom@5.11.0", "", { "peerDependencies": { "@redis/client": "^5.11.0" } }, "sha512-KYiVilAhAFN3057afUb/tfYJpsEyTkQB+tQcn5gVVA7DgcNOAj8lLxe4j8ov8BF6I9C1Fe/kwlbuAICcTMX8Lw=="], + "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], - "@redis/client": ["@redis/client@5.11.0", "", { "dependencies": { "cluster-key-slot": "1.1.2" }, "peerDependencies": { "@node-rs/xxhash": "^1.1.0" }, "optionalPeers": ["@node-rs/xxhash"] }, "sha512-GHoprlNQD51Xq2Ztd94HHV94MdFZQ3CVrpA04Fz8MVoHM0B7SlbmPEVIjwTbcv58z8QyjnrOuikS0rWF03k5dQ=="], + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], - "@redis/graph": ["@redis/graph@1.1.1", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw=="], + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], - "@redis/json": ["@redis/json@5.11.0", "", { "peerDependencies": { "@redis/client": "^5.11.0" } }, "sha512-1iAy9kAtcD0quB21RbPTbUqqy+T2Uu2JxucwE+B4A+VaDbIRvpZR6DMqV8Iqaws2YxJYB3GC5JVNzPYio2ErUg=="], + "domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], - "@redis/search": ["@redis/search@5.11.0", "", { "peerDependencies": { "@redis/client": "^5.11.0" } }, "sha512-g1l7f3Rnyk/xI99oGHIgWHSKFl45Re5YTIcO8j/JE8olz389yUFyz2+A6nqVy/Zi031VgPDWscbbgOk8hlhZ3g=="], + "dompurify": ["dompurify@3.4.2", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA=="], - "@redis/time-series": ["@redis/time-series@5.11.0", "", { "peerDependencies": { "@redis/client": "^5.11.0" } }, "sha512-TWFeOcU4xkj0DkndnOyhtxvX1KWD+78UHT3XX3x3XRBUGWeQrKo3jqzDsZwxbggUgf9yLJr/akFHXru66X5UQA=="], + "domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], - "@remirror/core-constants": ["@remirror/core-constants@3.0.0", "", {}, "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg=="], + "dot-case": ["dot-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="], - "@remix-run/router": ["@remix-run/router@1.23.2", "", {}, "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w=="], + "dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], - "@remixicon/react": ["@remixicon/react@4.9.0", "", { "peerDependencies": { "react": ">=18.2.0" } }, "sha512-5/jLDD4DtKxH2B4QVXTobvV1C2uL8ab9D5yAYNtFt+w80O0Ys1xFOrspqROL3fjrZi+7ElFUWE37hBfaAl6U+Q=="], + "dotenv-expand": ["dotenv-expand@8.0.3", "", {}, "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg=="], - "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], + "dprint-node": ["dprint-node@1.0.8", "", { "dependencies": { "detect-libc": "^1.0.3" } }, "sha512-iVKnUtYfGrYcW1ZAlfR/F59cUVL8QIhWoBJoSjkkdua/dkWIgjZfiLMeTjiB06X0ZLkQ0M2C1VbUj/CxkIf1zg=="], - "@rollup/plugin-alias": ["@rollup/plugin-alias@3.1.9", "", { "dependencies": { "slash": "^3.0.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw=="], + "drizzle-orm": ["drizzle-orm@0.45.1", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA=="], - "@rollup/plugin-babel": ["@rollup/plugin-babel@5.3.1", "", { "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", "rollup": "^1.20.0||^2.0.0" }, "optionalPeers": ["@types/babel__core"] }, "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q=="], + "dts-bundle-generator": ["dts-bundle-generator@9.5.1", "", { "dependencies": { "typescript": ">=5.0.2", "yargs": "^17.6.0" }, "bin": { "dts-bundle-generator": "dist/bin/dts-bundle-generator.js" } }, "sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA=="], - "@rollup/plugin-commonjs": ["@rollup/plugin-commonjs@17.1.0", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "commondir": "^1.0.1", "estree-walker": "^2.0.1", "glob": "^7.1.6", "is-reference": "^1.2.1", "magic-string": "^0.25.7", "resolve": "^1.17.0" }, "peerDependencies": { "rollup": "^2.30.0" } }, "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew=="], + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - "@rollup/plugin-json": ["@rollup/plugin-json@4.1.0", "", { "dependencies": { "@rollup/pluginutils": "^3.0.8" }, "peerDependencies": { "rollup": "^1.20.0 || ^2.0.0" } }, "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw=="], + "duplexer": ["duplexer@0.1.1", "", {}, "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q=="], - "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@11.2.1", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.19.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg=="], + "duplexer2": ["duplexer2@0.1.4", "", { "dependencies": { "readable-stream": "^2.0.2" } }, "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA=="], - "@rollup/pluginutils": ["@rollup/pluginutils@4.2.1", "", { "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } }, "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="], + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.59.0", "", { "os": "android", "cpu": "arm" }, "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg=="], + "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.59.0", "", { "os": "android", "cpu": "arm64" }, "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q=="], + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.59.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg=="], + "effect": ["effect@3.18.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.59.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w=="], + "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.59.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA=="], + "electron-to-chromium": ["electron-to-chromium@1.5.307", "", {}, "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.59.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg=="], + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw=="], + "empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA=="], + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA=="], + "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA=="], + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg=="], + "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], - "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q=="], + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.59.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA=="], + "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], - "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.59.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA=="], + "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg=="], + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg=="], + "error-stack-parser": ["error-stack-parser@2.1.4", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.59.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w=="], + "es-abstract": ["es-abstract@1.24.1", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg=="], + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg=="], + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.59.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ=="], + "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.59.0", "", { "os": "none", "cpu": "arm64" }, "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA=="], + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.59.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A=="], + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.59.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA=="], + "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA=="], + "es-toolkit": ["es-toolkit@1.46.1", "", {}, "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA=="], + "es6-promise": ["es6-promise@4.2.8", "", {}, "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="], - "@selderee/plugin-htmlparser2": ["@selderee/plugin-htmlparser2@0.11.0", "", { "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" } }, "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ=="], + "es6-promisify": ["es6-promisify@5.0.0", "", { "dependencies": { "es6-promise": "^4.0.3" } }, "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ=="], - "@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@8.55.0", "", { "dependencies": { "@sentry/core": "8.55.0" } }, "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw=="], + "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], - "@sentry-internal/feedback": ["@sentry-internal/feedback@8.55.0", "", { "dependencies": { "@sentry/core": "8.55.0" } }, "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw=="], + "esbuild-plugin-alias": ["esbuild-plugin-alias@0.2.1", "", {}, "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ=="], - "@sentry-internal/replay": ["@sentry-internal/replay@8.55.0", "", { "dependencies": { "@sentry-internal/browser-utils": "8.55.0", "@sentry/core": "8.55.0" } }, "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw=="], + "esbuild-plugin-styled-components": ["esbuild-plugin-styled-components@3.0.1", "", { "dependencies": { "@babel/core": "^7.22.1", "babel-plugin-styled-components": "^2.1.3" } }, "sha512-yhqHjVykhfek3TCLZQlLr6VSIrIbwAdwhn3Hpqj/n7KxEMcb3k/rkzO7U7BosbaC7TItJMyOauNwtGoioz4A1Q=="], - "@sentry-internal/replay-canvas": ["@sentry-internal/replay-canvas@8.55.0", "", { "dependencies": { "@sentry-internal/replay": "8.55.0", "@sentry/core": "8.55.0" } }, "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w=="], + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - "@sentry/babel-plugin-component-annotate": ["@sentry/babel-plugin-component-annotate@3.6.1", "", {}, "sha512-zmvUa4RpzDG3LQJFpGCE8lniz8Rk1Wa6ZvvK+yEH+snZeaHHRbSnAQBMR607GOClP+euGHNO2YtaY4UAdNTYbg=="], + "escape-carriage": ["escape-carriage@1.3.1", "", {}, "sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw=="], - "@sentry/browser": ["@sentry/browser@8.55.0", "", { "dependencies": { "@sentry-internal/browser-utils": "8.55.0", "@sentry-internal/feedback": "8.55.0", "@sentry-internal/replay": "8.55.0", "@sentry-internal/replay-canvas": "8.55.0", "@sentry/core": "8.55.0" } }, "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw=="], + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - "@sentry/bun": ["@sentry/bun@10.45.0", "", { "dependencies": { "@sentry/core": "10.45.0", "@sentry/node": "10.45.0" } }, "sha512-f9+24fp1Ew09qcqQ2DMKo0Dh/4WIE8G4D3/CLh8pgdwjP8A+5cvTQLcdUsqZll361P4jmXS+ZEi5KlmPv/ddGw=="], + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - "@sentry/bundler-plugin-core": ["@sentry/bundler-plugin-core@3.6.1", "", { "dependencies": { "@babel/core": "^7.18.5", "@sentry/babel-plugin-component-annotate": "3.6.1", "@sentry/cli": "^2.49.0", "dotenv": "^16.3.1", "find-up": "^5.0.0", "glob": "^9.3.2", "magic-string": "0.30.8", "unplugin": "1.0.1" } }, "sha512-/ubWjPwgLep84sUPzHfKL2Ns9mK9aQrEX4aBFztru7ygiJidKJTxYGtvjh4dL2M1aZ0WRQYp+7PF6+VKwdZXcQ=="], + "eslint": ["eslint@9.39.3", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.3", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg=="], - "@sentry/cli": ["@sentry/cli@3.3.3", "", { "dependencies": { "progress": "^2.0.3", "proxy-from-env": "^1.1.0", "undici": "^6.22.0", "which": "^2.0.2" }, "optionalDependencies": { "@sentry/cli-darwin": "3.3.3", "@sentry/cli-linux-arm": "3.3.3", "@sentry/cli-linux-arm64": "3.3.3", "@sentry/cli-linux-i686": "3.3.3", "@sentry/cli-linux-x64": "3.3.3", "@sentry/cli-win32-arm64": "3.3.3", "@sentry/cli-win32-i686": "3.3.3", "@sentry/cli-win32-x64": "3.3.3" }, "bin": { "sentry-cli": "bin/sentry-cli" } }, "sha512-4CZtfgiOraX+BntMjYQhfLDArXwpqt3sEo5Zdj2pqWSZSd4yI3ncfQ21CsxLcI/sUQrjmD5Vzidu4/1OShyxtA=="], + "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], - "@sentry/cli-darwin": ["@sentry/cli-darwin@3.3.3", "", { "os": "darwin" }, "sha512-P8DoL79eX5fhKCfBHHl7xwwTShDPOb2drJC8lizZ3v1iS1JLPrNweM1KEzDefR30zH1wghbLSwsYv/svWdM3wA=="], + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], - "@sentry/cli-linux-arm": ["@sentry/cli-linux-arm@3.3.3", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "arm" }, "sha512-a7o/huozveLIImXHe0HDwEMVhvDopOP2tLcopvV7sQsVE8f/QOShR5FudKjmiaZz2opdLzPJO9pv5WuF9jAZPg=="], + "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], - "@sentry/cli-linux-arm64": ["@sentry/cli-linux-arm64@3.3.3", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "arm64" }, "sha512-9jaX9RGyTpjo9u2urNi5ciBDpRdTt107YJpFXev+BFHJ6Lwz/owgRuYzPRfAen8hKkOOFheZ3iy07kl576eZzw=="], + "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], - "@sentry/cli-linux-i686": ["@sentry/cli-linux-i686@3.3.3", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "ia32" }, "sha512-VngQYzR2kDm2oojCuYF20ebLTK8HKvEwxe785J6gxob8Ef9JvZkERyUqENYppBa9aVgN0pandqPAqOECWykTMA=="], + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], - "@sentry/cli-linux-x64": ["@sentry/cli-linux-x64@3.3.3", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "x64" }, "sha512-rBxXQeIYGefUNI2cXHxEr0y3bhxDQjOD4G6j/gqLz/Dj+l8gJ/iKP64kTudnoViNIpn0pdYccG69th7zmzM/Fg=="], + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], - "@sentry/cli-win32-arm64": ["@sentry/cli-win32-arm64@3.3.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-c52g+YS6BO0rzH8AEHqQPmpqZrw0GJjMWqy0tQ5jcqaGdaLVnxk0mMEubv8R6Dv5MR2LShoKjiNsaeVfrWIMUg=="], + "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], - "@sentry/cli-win32-i686": ["@sentry/cli-win32-i686@3.3.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-DygYzSY/+tS7oFj/mfeg/yzYxsQx3fO8cI+IWc2pns/at+JcJ9O5xyM/x/q55wOxpnwla7RL1D3rsqK2mqkYfg=="], + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@sentry/cli-win32-x64": ["@sentry/cli-win32-x64@3.3.3", "", { "os": "win32", "cpu": "x64" }, "sha512-i0glPcHwkqbVA2Y+0Yz7CD/l8TSkfft1a+lTU9yk/+DDU8WGkyArEAxAji9bGo4p+k5HIFC8OC2MwpKdcdFM4Q=="], + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - "@sentry/core": ["@sentry/core@8.55.0", "", {}, "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA=="], + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - "@sentry/node": ["@sentry/node@10.45.0", "", { "dependencies": { "@fastify/otel": "0.17.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^2.6.0", "@opentelemetry/core": "^2.6.0", "@opentelemetry/instrumentation": "^0.213.0", "@opentelemetry/instrumentation-amqplib": "0.60.0", "@opentelemetry/instrumentation-connect": "0.56.0", "@opentelemetry/instrumentation-dataloader": "0.30.0", "@opentelemetry/instrumentation-express": "0.61.0", "@opentelemetry/instrumentation-fs": "0.32.0", "@opentelemetry/instrumentation-generic-pool": "0.56.0", "@opentelemetry/instrumentation-graphql": "0.61.0", "@opentelemetry/instrumentation-hapi": "0.59.0", "@opentelemetry/instrumentation-http": "0.213.0", "@opentelemetry/instrumentation-ioredis": "0.61.0", "@opentelemetry/instrumentation-kafkajs": "0.22.0", "@opentelemetry/instrumentation-knex": "0.57.0", "@opentelemetry/instrumentation-koa": "0.61.0", "@opentelemetry/instrumentation-lru-memoizer": "0.57.0", "@opentelemetry/instrumentation-mongodb": "0.66.0", "@opentelemetry/instrumentation-mongoose": "0.59.0", "@opentelemetry/instrumentation-mysql": "0.59.0", "@opentelemetry/instrumentation-mysql2": "0.59.0", "@opentelemetry/instrumentation-pg": "0.65.0", "@opentelemetry/instrumentation-redis": "0.61.0", "@opentelemetry/instrumentation-tedious": "0.32.0", "@opentelemetry/instrumentation-undici": "0.23.0", "@opentelemetry/resources": "^2.6.0", "@opentelemetry/sdk-trace-base": "^2.6.0", "@opentelemetry/semantic-conventions": "^1.40.0", "@prisma/instrumentation": "7.4.2", "@sentry/core": "10.45.0", "@sentry/node-core": "10.45.0", "@sentry/opentelemetry": "10.45.0", "import-in-the-middle": "^3.0.0" } }, "sha512-Kpiq9lRGnJc1ex8SwxOBl+FLQNl4Y137BydVooP7AFiAYZ6ftwHsIEF1bcYXaipHMT1YHS2bdhC2UQaaB2jkuQ=="], + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], - "@sentry/node-core": ["@sentry/node-core@10.45.0", "", { "dependencies": { "@sentry/core": "10.45.0", "@sentry/opentelemetry": "10.45.0", "import-in-the-middle": "^3.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0", "@opentelemetry/instrumentation": ">=0.57.1 <1", "@opentelemetry/resources": "^1.30.1 || ^2.1.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", "@opentelemetry/semantic-conventions": "^1.39.0" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/context-async-hooks", "@opentelemetry/core", "@opentelemetry/instrumentation", "@opentelemetry/resources", "@opentelemetry/sdk-trace-base", "@opentelemetry/semantic-conventions"] }, "sha512-KQZEvLKM344+EqXiA9HIzWbW5hzq6/9nnFUQ8niaBPoOgR9AiJhrccfIscfgb8vjkriiEtzE03OW/4h1CTgZ3Q=="], + "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], - "@sentry/opentelemetry": ["@sentry/opentelemetry@10.45.0", "", { "dependencies": { "@sentry/core": "10.45.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", "@opentelemetry/semantic-conventions": "^1.39.0" } }, "sha512-PmuGO+p/gC3ZQ8ddOeJ5P9ApnTTm35i12Bpuyb13AckCbNSJFvG2ggZda35JQOmiFU0kKYiwkoFAa8Mvj9od3Q=="], + "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "@sentry/react": ["@sentry/react@8.55.0", "", { "dependencies": { "@sentry/browser": "8.55.0", "@sentry/core": "8.55.0", "hoist-non-react-statics": "^3.3.2" }, "peerDependencies": { "react": "^16.14.0 || 17.x || 18.x || 19.x" } }, "sha512-/qNBvFLpvSa/Rmia0jpKfJdy16d4YZaAnH/TuKLAtm0BWlsPQzbXCU4h8C5Hsst0Do0zG613MEtEmWpWrVOqWA=="], + "events-universal": ["events-universal@1.0.1", "", { "dependencies": { "bare-events": "^2.7.0" } }, "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw=="], - "@sentry/vite-plugin": ["@sentry/vite-plugin@3.6.1", "", { "dependencies": { "@sentry/bundler-plugin-core": "3.6.1", "unplugin": "1.0.1" } }, "sha512-x8WMdv2K2HcGS2ezEUIEZXpT/fNeWQ9rsEeF0K9DfKXK8Z9lzRmCr6TVA6I9+yW39Is+1/0cv1Rsu0LhO7lHzg=="], + "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], - "@sinclair/typebox": ["@sinclair/typebox@0.27.10", "", {}, "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA=="], + "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], - "@slates/proto": ["@slates/proto@1.0.0-rc.8", "", { "dependencies": { "@lowerdeck/emitter": "^1.0.4", "@lowerdeck/error": "^1.1.0", "@toon-format/toon": "^2.1.0", "axios": "^1.13.2", "zod": "^4.2.1" } }, "sha512-3PB2SCFi13mYNkkptX9dbz8xOFgEdtXd6atDtaaIDs8vSxIMWy8C9JoSqtqXDmJOfM8Jk/dCSWxjoTPEYnMfgQ=="], + "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - "@smithy/abort-controller": ["@smithy/abort-controller@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q=="], + "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], - "@smithy/chunked-blob-reader": ["@smithy/chunked-blob-reader@5.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-y5d4xRiD6TzeP5BWlb+Ig/VFqF+t9oANNhGeMqyzU7obw7FYgTgVi50i5JqBTeKp+TABeDIeeXFZdz65RipNtA=="], + "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], - "@smithy/chunked-blob-reader-native": ["@smithy/chunked-blob-reader-native@4.2.2", "", { "dependencies": { "@smithy/util-base64": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-QzzYIlf4yg0w5TQaC9VId3B3ugSk1MI/wb7tgcHtd7CBV9gNRKZrhc2EPSxSZuDy10zUZ0lomNMgkc6/VVe8xg=="], + "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], - "@smithy/config-resolver": ["@smithy/config-resolver@4.4.13", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg=="], + "express-rate-limit": ["express-rate-limit@8.2.1", "", { "dependencies": { "ip-address": "10.0.1" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g=="], - "@smithy/core": ["@smithy/core@3.23.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-stream": "^4.5.20", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w=="], + "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], - "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.12", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg=="], + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], - "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.12", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA=="], + "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], - "@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.12", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A=="], + "fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], - "@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q=="], + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - "@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.12", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA=="], + "fast-equals": ["fast-equals@5.4.0", "", {}, "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw=="], - "@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.12", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ=="], + "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], - "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.15", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A=="], + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - "@smithy/hash-blob-browser": ["@smithy/hash-blob-browser@4.2.11", "", { "dependencies": { "@smithy/chunked-blob-reader": "^5.2.1", "@smithy/chunked-blob-reader-native": "^4.2.2", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-DrcAx3PM6AEbWZxsKl6CWAGnVwiz28Wp1ZhNu+Hi4uI/6C1PIZBIaPM2VoqBDAsOWbM6ZVzOEQMxFLLdmb4eBQ=="], + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], - "@smithy/hash-node": ["@smithy/hash-node@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w=="], + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - "@smithy/hash-stream-node": ["@smithy/hash-stream-node@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-w78xsYrOlwXKwN5tv1GnKIRbHb1HygSpeZMP6xDxCPGf1U/xDHjCpJu64c5T35UKyEPwa0bPeIcvU69VY3khUA=="], + "fast-shallow-equal": ["fast-shallow-equal@1.0.0", "", {}, "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw=="], - "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g=="], + "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], - "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q=="], + "fast-xml-builder": ["fast-xml-builder@1.2.0", "", { "dependencies": { "path-expression-matcher": "^1.5.0", "xml-naming": "^0.1.0" } }, "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q=="], - "@smithy/md5-js": ["@smithy/md5-js@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-Op+Dh6dPLWTjWITChFayDllIaCXRofOed8ecpggTC5fkh8yXes0vAEX7gRUfjGK+TlyxoCAA05gHbZW/zB9JwQ=="], + "fast-xml-parser": ["fast-xml-parser@5.8.0", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.2.0", "path-expression-matcher": "^1.5.0", "strnum": "^2.3.0", "xml-naming": "^0.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg=="], - "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA=="], + "fastest-stable-stringify": ["fastest-stable-stringify@2.0.2", "", {}, "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q=="], - "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.27", "", { "dependencies": { "@smithy/core": "^3.23.12", "@smithy/middleware-serde": "^4.2.15", "@smithy/node-config-provider": "^4.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-middleware": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA=="], + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], - "@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.44", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/protocol-http": "^5.3.12", "@smithy/service-error-classification": "^4.2.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA=="], + "fault": ["fault@2.0.1", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ=="], - "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.15", "", { "dependencies": { "@smithy/core": "^3.23.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw=="], + "fetch-retry": ["fetch-retry@6.0.0", "", {}, "sha512-BUFj1aMubgib37I3v4q78fYo63Po7t4HUPTpQ6/QE6yK6cIQrP+W43FYToeTEyg5m2Y7eFUtijUuAv/PDlWuag=="], - "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.12", "", { "dependencies": { "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw=="], + "fflate": ["fflate@0.8.2", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="], - "@smithy/node-http-handler": ["@smithy/node-http-handler@4.5.0", "", { "dependencies": { "@smithy/abort-controller": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A=="], + "figures": ["figures@1.7.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" } }, "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ=="], - "@smithy/property-provider": ["@smithy/property-provider@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A=="], + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], - "@smithy/protocol-http": ["@smithy/protocol-http@5.3.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw=="], + "file-selector": ["file-selector@2.1.2", "", { "dependencies": { "tslib": "^2.7.0" } }, "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig=="], - "@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg=="], + "file-type": ["file-type@21.3.4", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g=="], - "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw=="], + "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], - "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1" } }, "sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ=="], + "filelist": ["filelist@1.0.6", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA=="], - "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.7", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw=="], + "filesize": ["filesize@6.4.0", "", {}, "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ=="], - "@smithy/signature-v4": ["@smithy/signature-v4@5.3.12", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw=="], + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - "@smithy/smithy-client": ["@smithy/smithy-client@4.12.7", "", { "dependencies": { "@smithy/core": "^3.23.12", "@smithy/middleware-endpoint": "^4.4.27", "@smithy/middleware-stack": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-stream": "^4.5.20", "tslib": "^2.6.2" } }, "sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ=="], + "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], - "@smithy/types": ["@smithy/types@4.13.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g=="], + "find-cache-dir": ["find-cache-dir@3.3.2", "", { "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig=="], - "@smithy/url-parser": ["@smithy/url-parser@4.2.12", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA=="], + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], - "@smithy/util-base64": ["@smithy/util-base64@4.3.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ=="], + "fix-dts-default-cjs-exports": ["fix-dts-default-cjs-exports@1.0.1", "", { "dependencies": { "magic-string": "^0.30.17", "mlly": "^1.7.4", "rollup": "^4.34.8" } }, "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg=="], - "@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ=="], + "flat": ["flat@5.0.2", "", { "bin": { "flat": "cli.js" } }, "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="], - "@smithy/util-body-length-node": ["@smithy/util-body-length-node@4.2.3", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g=="], + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], - "@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.2", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q=="], + "flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="], - "@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ=="], + "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], - "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.43", "", { "dependencies": { "@smithy/property-provider": "^4.2.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ=="], + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], - "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.47", "", { "dependencies": { "@smithy/config-resolver": "^4.4.13", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ=="], + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - "@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.3", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig=="], + "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], - "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg=="], + "format": ["format@0.2.2", "", {}, "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="], - "@smithy/util-middleware": ["@smithy/util-middleware@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ=="], + "formik": ["formik@2.4.9", "", { "dependencies": { "@types/hoist-non-react-statics": "^3.3.1", "deepmerge": "^2.1.1", "hoist-non-react-statics": "^3.3.0", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "react-fast-compare": "^2.0.1", "tiny-warning": "^1.0.2", "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-5nI94BMnlFDdQRBY4Sz39WkhxajZJ57Fzs8wVbtsQlm5ScKIR1QLYqv/ultBnobObtlUyxpxoLodpixrsf36Og=="], - "@smithy/util-retry": ["@smithy/util-retry@4.2.12", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ=="], + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - "@smithy/util-stream": ["@smithy/util-stream@4.5.20", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.15", "@smithy/node-http-handler": "^4.5.0", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw=="], + "forwarded-parse": ["forwarded-parse@2.1.2", "", {}, "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="], - "@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw=="], + "fraction.js": ["fraction.js@5.3.4", "", {}, "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ=="], - "@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="], + "framer-motion": ["framer-motion@12.35.0", "", { "dependencies": { "motion-dom": "^12.35.0", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-w8hghCMQ4oq10j6aZh3U2yeEQv5K69O/seDI/41PK4HtgkLrcBovUNc0ayBC3UyyU7V1mrY2yLzvYdWJX9pGZQ=="], - "@smithy/util-waiter": ["@smithy/util-waiter@4.2.13", "", { "dependencies": { "@smithy/abort-controller": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-2zdZ9DTHngRtcYxJK1GUDxruNr53kv5W2Lupe0LMU+Imr6ohQg8M2T14MNkj1Y0wS3FFwpgpGQyvuaMF7CiTmQ=="], + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], - "@smithy/uuid": ["@smithy/uuid@1.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g=="], + "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], - "@sqltools/formatter": ["@sqltools/formatter@1.2.5", "", {}, "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw=="], + "fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], - "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + "fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], - "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], - "@surma/rollup-plugin-off-main-thread": ["@surma/rollup-plugin-off-main-thread@2.2.3", "", { "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", "magic-string": "^0.25.0", "string.prototype.matchall": "^4.0.6" } }, "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "@svgdotjs/svg.draggable.js": ["@svgdotjs/svg.draggable.js@3.0.6", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA=="], + "function-bay": ["function-bay@workspace:src/systems/function-bay/packages/function-bay"], - "@svgdotjs/svg.filter.js": ["@svgdotjs/svg.filter.js@3.0.9", "", { "dependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw=="], + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "@svgdotjs/svg.js": ["@svgdotjs/svg.js@3.2.5", "", {}, "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ=="], + "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], - "@svgdotjs/svg.resize.js": ["@svgdotjs/svg.resize.js@2.0.5", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4", "@svgdotjs/svg.select.js": "^4.0.1" } }, "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA=="], + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], - "@svgdotjs/svg.select.js": ["@svgdotjs/svg.select.js@4.0.3", "", { "peerDependencies": { "@svgdotjs/svg.js": "^3.2.4" } }, "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg=="], + "gauge": ["gauge@4.0.4", "", { "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.5" } }, "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg=="], - "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.25", "", { "dependencies": { "@tanstack/virtual-core": "3.15.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-bmNoqMu6gcAW9JGrKVB0Q1tN1i5RONZF8r1fW0bbE4Oyf3DwEGnzzQJ2OW+Ozg1P4s8PyugkHg2ULZoFQN+cqw=="], + "gaxios": ["gaxios@6.7.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", "node-fetch": "^2.6.9", "uuid": "^9.0.1" } }, "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ=="], - "@tanstack/virtual-core": ["@tanstack/virtual-core@3.15.0", "", {}, "sha512-0AwPGx0I8QxPYjAxShT/+z+ZOe9u8mW5rsXvivCTjRfRmz9a43+3mRyi4wwlyoUqOC56q/jatKa0Bh9M99BEHQ=="], + "gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="], - "@tediousjs/connection-string": ["@tediousjs/connection-string@0.5.0", "", {}, "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ=="], + "generate-function": ["generate-function@2.3.1", "", { "dependencies": { "is-property": "^1.0.2" } }, "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ=="], - "@tiptap/core": ["@tiptap/core@3.6.1", "", { "peerDependencies": { "@tiptap/pm": "^3.6.1" } }, "sha512-Ascvlh0PmScOJyPxcgPOqFLSOruY/7JjPYdTyqShOIks1S2dr3w8A07omQCmeEHI0mX9L2eZyR2qXwFlyMdfEA=="], + "generator": ["generator@workspace:scripts/generators"], - "@tiptap/extension-blockquote": ["@tiptap/extension-blockquote@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-LQzn6aGtL4WXz2+rYshl/7/VnP2qJTpD7fWL96GXAzhqviPEY1bJES7poqJb3MU/gzl8VJUVzVzU1VoVfUKlbA=="], + "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], - "@tiptap/extension-bold": ["@tiptap/extension-bold@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-sQklEWiyf58yDjiHtm5vmkVjfIc/cBuSusmCsQ0q9vGYnEF1iOHKhGpvnCeEXNeqF3fiJQRlquzt/6ymle3Iwg=="], + "generic-names": ["generic-names@4.0.0", "", { "dependencies": { "loader-utils": "^3.2.0" } }, "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A=="], - "@tiptap/extension-bubble-menu": ["@tiptap/extension-bubble-menu@3.20.0", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-MDosUfs8Tj+nwg8RC+wTMWGkLJORXmbR6YZgbiX4hrc7G90Gopdd6kj6ht5/T8t7dLLaX7N0+DEHdUEPGED7dw=="], + "generic-pool": ["generic-pool@3.9.0", "", {}, "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="], - "@tiptap/extension-bullet-list": ["@tiptap/extension-bullet-list@3.20.0", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.0" } }, "sha512-OcKMeopBbqWzhSi6o8nNz0aayogg1sfOAhto3NxJu3Ya32dwBFqmHXSYM6uW4jOphNvVPyjiq9aNRh3qTdd1dw=="], + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], - "@tiptap/extension-character-count": ["@tiptap/extension-character-count@3.6.1", "", { "peerDependencies": { "@tiptap/extensions": "^3.6.1" } }, "sha512-7D1etVbA9g2e9aDWfbPEZPTprjYr+YQgcfeUNTWFJDRPrzWLgv0R6HOAr4fEmAvgFLXegnn+VXv5pcMfj8kK0g=="], + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - "@tiptap/extension-code": ["@tiptap/extension-code@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-TYDWFeSQ9umiyrqsT6VecbuhL8XIHkUhO+gEk0sVvH67ZLwjFDhAIIgWIr1/dbIGPcvMZM19E7xUUhAdIaXaOQ=="], + "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], - "@tiptap/extension-code-block": ["@tiptap/extension-code-block@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-lBbmNek14aCjrHcBcq3PRqWfNLvC6bcRa2Osc6e/LtmXlcpype4f6n+Yx+WZ+f2uUh0UmDRCz7BEyUETEsDmlQ=="], + "get-func-name": ["get-func-name@2.0.2", "", {}, "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ=="], - "@tiptap/extension-code-block-lowlight": ["@tiptap/extension-code-block-lowlight@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/extension-code-block": "^3.6.1", "@tiptap/pm": "^3.6.1", "highlight.js": "^11", "lowlight": "^2 || ^3" } }, "sha512-xAfiQKWzOYiiuL9yi4vX7V5O5bQEXV2ZWMSPtYoBggbRN8Ja12qMlUchpZQMs4IiiScjjFqMpWaDL7cYrtGpwA=="], + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - "@tiptap/extension-collaboration": ["@tiptap/extension-collaboration@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1", "@tiptap/y-tiptap": "^3.0.0-beta.3", "yjs": "^13" } }, "sha512-c0hkH/90pf/3Aevy2MgW7Hg2yeV4fkeOFoBWEu5nwA1YeulJL+usGQrudhpBSgzAvpv94OZXkdVQjJwRq1hvzg=="], + "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], - "@tiptap/extension-color": ["@tiptap/extension-color@3.20.0", "", { "peerDependencies": { "@tiptap/extension-text-style": "^3.20.0" } }, "sha512-KGXQ3I18uLHQ61FZpXDu0gH6+0jqmDkVwkPNXmM3oPNDSH80SG5UeZlrXi/PwtlusePJ3dFHtoQ1g6j2bJUssg=="], + "get-port-please": ["get-port-please@3.2.0", "", {}, "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A=="], - "@tiptap/extension-document": ["@tiptap/extension-document@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-oJfLIG3vAtZo/wg29WiBcyWt22KUgddpP8wqtCE+kY5Dw8znLR9ehNmVWlSWJA5OJUMO0ntAHx4bBT+I2MBd5w=="], + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "@tiptap/extension-drag-handle": ["@tiptap/extension-drag-handle@3.6.1", "", { "dependencies": { "@floating-ui/dom": "^1.6.13" }, "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/extension-collaboration": "^3.6.1", "@tiptap/extension-node-range": "^3.6.1", "@tiptap/pm": "^3.6.1", "@tiptap/y-tiptap": "^3.0.0-beta.3" } }, "sha512-+U4HhT9eRqBPY9FYvpHoRKH/DSfJIt8bS3AuaG8wsq3h1YhZFTzqjpnmYHVnVcllT2kT555JVAQQe4bMlI/1Lg=="], + "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - "@tiptap/extension-drag-handle-react": ["@tiptap/extension-drag-handle-react@3.6.1", "", { "peerDependencies": { "@tiptap/extension-drag-handle": "^3.6.1", "@tiptap/pm": "^3.6.1", "@tiptap/react": "^3.6.1", "react": "^16.8 || ^17 || ^18 || ^19", "react-dom": "^16.8 || ^17 || ^18 || ^19" } }, "sha512-n92Rk+57+koTiHk9kffOpnHEMk8cTpTpJUu/CVIV5Wy3si0xQoMJ7rQsD4qQhRNBe9izqQbAmJed9bGgmZkFiw=="], + "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "@tiptap/extension-dropcursor": ["@tiptap/extension-dropcursor@3.20.0", "", { "peerDependencies": { "@tiptap/extensions": "^3.20.0" } }, "sha512-d+cxplRlktVgZPwatnc34IArlppM0IFKS1J5wLk+ba1jidizsbMVh45tP/BTK2flhyfRqcNoB5R0TArhUpbkNQ=="], + "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], - "@tiptap/extension-floating-menu": ["@tiptap/extension-floating-menu@3.20.0", "", { "peerDependencies": { "@floating-ui/dom": "^1.0.0", "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-rYs4Bv5pVjqZ/2vvR6oe7ammZapkAwN51As/WDbemvYDjfOGRqK58qGauUjYZiDzPOEIzI2mxGwsZ4eJhPW4Ig=="], + "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], - "@tiptap/extension-gapcursor": ["@tiptap/extension-gapcursor@3.20.0", "", { "peerDependencies": { "@tiptap/extensions": "^3.20.0" } }, "sha512-P/LasfvG9/qFq43ZAlNbAnPnXC+/RJf49buTrhtFvI9Zg0+Lbpjx1oh6oMHB19T88Y28KtrckfFZ8aTSUWDq6w=="], + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - "@tiptap/extension-hard-break": ["@tiptap/extension-hard-break@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-rqvhMOw4f+XQmEthncbvDjgLH6fz8L9splnKZC7OeS0eX8b0qd7+xI1u5kyxF3KA2Z0BnigES++jjWuecqV6mA=="], + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - "@tiptap/extension-heading": ["@tiptap/extension-heading@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-EsJrPUPxQqPwJNuboX/Z/l+f2YleJWYMJ75TyCfBrPhOkcaXasiUSyfK/qm9NxcFOGPTgnTMAhE9PfQ04eptQQ=="], + "globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], - "@tiptap/extension-highlight": ["@tiptap/extension-highlight@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-ANL1wFz0s1ScNR4uBfO0s6Sz+qqGp2u6ynrCVk6TCT3d10CQ+gD1gSDTrVRC3CtlMKtHHH4fYrFAq284+J0gKA=="], + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], - "@tiptap/extension-horizontal-rule": ["@tiptap/extension-horizontal-rule@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-6uvcutFMv+9wPZgptDkbRDjAm3YVxlibmkhWD5GuaWwS9L/yUtobpI3GycujRSUZ8D3q6Q9J7LqpmQtQRTalWA=="], + "globalyzer": ["globalyzer@0.1.0", "", {}, "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="], - "@tiptap/extension-image": ["@tiptap/extension-image@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-0t7HYncV0kYEQS79NFczxdlZoZ8zu8X4VavDqt+mbSAUKRq3gCvgtZ5Zyd778sNmtmbz3arxkEYMIVou2swD0g=="], + "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], - "@tiptap/extension-italic": ["@tiptap/extension-italic@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-/DhnKQF8yN8RxtuL8abZ28wd5281EaGoE2Oha35zXSOF1vNYnbyt8Ymkv/7u1BcWEWTvRPgaju0YCGXisPRLYw=="], + "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], - "@tiptap/extension-link": ["@tiptap/extension-link@3.20.0", "", { "dependencies": { "linkifyjs": "^4.3.2" }, "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-qI/5A+R0ZWBxo/8HxSn1uOyr7odr3xHBZ/gzOR1GUJaZqjlJxkWFX0RtXMbLKEGEvT25o345cF7b0wFznEh8qA=="], + "google-auth-library": ["google-auth-library@9.15.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.1.1", "gcp-metadata": "^6.1.0", "gtoken": "^7.0.0", "jws": "^4.0.0" } }, "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng=="], - "@tiptap/extension-list": ["@tiptap/extension-list@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-+V0/gsVWAv+7vcY0MAe6D52LYTIicMSHw00wz3ISZgprSb2yQhJ4+4gurOnUrQ4Du3AnRQvxPROaofwxIQ66WQ=="], + "google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], - "@tiptap/extension-list-item": ["@tiptap/extension-list-item@3.20.0", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.0" } }, "sha512-qEtjaaGPuqaFB4VpLrGDoIe9RHnckxPfu6d3rc22ap6TAHCDyRv05CEyJogqccnFceG/v5WN4znUBER8RWnWHA=="], + "google-protobuf": ["google-protobuf@3.15.8", "", {}, "sha512-2jtfdqTaSxk0cuBJBtTTWsot4WtR9RVr2rXg7x7OoqiuOKopPrwXpM1G4dXIkLcUNRh3RKzz76C8IOkksZSeOw=="], - "@tiptap/extension-list-keymap": ["@tiptap/extension-list-keymap@3.20.0", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.0" } }, "sha512-Z4GvKy04Ms4cLFN+CY6wXswd36xYsT2p/YL0V89LYFMZTerOeTjFYlndzn6svqL8NV1PRT5Diw4WTTxJSmcJPA=="], + "googleapis-common": ["googleapis-common@7.2.0", "", { "dependencies": { "extend": "^3.0.2", "gaxios": "^6.0.3", "google-auth-library": "^9.7.0", "qs": "^6.7.0", "url-template": "^2.0.8", "uuid": "^9.0.0" } }, "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA=="], - "@tiptap/extension-node-range": ["@tiptap/extension-node-range@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-CB9La+HmR52BwMtuOOh1qPBTMpxMAkLqz5w0AiqEnrQ0OCumP+RvZgF1CGDqoIGKzrwFRxoHTaMLq/xmoVtqzA=="], + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - "@tiptap/extension-ordered-list": ["@tiptap/extension-ordered-list@3.20.0", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.0" } }, "sha512-jVKnJvrizLk7etwBMfyoj6H2GE4M+PD4k7Bwp6Bh1ohBWtfIA1TlngdS842Mx5i1VB2e3UWIwr8ZH46gl6cwMA=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "@tiptap/extension-paragraph": ["@tiptap/extension-paragraph@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-mM99zK4+RnEXIMCv6akfNATAs0Iija6FgyFA9J9NZ6N4o8y9QiNLLa6HjLpAC+W+VoCgQIekyoF/Q9ftxmAYDQ=="], + "grammex": ["grammex@3.1.12", "", {}, "sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ=="], - "@tiptap/extension-placeholder": ["@tiptap/extension-placeholder@3.20.0", "", { "peerDependencies": { "@tiptap/extensions": "^3.20.0" } }, "sha512-ZhYD3L5m16ydSe2z8vqz+RdtAG/iOQaFHHedFct70tKRoLqi2ajF5kgpemu8DwpaRTcyiCN4G99J/+MqehKNjQ=="], + "graphmatch": ["graphmatch@1.1.1", "", {}, "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg=="], - "@tiptap/extension-strike": ["@tiptap/extension-strike@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-0vcTZRRAiDfon3VM1mHBr9EFmTkkUXMhm0Xtdtn0bGe+sIqufyi+hUYTEw93EQOD9XNsPkrud6jzQNYpX2H3AQ=="], + "growl": ["growl@1.10.5", "", {}, "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="], - "@tiptap/extension-subscript": ["@tiptap/extension-subscript@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-EX3GPey4Gp9W04zM2MsP5OfMnwGtQTh1Q0ZokJAdENHpyXbche9WjK31FTzwEmTSqlU5stSsH5KwhSYlDwm5rA=="], + "grpc-tools": ["grpc-tools@1.13.1", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0" }, "bin": { "grpc_tools_node_protoc": "bin/protoc.js", "grpc_tools_node_protoc_plugin": "bin/protoc_plugin.js" } }, "sha512-0sttMUxThNIkCTJq5qI0xXMz5zWqV2u3yG1kR3Sj9OokGIoyRBFjoInK9NyW7x5fH7knj48Roh1gq5xbl0VoDQ=="], - "@tiptap/extension-superscript": ["@tiptap/extension-superscript@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-NNFv58LM/7JMu4aq9Apq8yuaB8MDL5dvVZ7R6qMuQNZDVGAGgoiBqtglA1RXldNl/9IFcVg67rT8oF86qykYKA=="], + "grpc_tools_node_protoc_ts": ["grpc_tools_node_protoc_ts@5.3.3", "", { "dependencies": { "google-protobuf": "3.15.8", "handlebars": "4.7.7" }, "bin": { "protoc-gen-ts": "bin/protoc-gen-ts" } }, "sha512-M/YrklvVXMtuuj9kb42PxeouZhs7Ul+R4e/31XwrankUcKL8cQQP50Q9q+KEHGyHQaPt6VtKKsxMgLaKbCxeww=="], - "@tiptap/extension-table": ["@tiptap/extension-table@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-DRVy+hqysOWeB6RCaveV06+eTpq8JnBFowx8fkAdcyyLVPEaeZvnIvulL8vMYJjSOqxJ7rCLoqhK2N6CXbewiQ=="], + "gtoken": ["gtoken@7.1.0", "", { "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" } }, "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw=="], - "@tiptap/extension-table-cell": ["@tiptap/extension-table-cell@3.6.1", "", { "peerDependencies": { "@tiptap/extension-table": "^3.6.1" } }, "sha512-O4JS/kcsNtW0vWCJyu6RAomSrknEUrEiDb4/V1qscvSeQUe51Ou6yFDZyFiFCyyte0O1j3HAo5I++8LfhBYFeQ=="], + "gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="], - "@tiptap/extension-table-header": ["@tiptap/extension-table-header@3.6.1", "", { "peerDependencies": { "@tiptap/extension-table": "^3.6.1" } }, "sha512-zKJLxGVM1qfB2Gllrpt/q6XEWmAwzD0+B2gRegW1HekmDj0q2uPaBDwU7R6lhDXniqp/JyQ7zcFrZIOF8/Ul+w=="], + "hachure-fill": ["hachure-fill@0.5.2", "", {}, "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="], - "@tiptap/extension-table-row": ["@tiptap/extension-table-row@3.6.1", "", { "peerDependencies": { "@tiptap/extension-table": "^3.6.1" } }, "sha512-9YwnfKWiDr/Fz/SCwBvkcN7aHkXKfM8YNlsz4mwrLaP38cJBDabnxeZarNAqPSZDejp9ceUSwhQgmm3U0dP5YA=="], + "handlebars": ["handlebars@4.7.7", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA=="], - "@tiptap/extension-task-item": ["@tiptap/extension-task-item@3.6.1", "", { "peerDependencies": { "@tiptap/extension-list": "^3.6.1" } }, "sha512-xgqLyt+sMwHWTNf/Z8TZmJEqKjMTbqRjyoiCR2ZF4HdQlDa6xLCZ5zTUYsSpASHmAWrKRA7vZUrsiOd13ua+tQ=="], + "has-ansi": ["has-ansi@2.0.0", "", { "dependencies": { "ansi-regex": "^2.0.0" } }, "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg=="], - "@tiptap/extension-task-list": ["@tiptap/extension-task-list@3.6.1", "", { "peerDependencies": { "@tiptap/extension-list": "^3.6.1" } }, "sha512-IHAIV0lcp0y3mM12LSJPm+iIAliIvKKGc/EQCUddITSwckNX2vqPHpqbZGyLhTG0mFyIb2wKJyeWMnws7f2zGA=="], + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], - "@tiptap/extension-text": ["@tiptap/extension-text@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-tf8bE8tSaOEWabCzPm71xwiUhyMFKqY9jkP5af3Kr1/F45jzZFIQAYZooHI/+zCHRrgJ99MQHKHe1ZNvODrKHQ=="], + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "@tiptap/extension-text-align": ["@tiptap/extension-text-align@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-4s0r+bovtH6yeGDUD+Ui8j5WOV5koB5P6AuzOMqoLwaFGRSkKf64ly6DXjjmjIgnYCLZN/XO6llaQKVVdvad2g=="], + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], - "@tiptap/extension-text-style": ["@tiptap/extension-text-style@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-zyWW1a6W+kaXAn3wv2svJ1XuVMapujftvH7Xn2Q3QmKKiDkO+NiFkrGe8BhMopu8Im51nO3NylIgVA0X1mS1rQ=="], + "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], - "@tiptap/extension-typography": ["@tiptap/extension-typography@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-XpstIJ/hCK6+N87DdzjaYie1iH1gunbDK0UCsqsLemd8rMR/WAlF04M/yeJ6F2QtNzNh83bkoTxyNAHLDdUm2A=="], + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - "@tiptap/extension-underline": ["@tiptap/extension-underline@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-LzNXuy2jwR/y+ymoUqC72TiGzbOCjioIjsDu0MNYpHuHqTWPK5aV9Mh0nbZcYFy/7fPlV1q0W139EbJeYBZEAQ=="], + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - "@tiptap/extensions": ["@tiptap/extensions@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-HIsXX942w3nbxEQBlMAAR/aa6qiMBEP7CsSMxaxmTIVAmW35p6yUASw6GdV1u0o3lCZjXq2OSRMTskzIqi5uLg=="], + "has-unicode": ["has-unicode@2.0.1", "", {}, "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="], - "@tiptap/pm": ["@tiptap/pm@3.20.0", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.24.1", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-jn+2KnQZn+b+VXr8EFOJKsnjVNaA4diAEr6FOazupMt8W8ro1hfpYtZ25JL87Kao/WbMze55sd8M8BDXLUKu1A=="], + "hash-base": ["hash-base@3.1.2", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.1" } }, "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg=="], - "@tiptap/react": ["@tiptap/react@3.20.0", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "fast-equals": "^5.3.3", "use-sync-external-store": "^1.4.0" }, "optionalDependencies": { "@tiptap/extension-bubble-menu": "^3.20.0", "@tiptap/extension-floating-menu": "^3.20.0" }, "peerDependencies": { "@tiptap/core": "^3.20.0", "@tiptap/pm": "^3.20.0", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-jFLNzkmn18zqefJwPje0PPd9VhZ7Oy28YHiSvSc7YpBnQIbuN/HIxZ2lrOsKyEHta0WjRZjfU5X1pGxlbcGwOA=="], + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - "@tiptap/starter-kit": ["@tiptap/starter-kit@3.20.0", "", { "dependencies": { "@tiptap/core": "^3.20.0", "@tiptap/extension-blockquote": "^3.20.0", "@tiptap/extension-bold": "^3.20.0", "@tiptap/extension-bullet-list": "^3.20.0", "@tiptap/extension-code": "^3.20.0", "@tiptap/extension-code-block": "^3.20.0", "@tiptap/extension-document": "^3.20.0", "@tiptap/extension-dropcursor": "^3.20.0", "@tiptap/extension-gapcursor": "^3.20.0", "@tiptap/extension-hard-break": "^3.20.0", "@tiptap/extension-heading": "^3.20.0", "@tiptap/extension-horizontal-rule": "^3.20.0", "@tiptap/extension-italic": "^3.20.0", "@tiptap/extension-link": "^3.20.0", "@tiptap/extension-list": "^3.20.0", "@tiptap/extension-list-item": "^3.20.0", "@tiptap/extension-list-keymap": "^3.20.0", "@tiptap/extension-ordered-list": "^3.20.0", "@tiptap/extension-paragraph": "^3.20.0", "@tiptap/extension-strike": "^3.20.0", "@tiptap/extension-text": "^3.20.0", "@tiptap/extension-underline": "^3.20.0", "@tiptap/extensions": "^3.20.0", "@tiptap/pm": "^3.20.0" } }, "sha512-W4+1re35pDNY/7rpXVg+OKo/Fa4Gfrn08Bq3E3fzlJw6gjE3tYU8dY9x9vC2rK9pd9NOp7Af11qCFDaWpohXkw=="], + "hast-util-embedded": ["hast-util-embedded@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-is-element": "^3.0.0" } }, "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA=="], - "@tiptap/suggestion": ["@tiptap/suggestion@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-C2bDamOCqcWbyB4Ogvk1pCUkbrnIMOsVYyt8sd1JsjZUA/QYTBWt8Bt/3venI1mx6ad47oCsU16KDQRKKfu+cA=="], + "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], - "@tiptap/y-tiptap": ["@tiptap/y-tiptap@3.0.3", "", { "dependencies": { "lib0": "^0.2.100" }, "peerDependencies": { "prosemirror-model": "^1.7.1", "prosemirror-state": "^1.2.3", "prosemirror-view": "^1.9.10", "y-protocols": "^1.0.1", "yjs": "^13.5.38" } }, "sha512-8UvuV4lTisCE9cMTc/X8kRyTn9edUO7Kball0I6wb17VwZSjNDfh/YKtP4O5vcPawEzFHQIvZGq/k1h37kAf0w=="], + "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], - "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], + "hast-util-has-property": ["hast-util-has-property@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA=="], - "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + "hast-util-is-body-ok-link": ["hast-util-is-body-ok-link@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ=="], - "@toon-format/toon": ["@toon-format/toon@2.1.0", "", {}, "sha512-JwWptdF5eOA0HaQxbKAzkpQtR4wSWTEfDlEy/y3/4okmOAX1qwnpLZMmtEWr+ncAhTTY1raCKH0kteHhSXnQqg=="], + "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], - "@tootallnate/once": ["@tootallnate/once@1.1.2", "", {}, "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="], + "hast-util-minify-whitespace": ["hast-util-minify-whitespace@1.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "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" } }, "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw=="], - "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], - "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + "hast-util-phrasing": ["hast-util-phrasing@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-embedded": "^3.0.0", "hast-util-has-property": "^3.0.0", "hast-util-is-body-ok-link": "^3.0.0", "hast-util-is-element": "^3.0.0" } }, "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ=="], - "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + "hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="], - "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + "hast-util-sanitize": ["hast-util-sanitize@5.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "unist-util-position": "^5.0.0" } }, "sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg=="], - "@types/body-parser": ["@types/body-parser@1.19.6", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="], + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], - "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], + "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], - "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + "hast-util-to-mdast": ["hast-util-to-mdast@10.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-phrasing": "^3.0.0", "hast-util-to-html": "^9.0.0", "hast-util-to-text": "^4.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "mdast-util-to-string": "^4.0.0", "rehype-minify-whitespace": "^6.0.0", "trim-trailing-lines": "^2.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ=="], - "@types/chai-subset": ["@types/chai-subset@1.3.6", "", { "peerDependencies": { "@types/chai": "<5.2.0" } }, "sha512-m8lERkkQj+uek18hXOZuec3W/fCRTrU4hrnXjH3qhHy96ytuPaPiWGgu7sJb7tZxZonO75vYAjCvpe/e4VUwRw=="], + "hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="], - "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], + "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], - "@types/cors": ["@types/cors@2.8.19", "", { "dependencies": { "@types/node": "*" } }, "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg=="], + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], - "@types/d3": ["@types/d3@7.4.3", "", { "dependencies": { "@types/d3-array": "*", "@types/d3-axis": "*", "@types/d3-brush": "*", "@types/d3-chord": "*", "@types/d3-color": "*", "@types/d3-contour": "*", "@types/d3-delaunay": "*", "@types/d3-dispatch": "*", "@types/d3-drag": "*", "@types/d3-dsv": "*", "@types/d3-ease": "*", "@types/d3-fetch": "*", "@types/d3-force": "*", "@types/d3-format": "*", "@types/d3-geo": "*", "@types/d3-hierarchy": "*", "@types/d3-interpolate": "*", "@types/d3-path": "*", "@types/d3-polygon": "*", "@types/d3-quadtree": "*", "@types/d3-random": "*", "@types/d3-scale": "*", "@types/d3-scale-chromatic": "*", "@types/d3-selection": "*", "@types/d3-shape": "*", "@types/d3-time": "*", "@types/d3-time-format": "*", "@types/d3-timer": "*", "@types/d3-transition": "*", "@types/d3-zoom": "*" } }, "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww=="], + "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], - "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], + "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], - "@types/d3-axis": ["@types/d3-axis@3.0.6", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw=="], + "highlight.js": ["highlight.js@11.11.1", "", {}, "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w=="], - "@types/d3-brush": ["@types/d3-brush@3.0.6", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A=="], + "hoist-non-react-statics": ["hoist-non-react-statics@3.3.2", "", { "dependencies": { "react-is": "^16.7.0" } }, "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="], - "@types/d3-chord": ["@types/d3-chord@3.0.6", "", {}, "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg=="], + "hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], - "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], + "hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], - "@types/d3-contour": ["@types/d3-contour@3.0.6", "", { "dependencies": { "@types/d3-array": "*", "@types/geojson": "*" } }, "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg=="], + "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], - "@types/d3-delaunay": ["@types/d3-delaunay@6.0.4", "", {}, "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw=="], + "html-minifier-terser": ["html-minifier-terser@6.1.0", "", { "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", "commander": "^8.3.0", "he": "^1.2.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.10.0" }, "bin": { "html-minifier-terser": "cli.js" } }, "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw=="], - "@types/d3-dispatch": ["@types/d3-dispatch@3.0.7", "", {}, "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA=="], + "html-to-text": ["html-to-text@9.0.5", "", { "dependencies": { "@selderee/plugin-htmlparser2": "^0.11.0", "deepmerge": "^4.3.1", "dom-serializer": "^2.0.0", "htmlparser2": "^8.0.2", "selderee": "^0.11.0" } }, "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg=="], - "@types/d3-drag": ["@types/d3-drag@3.0.7", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ=="], + "html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="], - "@types/d3-dsv": ["@types/d3-dsv@3.0.7", "", {}, "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g=="], + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], - "@types/d3-ease": ["@types/d3-ease@3.0.2", "", {}, "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="], + "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], - "@types/d3-fetch": ["@types/d3-fetch@3.0.7", "", { "dependencies": { "@types/d3-dsv": "*" } }, "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA=="], + "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], - "@types/d3-force": ["@types/d3-force@3.0.10", "", {}, "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw=="], + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], - "@types/d3-format": ["@types/d3-format@3.0.4", "", {}, "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g=="], + "http-proxy-agent": ["http-proxy-agent@9.0.0", "", { "dependencies": { "agent-base": "9.0.0", "debug": "^4.3.4" } }, "sha512-FcF8VhXYLQcxWCnt/cCpT2apKsRDUGeVEeMqGu4HSTu29U8Yw0TLOjdYIlDsYk3IkUh+taX4IDWpPcCqKDhCjA=="], - "@types/d3-geo": ["@types/d3-geo@3.1.0", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ=="], + "http-status-codes": ["http-status-codes@2.3.0", "", {}, "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA=="], - "@types/d3-hierarchy": ["@types/d3-hierarchy@3.1.7", "", {}, "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg=="], + "https-proxy-agent": ["https-proxy-agent@9.0.0", "", { "dependencies": { "agent-base": "9.0.0", "debug": "^4.3.4" } }, "sha512-/MVmHp58WkOypgFhCLk4fzpPcFQvTJ/e6LBI7irpIO2HfxUbpmYoHF+KzipzJpxxzJu7aJNWQ0xojJ/dzV2G5g=="], - "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="], + "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - "@types/d3-path": ["@types/d3-path@3.1.1", "", {}, "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="], + "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="], - "@types/d3-polygon": ["@types/d3-polygon@3.0.2", "", {}, "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA=="], + "hyphenate-style-name": ["hyphenate-style-name@1.1.0", "", {}, "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw=="], - "@types/d3-quadtree": ["@types/d3-quadtree@3.0.6", "", {}, "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg=="], + "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], - "@types/d3-random": ["@types/d3-random@3.0.3", "", {}, "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ=="], + "icss-replace-symbols": ["icss-replace-symbols@1.1.0", "", {}, "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg=="], - "@types/d3-scale": ["@types/d3-scale@4.0.9", "", { "dependencies": { "@types/d3-time": "*" } }, "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw=="], + "icss-utils": ["icss-utils@5.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="], - "@types/d3-scale-chromatic": ["@types/d3-scale-chromatic@3.1.0", "", {}, "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ=="], + "idb": ["idb@8.0.3", "", {}, "sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg=="], - "@types/d3-selection": ["@types/d3-selection@3.0.11", "", {}, "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="], + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - "@types/d3-shape": ["@types/d3-shape@3.1.8", "", { "dependencies": { "@types/d3-path": "*" } }, "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w=="], + "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - "@types/d3-time": ["@types/d3-time@3.0.4", "", {}, "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="], + "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], - "@types/d3-time-format": ["@types/d3-time-format@4.0.3", "", {}, "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg=="], + "immutable": ["immutable@5.1.5", "", {}, "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A=="], - "@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="], + "import-cwd": ["import-cwd@3.0.0", "", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], - "@types/d3-transition": ["@types/d3-transition@3.0.9", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg=="], + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - "@types/d3-zoom": ["@types/d3-zoom@3.0.8", "", { "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw=="], + "import-from": ["import-from@3.0.0", "", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ=="], - "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], + "import-in-the-middle": ["import-in-the-middle@2.0.6", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw=="], - "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], + "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], - "@types/diff": ["@types/diff@7.0.2", "", {}, "sha512-JSWRMozjFKsGlEjiiKajUjIJVKuKdE3oVy2DNtK+fUo8q82nhFZ2CPQwicAIkXrofahDXrWJ7mjelvZphMS98Q=="], + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], - "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], + "infer-owner": ["infer-owner@1.0.4", "", {}, "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="], - "@types/express": ["@types/express@5.0.6", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "^2" } }, "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA=="], + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], - "@types/express-serve-static-core": ["@types/express-serve-static-core@5.1.1", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A=="], + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - "@types/fs-extra": ["@types/fs-extra@11.0.4", "", { "dependencies": { "@types/jsonfile": "*", "@types/node": "*" } }, "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ=="], + "ini": ["ini@6.0.0", "", {}, "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ=="], - "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], + "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], - "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + "inline-style-prefixer": ["inline-style-prefixer@7.0.1", "", { "dependencies": { "css-in-js-utils": "^3.1.0" } }, "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw=="], - "@types/hoist-non-react-statics": ["@types/hoist-non-react-statics@3.3.7", "", { "dependencies": { "hoist-non-react-statics": "^3.3.0" }, "peerDependencies": { "@types/react": "*" } }, "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g=="], + "input-otp": ["input-otp@1.4.2", "", { "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA=="], - "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], - "@types/isomorphic-fetch": ["@types/isomorphic-fetch@0.0.39", "", {}, "sha512-I0gou/ZdA1vMG7t7gMzL7VYu2xAKU78rW9U1l10MI0nn77pEHq3tQqHQ8hMmXdMpBlkxZOorjI4sO594Z3kKJw=="], + "internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], - "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], + "ioredis": ["ioredis@5.10.0", "", { "dependencies": { "@ioredis/commands": "1.5.1", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA=="], - "@types/js-cookie": ["@types/js-cookie@2.2.7", "", {}, "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA=="], + "ip-address": ["ip-address@10.0.1", "", {}, "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA=="], - "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + "ipaddr.js": ["ipaddr.js@2.3.0", "", {}, "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg=="], - "@types/jsonfile": ["@types/jsonfile@6.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ=="], + "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], - "@types/linkify-it": ["@types/linkify-it@3.0.5", "", {}, "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw=="], + "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], - "@types/lodash": ["@types/lodash@4.17.24", "", {}, "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ=="], + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], - "@types/lodash.throttle": ["@types/lodash.throttle@4.1.9", "", { "dependencies": { "@types/lodash": "*" } }, "sha512-PCPVfpfueguWZQB7pJQK890F2scYKoDUL3iM522AptHWn7d5NQmeS/LTEHIcLr5PaTzl3dK2Z0xSUHHTHwaL5g=="], + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], - "@types/markdown-it": ["@types/markdown-it@13.0.9", "", { "dependencies": { "@types/linkify-it": "^3", "@types/mdurl": "^1" } }, "sha512-1XPwR0+MgXLWfTn9gCsZ55AHOKW1WN+P9vr0PaQh5aerR9LLQXUbjfEAFhjmEmyoYFWAyuN2Mqkn40MZ4ukjBw=="], + "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], - "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], - "@types/mdurl": ["@types/mdurl@1.0.5", "", {}, "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA=="], + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], - "@types/minimatch": ["@types/minimatch@5.1.2", "", {}, "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA=="], + "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], - "@types/mocha": ["@types/mocha@10.0.10", "", {}, "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q=="], + "is-buffer": ["is-buffer@2.0.5", "", {}, "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="], - "@types/mongoose": ["@types/mongoose@5.11.97", "", { "dependencies": { "mongoose": "*" } }, "sha512-cqwOVYT3qXyLiGw7ueU2kX9noE8DPGRY6z8eUxudhXY8NZ7DMKYAxyZkLSevGfhCX3dO/AoX5/SO9lAzfjon0Q=="], + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], - "@types/mysql": ["@types/mysql@2.15.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA=="], + "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], - "@types/node": ["@types/node@22.19.13", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw=="], + "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], - "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], + "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], - "@types/nodemailer": ["@types/nodemailer@7.0.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g=="], + "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], - "@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="], + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], - "@types/pg": ["@types/pg@8.20.0", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow=="], + "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], - "@types/pg-pool": ["@types/pg-pool@2.0.7", "", { "dependencies": { "@types/pg": "*" } }, "sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng=="], + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - "@types/prismjs": ["@types/prismjs@1.26.6", "", {}, "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw=="], + "is-generator-function": ["is-generator-function@1.1.2", "", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="], - "@types/qs": ["@types/qs@6.14.0", "", {}, "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ=="], + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], + "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], - "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], - "@types/react-avatar-editor": ["@types/react-avatar-editor@13.0.4", "", { "dependencies": { "@types/react": "*" } }, "sha512-WQjmacEOoEYQb6CkAXYspmtruCPXFzLjEI92zV27yqveGBRkh7Quo5oYMvAgaEeqpXsGEr/wzXcdSTaH982Wtg=="], + "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], - "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="], - "@types/react-helmet": ["@types/react-helmet@6.1.11", "", { "dependencies": { "@types/react": "*" } }, "sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g=="], + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], - "@types/readable-stream": ["@types/readable-stream@4.0.23", "", { "dependencies": { "@types/node": "*" } }, "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig=="], + "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], - "@types/resolve": ["@types/resolve@1.17.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw=="], + "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], - "@types/semver": ["@types/semver@7.7.1", "", {}, "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA=="], + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - "@types/send": ["@types/send@1.2.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ=="], + "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], - "@types/serve-static": ["@types/serve-static@2.2.0", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*" } }, "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ=="], + "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], - "@types/stylis": ["@types/stylis@4.2.7", "", {}, "sha512-VgDNokpBoKF+wrdvhAAfS55OMQpL6QRglwTwNC3kIgBrzZxA4WsFj+2eLfEA/uMUDzBcEhYmjSbwQakn/i3ajA=="], + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], - "@types/tar-stream": ["@types/tar-stream@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-921gW0+g29mCJX0fRvqeHzBlE/XclDaAG0Ousy1LCghsOhvaKacDeRGEVzQP9IPfKn8Vysy7FEXAIxycpc/CMg=="], + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], - "@types/tedious": ["@types/tedious@4.0.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw=="], + "is-property": ["is-property@1.0.2", "", {}, "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="], - "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], + "is-reference": ["is-reference@1.2.1", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="], - "@types/ua-parser-js": ["@types/ua-parser-js@0.7.39", "", {}, "sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg=="], + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], - "@types/unzipper": ["@types/unzipper@0.10.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-D25im2zjyMCcgL9ag6N46+wbtJBnXIr7SI4zHf9eJD2Dw2tEB5e+p5MYkrxKIVRscs5QV0EhtU9rgXSPx90oJg=="], + "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], - "@types/use-sync-external-store": ["@types/use-sync-external-store@0.0.6", "", {}, "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg=="], + "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], - "@types/vscode": ["@types/vscode@1.110.0", "", {}, "sha512-AGuxUEpU4F4mfuQjxPPaQVyuOMhs+VT/xRok1jiHVBubHK7lBRvCuOMZG0LKUwxncrPorJ5qq/uil3IdZBd5lA=="], + "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], - "@types/webidl-conversions": ["@types/webidl-conversions@7.0.3", "", {}, "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="], + "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], - "@types/whatwg-url": ["@types/whatwg-url@11.0.5", "", { "dependencies": { "@types/webidl-conversions": "*" } }, "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ=="], + "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], - "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.56.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/type-utils": "8.56.1", "@typescript-eslint/utils": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.56.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A=="], + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.56.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg=="], + "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.56.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.56.1", "@typescript-eslint/types": "^8.56.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ=="], + "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1" } }, "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w=="], + "is-what": ["is-what@5.5.0", "", {}, "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.56.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ=="], + "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/utils": "8.56.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg=="], + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.56.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.56.1", "@typescript-eslint/tsconfig-utils": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg=="], + "isomorphic.js": ["isomorphic.js@0.2.5", "", {}, "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.56.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA=="], + "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], + "istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="], - "@typespec/ts-http-runtime": ["@typespec/ts-http-runtime@0.3.5", "", { "dependencies": { "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "tslib": "^2.6.2" } }, "sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw=="], + "istanbul-reports": ["istanbul-reports@3.2.0", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="], - "@uiw/codemirror-extensions-basic-setup": ["@uiw/codemirror-extensions-basic-setup@4.25.7", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/lint": "^6.0.0", "@codemirror/search": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-tPV/AGjF4yM22D5mnyH7EuYBkWO05wF5Y4x3lmQJo6LuHmhjh0RQsVDjqeIgNOkXT3UO9OdkL4dzxw465/JZVg=="], + "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], - "@uiw/codemirror-themes": ["@uiw/codemirror-themes@4.25.7", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-Rcx1XiQiMOJzk/efVuZioCv3VuswUb2CPmiM1NIXY5N4vEMmWLY3N8T4/WkPzJ8ZZuk7o3OH2VI5bj7729fDYg=="], + "jake": ["jake@10.9.4", "", { "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4", "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" } }, "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA=="], - "@uiw/react-codemirror": ["@uiw/react-codemirror@4.25.7", "", { "dependencies": { "@babel/runtime": "^7.18.6", "@codemirror/commands": "^6.1.0", "@codemirror/state": "^6.1.1", "@codemirror/theme-one-dark": "^6.0.0", "@uiw/codemirror-extensions-basic-setup": "4.25.7", "codemirror": "^6.0.0" }, "peerDependencies": { "@codemirror/view": ">=6.0.0", "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-s/EbEe0dFANWEgfLbfdIrrOGv0R7M1XhkKG3ShroBeH6uP9pVNQy81YHOLRCSVcytTp9zAWRNfXR/+XxZTvV7w=="], + "jest-worker": ["jest-worker@26.6.2", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" } }, "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ=="], - "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], - "@upsetjs/venn.js": ["@upsetjs/venn.js@2.0.0", "", { "optionalDependencies": { "d3-selection": "^3.0.0", "d3-transition": "^3.0.1" } }, "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw=="], + "jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], - "@vercel/ncc": ["@vercel/ncc@0.38.4", "", { "bin": { "ncc": "dist/ncc/cli.js" } }, "sha512-8LwjnlP39s08C08J5NstzriPvW1SP8Zfpp1BvC2sI35kPeZnHfxVkCwu4/+Wodgnd60UtT1n8K8zw+Mp7J9JmQ=="], + "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], - "@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="], + "js-base64": ["js-base64@3.7.8", "", {}, "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow=="], - "@visual-json/core": ["@visual-json/core@0.4.0", "", {}, "sha512-T/HvRIp7r6SehxVnO+akV72NLv2OMBEoQdYTFbpwMi6uU2TaXQOpIOHBG4r9XBz7OqC2e8aedOwal/NtqtzyCg=="], + "js-cookie": ["js-cookie@2.2.1", "", {}, "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="], - "@visual-json/react": ["@visual-json/react@0.4.0", "", { "dependencies": { "@visual-json/core": "0.4.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-qiDrXI7wu9VoTE0TaLoJp7kwRj8SQTpkS/wkts5sBPA8078zdrIKc+0u0Y8wAXGYd3udw9dNfD4kmpO48OEwXQ=="], + "js-md4": ["js-md4@0.3.2", "", {}, "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA=="], - "@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "js-tokens": ["js-tokens@10.0.0", "", {}, "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q=="], - "@vitest/coverage-v8": ["@vitest/coverage-v8@4.1.2", "", { "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.2", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magicast": "^0.5.2", "obug": "^2.1.1", "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "@vitest/browser": "4.1.2", "vitest": "4.1.2" }, "optionalPeers": ["@vitest/browser"] }, "sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg=="], + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], - "@vitest/expect": ["@vitest/expect@4.0.17", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ=="], + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], - "@vitest/mocker": ["@vitest/mocker@4.0.17", "", { "dependencies": { "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ=="], + "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], - "@vitest/pretty-format": ["@vitest/pretty-format@4.0.17", "", { "dependencies": { "tinyrainbow": "^3.0.3" } }, "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw=="], + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - "@vitest/runner": ["@vitest/runner@4.0.17", "", { "dependencies": { "@vitest/utils": "4.0.17", "pathe": "^2.0.3" } }, "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ=="], + "json-parse-better-errors": ["json-parse-better-errors@1.0.2", "", {}, "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="], - "@vitest/snapshot": ["@vitest/snapshot@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ=="], + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], - "@vitest/spy": ["@vitest/spy@4.0.17", "", {}, "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew=="], + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], - "@vitest/ui": ["@vitest/ui@4.1.2", "", { "dependencies": { "@vitest/utils": "4.1.2", "fflate": "^0.8.2", "flatted": "^3.4.2", "pathe": "^2.0.3", "sirv": "^3.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "vitest": "4.1.2" } }, "sha512-/irhyeAcKS2u6Zokagf9tqZJ0t8S6kMZq4ZG9BHZv7I+fkRrYfQX4w7geYeC2r6obThz39PDxvXQzZX+qXqGeg=="], + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "@vitest/utils": ["@vitest/utils@4.0.17", "", { "dependencies": { "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" } }, "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w=="], + "json-schema-typed": ["json-schema-typed@8.0.2", "", {}, "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="], - "@vscode/test-cli": ["@vscode/test-cli@0.0.11", "", { "dependencies": { "@types/mocha": "^10.0.2", "c8": "^9.1.0", "chokidar": "^3.5.3", "enhanced-resolve": "^5.15.0", "glob": "^10.3.10", "minimatch": "^9.0.3", "mocha": "^11.1.0", "supports-color": "^9.4.0", "yargs": "^17.7.2" }, "bin": { "vscode-test": "out/bin.mjs" } }, "sha512-qO332yvzFqGhBMJrp6TdwbIydiHgCtxXc2Nl6M58mbH/Z+0CyLR76Jzv4YWPEthhrARprzCRJUqzFvTHFhTj7Q=="], + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], - "@vscode/test-electron": ["@vscode/test-electron@2.5.2", "", { "dependencies": { "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.5", "jszip": "^3.10.1", "ora": "^8.1.0", "semver": "^7.6.2" } }, "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg=="], + "json-with-bigint": ["json-with-bigint@3.5.8", "", {}, "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw=="], - "@xmldom/is-dom-node": ["@xmldom/is-dom-node@1.0.1", "", {}, "sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q=="], + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], - "@xmldom/xmldom": ["@xmldom/xmldom@0.9.8", "", {}, "sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A=="], + "jsonata": ["jsonata@2.1.0", "", {}, "sha512-OCzaRMK8HobtX8fp37uIVmL8CY1IGc/a6gLsDqz3quExFR09/U78HUzWYr7T31UEB6+Eu0/8dkVD5fFDOl9a8w=="], - "@xobotyi/scrollbar-width": ["@xobotyi/scrollbar-width@1.9.5", "", {}, "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ=="], + "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], - "@yr/monotone-cubic-spline": ["@yr/monotone-cubic-spline@1.0.3", "", {}, "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA=="], + "jsonwebtoken": ["jsonwebtoken@9.0.3", "", { "dependencies": { "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g=="], - "abbrev": ["abbrev@3.0.1", "", {}, "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg=="], + "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], - "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + "just-bash": ["just-bash@2.14.5", "", { "dependencies": { "diff": "^8.0.2", "fast-xml-parser": "^5.7.3", "file-type": "^21.2.0", "ini": "^6.0.0", "minimatch": "^10.1.1", "modern-tar": "^0.7.3", "papaparse": "^5.5.3", "quickjs-emscripten": "^0.32.0", "re2js": "^1.2.1", "seek-bzip": "^2.0.0", "smol-toml": "^1.6.0", "sprintf-js": "^1.1.3", "sql.js": "^1.13.0", "turndown": "^7.2.2", "yaml": "^2.8.2" }, "optionalDependencies": { "@mongodb-js/zstd": "^7.0.0", "node-liblzma": "^2.0.3" }, "bin": { "just-bash": "dist/bin/just-bash.js", "just-bash-shell": "dist/bin/shell/shell.js" } }, "sha512-MCBGnRlDeZ/MM7mcw+ZuSGFMBsggajrmKz6e/hrOAN7syvVZkjiY+Vh2wyCwN/CdcnAX5SxbiQB51n5nrQuX+g=="], - "abort-controller-x": ["abort-controller-x@0.4.3", "", {}, "sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA=="], + "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], - "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], + "jws": ["jws@4.0.1", "", { "dependencies": { "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA=="], - "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + "kareem": ["kareem@3.2.0", "", {}, "sha512-VS8MWZz/cT+SqBCpVfNN4zoVz5VskR3N4+sTmUXme55e9avQHntpwpNq0yjnosISXqwJ3AQVjlbI4Dyzv//JtA=="], - "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], + "katex": ["katex@0.16.45", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA=="], - "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - "acorn-walk": ["acorn-walk@8.3.5", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw=="], + "khroma": ["khroma@2.1.0", "", {}, "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="], - "agent-base": ["agent-base@9.0.0", "", {}, "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA=="], + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], - "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], + "layout-base": ["layout-base@1.0.2", "", {}, "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="], - "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], + "leac": ["leac@0.6.0", "", {}, "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg=="], - "ai": ["ai@6.0.177", "", { "dependencies": { "@ai-sdk/gateway": "3.0.112", "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-1xQtbeWwNcLyyM86ixZhkKvT+WRXc1lvarIKqPVtsyn8F9NDikwUMBqYu+aQKDgMht50SMXh4qboYuU8MeHZZA=="], + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], - "ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "lib0": ["lib0@0.2.117", "", { "dependencies": { "isomorphic.js": "^0.2.4" }, "bin": { "0serve": "bin/0serve.js", "0gentesthtml": "bin/gentesthtml.js", "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js" } }, "sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw=="], - "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], - "algoliasearch": ["algoliasearch@5.52.1", "", { "dependencies": { "@algolia/abtesting": "1.18.1", "@algolia/client-abtesting": "5.52.1", "@algolia/client-analytics": "5.52.1", "@algolia/client-common": "5.52.1", "@algolia/client-insights": "5.52.1", "@algolia/client-personalization": "5.52.1", "@algolia/client-query-suggestions": "5.52.1", "@algolia/client-search": "5.52.1", "@algolia/ingestion": "1.52.1", "@algolia/monitoring": "1.52.1", "@algolia/recommend": "5.52.1", "@algolia/requester-browser-xhr": "5.52.1", "@algolia/requester-fetch": "5.52.1", "@algolia/requester-node-http": "5.52.1" } }, "sha512-fHA8+kXTbjagw3jkLiaS7KKrH8qe2DyOsiUhGlN4cdT77PEsfqXZl7ewDk1hsg+pJnPlnE50XtLxjR91iJOpmg=="], + "lightningcss": ["lightningcss@1.31.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.31.1", "lightningcss-darwin-arm64": "1.31.1", "lightningcss-darwin-x64": "1.31.1", "lightningcss-freebsd-x64": "1.31.1", "lightningcss-linux-arm-gnueabihf": "1.31.1", "lightningcss-linux-arm64-gnu": "1.31.1", "lightningcss-linux-arm64-musl": "1.31.1", "lightningcss-linux-x64-gnu": "1.31.1", "lightningcss-linux-x64-musl": "1.31.1", "lightningcss-win32-arm64-msvc": "1.31.1", "lightningcss-win32-x64-msvc": "1.31.1" } }, "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ=="], - "anser": ["anser@2.3.5", "", {}, "sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.31.1", "", { "os": "android", "cpu": "arm64" }, "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg=="], - "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.31.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg=="], - "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.31.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA=="], - "ansi-to-react": ["ansi-to-react@6.2.6", "", { "dependencies": { "anser": "^2.3.2", "escape-carriage": "^1.3.1", "linkify-it": "^3.0.3" }, "peerDependencies": { "react": "^16.3.2 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.3.2 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Eqi0iaMK5OZ3jsVFxWvU2B74UZBnGuHlkflKMX6wTOeH+luy9KE2O0gUkc2PxhIP1R4IO0xohv62UMFInQOSeg=="], + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.31.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A=="], - "ansis": ["ansis@3.17.0", "", {}, "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg=="], + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.31.1", "", { "os": "linux", "cpu": "arm" }, "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g=="], - "any-base": ["any-base@1.1.0", "", {}, "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg=="], - "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg=="], - "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA=="], - "apexcharts": ["apexcharts@4.7.0", "", { "dependencies": { "@svgdotjs/svg.draggable.js": "^3.0.4", "@svgdotjs/svg.filter.js": "^3.0.8", "@svgdotjs/svg.js": "^3.2.4", "@svgdotjs/svg.resize.js": "^2.0.2", "@svgdotjs/svg.select.js": "^4.0.1", "@yr/monotone-cubic-spline": "^1.0.3" } }, "sha512-iZSrrBGvVlL+nt2B1NpqfDuBZ9jX61X9I2+XV0hlYXHtTwhwLTHDKGXjNXAgFBDLuvSYCB/rq2nPWVPRv2DrGA=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA=="], - "app-root-path": ["app-root-path@3.1.0", "", {}, "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA=="], + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.31.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w=="], - "aproba": ["aproba@2.1.0", "", {}, "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew=="], + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.31.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw=="], - "are-we-there-yet": ["are-we-there-yet@3.0.1", "", { "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" } }, "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg=="], + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], - "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + "linkify-it": ["linkify-it@3.0.3", "", { "dependencies": { "uc.micro": "^1.0.1" } }, "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ=="], - "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + "linkifyjs": ["linkifyjs@4.3.2", "", {}, "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA=="], - "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], + "load-json-file": ["load-json-file@4.0.0", "", { "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" } }, "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw=="], - "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], + "load-tsconfig": ["load-tsconfig@0.2.5", "", {}, "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg=="], - "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + "loader-utils": ["loader-utils@3.3.1", "", {}, "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg=="], - "ast-v8-to-istanbul": ["ast-v8-to-istanbul@1.0.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", "js-tokens": "^10.0.0" } }, "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg=="], + "local-pkg": ["local-pkg@0.4.3", "", {}, "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g=="], - "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], + "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], - "async-ratelimiter": ["async-ratelimiter@1.6.4", "", {}, "sha512-N+13neNNogoYr6Vte76RrxDhM03/oT1Qzxe+klK+0st4UuhUD+oAPyeTe8gGOPfqvkd3cenPIc3KRKv0aLv46w=="], + "lodash-es": ["lodash-es@4.17.23", "", {}, "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="], - "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], - "asyncro": ["asyncro@3.0.0", "", {}, "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg=="], + "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], - "attr-accept": ["attr-accept@2.2.5", "", {}, "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ=="], + "lodash.defaults": ["lodash.defaults@4.2.0", "", {}, "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="], - "autoprefixer": ["autoprefixer@10.4.27", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-lite": "^1.0.30001774", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA=="], + "lodash.includes": ["lodash.includes@4.3.0", "", {}, "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="], - "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + "lodash.isarguments": ["lodash.isarguments@3.1.0", "", {}, "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="], - "aws-ssl-profiles": ["aws-ssl-profiles@1.1.2", "", {}, "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g=="], + "lodash.isboolean": ["lodash.isboolean@3.0.3", "", {}, "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="], - "axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], + "lodash.isinteger": ["lodash.isinteger@4.0.4", "", {}, "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="], - "axios-mock-adapter": ["axios-mock-adapter@1.22.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "is-buffer": "^2.0.5" }, "peerDependencies": { "axios": ">= 0.17.0" } }, "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw=="], + "lodash.isnumber": ["lodash.isnumber@3.0.3", "", {}, "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="], - "b4a": ["b4a@1.8.0", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg=="], + "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], - "babel-plugin-macros": ["babel-plugin-macros@3.1.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", "resolve": "^1.19.0" } }, "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg=="], + "lodash.isstring": ["lodash.isstring@4.0.1", "", {}, "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="], - "babel-plugin-polyfill-corejs2": ["babel-plugin-polyfill-corejs2@0.4.17", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w=="], + "lodash.memoize": ["lodash.memoize@4.1.2", "", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="], - "babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.14.2", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.8", "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g=="], + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], - "babel-plugin-polyfill-regenerator": ["babel-plugin-polyfill-regenerator@0.6.8", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg=="], + "lodash.once": ["lodash.once@4.1.1", "", {}, "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="], - "babel-plugin-styled-components": ["babel-plugin-styled-components@2.1.4", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", "@babel/plugin-syntax-jsx": "^7.22.5", "lodash": "^4.17.21", "picomatch": "^2.3.1" }, "peerDependencies": { "styled-components": ">= 2" } }, "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g=="], + "lodash.sortby": ["lodash.sortby@4.7.0", "", {}, "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="], - "babel-plugin-transform-async-to-promises": ["babel-plugin-transform-async-to-promises@0.8.18", "", {}, "sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw=="], + "lodash.throttle": ["lodash.throttle@4.1.1", "", {}, "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="], - "babel-plugin-transform-replace-expressions": ["babel-plugin-transform-replace-expressions@0.2.0", "", { "dependencies": { "@babel/parser": "^7.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA=="], + "lodash.uniq": ["lodash.uniq@4.5.0", "", {}, "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="], - "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], + "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], - "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], - "bare-events": ["bare-events@2.8.2", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ=="], + "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], - "bare-fs": ["bare-fs@4.7.1", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw=="], + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - "bare-os": ["bare-os@3.8.7", "", {}, "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w=="], + "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], - "bare-path": ["bare-path@3.0.0", "", { "dependencies": { "bare-os": "^3.0.1" } }, "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw=="], + "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], - "bare-stream": ["bare-stream@2.13.0", "", { "dependencies": { "streamx": "^2.25.0", "teex": "^1.0.1" }, "peerDependencies": { "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-abort-controller", "bare-buffer", "bare-events"] }, "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA=="], + "lowlight": ["lowlight@3.3.0", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.0.0", "highlight.js": "~11.11.0" } }, "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ=="], - "bare-url": ["bare-url@2.4.0", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA=="], + "lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], - "base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], + "lru.min": ["lru.min@1.1.4", "", {}, "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA=="], - "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + "luxon": ["luxon@3.7.2", "", {}, "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.10.0", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], + "magicast": ["magicast@0.5.2", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "source-map-js": "^1.2.1" } }, "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ=="], - "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], + "make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], - "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + "make-fetch-happen": ["make-fetch-happen@9.1.0", "", { "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^6.0.0", "minipass": "^3.1.3", "minipass-collect": "^1.0.2", "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.2", "promise-retry": "^2.0.1", "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" } }, "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg=="], - "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], + "markdown-it": ["markdown-it@14.1.1", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA=="], - "bl": ["bl@6.1.6", "", { "dependencies": { "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", "inherits": "^2.0.4", "readable-stream": "^4.2.0" } }, "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg=="], + "markdown-it-task-lists": ["markdown-it-task-lists@2.1.1", "", {}, "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA=="], - "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], + "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], - "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], + "marked": ["marked@18.0.3", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-7VT90JOkDeaRWpfjOReRGPEKn0ecdARBkDGL+tT1wZY0efPPqkUxLUSmzy/C7TIylQYJC9STISEsCHrqb/7VIA=="], - "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], + "maxmin": ["maxmin@2.1.0", "", { "dependencies": { "chalk": "^1.0.0", "figures": "^1.0.1", "gzip-size": "^3.0.0", "pretty-bytes": "^3.0.0" } }, "sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw=="], - "brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], - "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], - "brotli-size": ["brotli-size@4.0.0", "", { "dependencies": { "duplexer": "0.1.1" } }, "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA=="], + "mdast-util-frontmatter": ["mdast-util-frontmatter@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "escape-string-regexp": "^5.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0" } }, "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA=="], - "browser-stdout": ["browser-stdout@1.3.1", "", {}, "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="], + "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], - "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], - "bson": ["bson@6.10.4", "", {}, "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng=="], + "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], - "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], - "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], + "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], - "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], - "builtin-modules": ["builtin-modules@3.3.0", "", {}, "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw=="], + "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="], - "bullmq": ["bullmq@5.70.1", "", { "dependencies": { "cron-parser": "4.9.0", "ioredis": "5.9.3", "msgpackr": "1.11.5", "node-abort-controller": "3.1.1", "semver": "7.7.4", "tslib": "2.8.1", "uuid": "11.1.0" } }, "sha512-HjfGHfICkAClrFL0Y07qNbWcmiOCv1l+nusupXUjrvTPuDEyPEJ23MP0lUwUs/QEy1a3pWt/P/sCsSZ1RjRK+w=="], + "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="], - "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], + "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], - "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], + "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], - "bundle-require": ["bundle-require@5.1.0", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.18" } }, "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA=="], + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], - "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], - "c12": ["c12@3.1.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.6.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw=="], + "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - "c8": ["c8@9.1.0", "", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", "foreground-child": "^3.1.1", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.1.6", "test-exclude": "^6.0.0", "v8-to-istanbul": "^9.0.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1" }, "bin": { "c8": "bin/c8.js" } }, "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg=="], + "mdn-data": ["mdn-data@2.0.14", "", {}, "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="], - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], - "cacache": ["cacache@15.3.0", "", { "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "glob": "^7.1.4", "infer-owner": "^1.0.4", "lru-cache": "^6.0.0", "minipass": "^3.1.1", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.2", "mkdirp": "^1.0.3", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^8.0.1", "tar": "^6.0.2", "unique-filename": "^1.1.1" } }, "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ=="], + "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + "memfs": ["memfs@workspace:src/systems/origin/apps/code-workspace/extensions/memfs"], - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + "memory-pager": ["memory-pager@1.5.0", "", {}, "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="], - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + "memorystream": ["memorystream@0.3.1", "", {}, "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw=="], - "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], - "camel-case": ["camel-case@4.1.2", "", { "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw=="], + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], - "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], - "camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="], + "mermaid": ["mermaid@11.15.0", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.1.1", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.33.1", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.19", "dompurify": "^3.3.1", "es-toolkit": "^1.45.1", "katex": "^0.16.25", "khroma": "^2.1.0", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, "sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw=="], - "caniuse-api": ["caniuse-api@3.0.0", "", { "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" } }, "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="], + "metorial-dev-tools": ["metorial-dev-tools@workspace:scripts/dev-tools"], - "caniuse-lite": ["caniuse-lite@1.0.30001776", "", {}, "sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw=="], + "metorial-test-tools": ["metorial-test-tools@workspace:scripts/test-tools"], - "case-anything": ["case-anything@2.1.13", "", {}, "sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng=="], + "microbundle": ["microbundle@0.15.1", "", { "dependencies": { "@babel/core": "^7.12.10", "@babel/plugin-proposal-class-properties": "7.12.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-jsx": "^7.12.1", "@babel/plugin-transform-flow-strip-types": "^7.12.10", "@babel/plugin-transform-react-jsx": "^7.12.11", "@babel/plugin-transform-regenerator": "^7.12.1", "@babel/preset-env": "^7.12.11", "@babel/preset-flow": "^7.12.1", "@babel/preset-react": "^7.12.10", "@rollup/plugin-alias": "^3.1.1", "@rollup/plugin-babel": "^5.2.2", "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.0.1", "@surma/rollup-plugin-off-main-thread": "^2.2.2", "asyncro": "^3.0.0", "autoprefixer": "^10.1.0", "babel-plugin-macros": "^3.0.1", "babel-plugin-transform-async-to-promises": "^0.8.18", "babel-plugin-transform-replace-expressions": "^0.2.0", "brotli-size": "^4.0.0", "builtin-modules": "^3.1.0", "camelcase": "^6.2.0", "escape-string-regexp": "^4.0.0", "filesize": "^6.1.0", "gzip-size": "^6.0.0", "kleur": "^4.1.3", "lodash.merge": "^4.6.2", "postcss": "^8.2.1", "pretty-bytes": "^5.4.1", "rollup": "^2.35.1", "rollup-plugin-bundle-size": "^1.0.3", "rollup-plugin-postcss": "^4.0.0", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.32.0", "rollup-plugin-visualizer": "^5.6.0", "sade": "^1.7.4", "terser": "^5.7.0", "tiny-glob": "^0.2.8", "tslib": "^2.0.3", "typescript": "^4.1.3" }, "bin": { "microbundle": "dist/cli.js" } }, "sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q=="], - "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], - "chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], + "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], - "chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + "micromark-extension-frontmatter": ["micromark-extension-frontmatter@2.0.0", "", { "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg=="], - "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], - "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], - "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], - "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], + "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], - "chardet": ["chardet@2.1.1", "", {}, "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ=="], + "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], - "check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], + "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], - "chevrotain": ["chevrotain@10.5.0", "", { "dependencies": { "@chevrotain/cst-dts-gen": "10.5.0", "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "@chevrotain/utils": "10.5.0", "lodash": "4.17.21", "regexp-to-ast": "0.5.0" } }, "sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A=="], + "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], - "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], - "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], + "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], - "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], + "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], - "cjs-module-lexer": ["cjs-module-lexer@2.2.0", "", {}, "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ=="], + "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], - "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], + "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], - "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], - "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], + "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], - "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], - "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], + "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], - "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], - "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], - "codemirror": ["codemirror@6.0.2", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/lint": "^6.0.0", "@codemirror/search": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw=="], + "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], - "color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], - "color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], - "color-support": ["color-support@1.1.3", "", { "bin": { "color-support": "bin.js" } }, "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="], + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], - "colord": ["colord@2.9.3", "", {}, "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="], + "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], - "colorjs.io": ["colorjs.io@0.5.2", "", {}, "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw=="], + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], - "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - "commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], + "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - "commondir": ["commondir@1.0.1", "", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], - "concat-with-sourcemaps": ["concat-with-sourcemaps@1.1.0", "", { "dependencies": { "source-map": "^0.6.1" } }, "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg=="], + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], - "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="], + "minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], - "connect-history-api-fallback": ["connect-history-api-fallback@1.6.0", "", {}, "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="], + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], - "console-control-strings": ["console-control-strings@1.1.0", "", {}, "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="], + "minipass-collect": ["minipass-collect@1.0.2", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="], - "content-disposition": ["content-disposition@1.0.1", "", {}, "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q=="], + "minipass-fetch": ["minipass-fetch@1.4.1", "", { "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", "minizlib": "^2.0.0" }, "optionalDependencies": { "encoding": "^0.1.12" } }, "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw=="], - "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + "minipass-flush": ["minipass-flush@1.0.7", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA=="], - "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="], - "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + "minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="], - "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], + "minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], - "copy-anything": ["copy-anything@4.0.5", "", { "dependencies": { "is-what": "^5.2.0" } }, "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA=="], + "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], - "copy-to-clipboard": ["copy-to-clipboard@3.3.3", "", { "dependencies": { "toggle-selection": "^1.0.6" } }, "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA=="], + "mixpanel": ["mixpanel@0.18.1", "", { "dependencies": { "https-proxy-agent": "5.0.0" } }, "sha512-YD1xfn6WP6ZLQ6Pmgh0KgdXhueJEsrodThMTsHzHMH0VbWa9ck8s+ynDtM83OSgt+yQ61W/SQNrH8Y4wIwocGg=="], - "core-js-compat": ["core-js-compat@3.49.0", "", { "dependencies": { "browserslist": "^4.28.1" } }, "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA=="], + "mkdirp": ["mkdirp@0.5.1", "", { "dependencies": { "minimist": "0.0.8" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA=="], - "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], - "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], + "mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], - "cose-base": ["cose-base@1.0.3", "", { "dependencies": { "layout-base": "^1.0.0" } }, "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg=="], + "mnemonist": ["mnemonist@0.38.3", "", { "dependencies": { "obliterator": "^1.6.1" } }, "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw=="], - "cosmiconfig": ["cosmiconfig@7.1.0", "", { "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" } }, "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="], + "mocha": ["mocha@5.2.0", "", { "dependencies": { "browser-stdout": "1.3.1", "commander": "2.15.1", "debug": "3.1.0", "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", "growl": "1.10.5", "he": "1.1.1", "minimatch": "3.0.4", "mkdirp": "0.5.1", "supports-color": "5.4.0" }, "bin": { "mocha": "./bin/mocha", "_mocha": "./bin/_mocha" } }, "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ=="], - "crelt": ["crelt@1.0.6", "", {}, "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="], + "modern-tar": ["modern-tar@0.7.6", "", {}, "sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg=="], - "cron-parser": ["cron-parser@4.9.0", "", { "dependencies": { "luxon": "^3.2.1" } }, "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q=="], + "module-details-from-path": ["module-details-from-path@1.0.4", "", {}, "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w=="], - "cross-fetch": ["cross-fetch@4.1.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw=="], + "mongodb": ["mongodb@6.16.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.1.9", "bson": "^6.10.3", "mongodb-connection-string-url": "^3.0.0" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.2.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw=="], - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + "mongodb-connection-string-url": ["mongodb-connection-string-url@3.0.2", "", { "dependencies": { "@types/whatwg-url": "^11.0.2", "whatwg-url": "^14.1.0 || ^13.0.0" } }, "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA=="], - "css-color-keywords": ["css-color-keywords@1.0.0", "", {}, "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg=="], + "mongoose": ["mongoose@9.4.1", "", { "dependencies": { "kareem": "3.2.0", "mongodb": "~7.1", "mpath": "0.9.0", "mquery": "6.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-4rFBWa+/wdBQSfvnOPJBpiSG6UCEbhSQh865dEdaH9Y8WfHBUC+I2XT28dp0IBIGrEwmh+gzrgZgea5PbmrHWA=="], - "css-declaration-sorter": ["css-declaration-sorter@6.4.1", "", { "peerDependencies": { "postcss": "^8.0.9" } }, "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g=="], + "motion-dom": ["motion-dom@12.35.0", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-FFMLEnIejK/zDABn+vqGVAUN4T0+3fw+cVAY8MMT65yR+j5uMuvWdd4npACWhh94OVWQs79CrBBuwOwGRZAQiA=="], - "css-in-js-utils": ["css-in-js-utils@3.1.0", "", { "dependencies": { "hyphenate-style-name": "^1.0.3" } }, "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A=="], + "motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="], - "css-select": ["css-select@4.3.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="], + "mpath": ["mpath@0.9.0", "", {}, "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew=="], - "css-to-react-native": ["css-to-react-native@3.2.0", "", { "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", "postcss-value-parser": "^4.0.2" } }, "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ=="], + "mquery": ["mquery@6.0.0", "", {}, "sha512-b2KQNsmgtkscfeDgkYMcWGn9vZI9YoXh802VDEwE6qc50zxBFQ0Oo8ROkawbPAsXCY1/Z1yp0MagqsZStPWJjw=="], - "css-tree": ["css-tree@1.1.3", "", { "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q=="], + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], - "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], - "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "cssnano": ["cssnano@5.1.15", "", { "dependencies": { "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw=="], + "msgpackr": ["msgpackr@1.11.5", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA=="], - "cssnano-preset-default": ["cssnano-preset-default@5.2.14", "", { "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", "postcss-normalize-positions": "^5.1.1", "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A=="], + "msgpackr-extract": ["msgpackr-extract@3.0.3", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA=="], - "cssnano-utils": ["cssnano-utils@3.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA=="], + "mssql": ["mssql@11.0.1", "", { "dependencies": { "@tediousjs/connection-string": "^0.5.0", "commander": "^11.0.0", "debug": "^4.3.3", "rfdc": "^1.3.0", "tarn": "^3.0.2", "tedious": "^18.2.1" }, "bin": { "mssql": "bin/mssql" } }, "sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w=="], - "csso": ["csso@4.2.0", "", { "dependencies": { "css-tree": "^1.1.2" } }, "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA=="], + "mute-stream": ["mute-stream@2.0.0", "", {}, "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA=="], - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + "mysql2": ["mysql2@3.15.3", "", { "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.7.0", "long": "^5.2.1", "lru.min": "^1.0.0", "named-placeholders": "^1.1.3", "seq-queue": "^0.0.5", "sqlstring": "^2.3.2" } }, "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg=="], - "cytoscape": ["cytoscape@3.33.3", "", {}, "sha512-Gej7U+OKR+LZ8kvX7rb2HhCYJ0IhvEFsnkud4SB1PR+BUY/TsSO0dmOW59WEVLu51b1Rm+gQRKoz4bLYxGSZ2g=="], + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], - "cytoscape-cose-bilkent": ["cytoscape-cose-bilkent@4.1.0", "", { "dependencies": { "cose-base": "^1.0.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ=="], + "named-placeholders": ["named-placeholders@1.1.6", "", { "dependencies": { "lru.min": "^1.1.0" } }, "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w=="], - "cytoscape-fcose": ["cytoscape-fcose@2.2.0", "", { "dependencies": { "cose-base": "^2.2.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ=="], + "nano-css": ["nano-css@5.6.2", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "css-tree": "^1.1.2", "csstype": "^3.1.2", "fastest-stable-stringify": "^2.0.2", "inline-style-prefixer": "^7.0.1", "rtl-css-js": "^1.16.1", "stacktrace-js": "^2.0.2", "stylis": "^4.3.0" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw=="], - "d3": ["d3@7.9.0", "", { "dependencies": { "d3-array": "3", "d3-axis": "3", "d3-brush": "3", "d3-chord": "3", "d3-color": "3", "d3-contour": "4", "d3-delaunay": "6", "d3-dispatch": "3", "d3-drag": "3", "d3-dsv": "3", "d3-ease": "3", "d3-fetch": "3", "d3-force": "3", "d3-format": "3", "d3-geo": "3", "d3-hierarchy": "3", "d3-interpolate": "3", "d3-path": "3", "d3-polygon": "3", "d3-quadtree": "3", "d3-random": "3", "d3-scale": "4", "d3-scale-chromatic": "3", "d3-selection": "3", "d3-shape": "3", "d3-time": "3", "d3-time-format": "4", "d3-timer": "3", "d3-transition": "3", "d3-zoom": "3" } }, "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA=="], + "nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], - "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="], + "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], - "d3-axis": ["d3-axis@3.0.0", "", {}, "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="], + "native-duplexpair": ["native-duplexpair@1.0.0", "", {}, "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA=="], - "d3-brush": ["d3-brush@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "3", "d3-transition": "3" } }, "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ=="], + "nats": ["nats@2.29.3", "", { "dependencies": { "nkeys.js": "1.1.0" } }, "sha512-tOQCRCwC74DgBTk4pWZ9V45sk4d7peoE2njVprMRCBXrhJ5q5cYM7i6W+Uvw2qUrcfOSnuisrX7bEx3b3Wx4QA=="], - "d3-chord": ["d3-chord@3.0.1", "", { "dependencies": { "d3-path": "1 - 3" } }, "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g=="], + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="], + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "d3-contour": ["d3-contour@4.0.2", "", { "dependencies": { "d3-array": "^3.2.0" } }, "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA=="], + "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], - "d3-delaunay": ["d3-delaunay@6.0.4", "", { "dependencies": { "delaunator": "5" } }, "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A=="], + "nice-grpc": ["nice-grpc@2.1.14", "", { "dependencies": { "@grpc/grpc-js": "^1.14.0", "abort-controller-x": "^0.4.0", "nice-grpc-common": "^2.0.2" } }, "sha512-GK9pKNxlvnU5FAdaw7i2FFuR9CqBspcE+if2tqnKXBcE0R8525wj4BZvfcwj7FjvqbssqKxRHt2nwedalbJlww=="], - "d3-dispatch": ["d3-dispatch@3.0.1", "", {}, "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="], + "nice-grpc-common": ["nice-grpc-common@2.0.2", "", { "dependencies": { "ts-error": "^1.0.6" } }, "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ=="], - "d3-drag": ["d3-drag@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" } }, "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg=="], + "nice-try": ["nice-try@1.0.5", "", {}, "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="], - "d3-dsv": ["d3-dsv@3.0.1", "", { "dependencies": { "commander": "7", "iconv-lite": "0.6", "rw": "1" }, "bin": { "csv2json": "bin/dsv2json.js", "csv2tsv": "bin/dsv2dsv.js", "dsv2dsv": "bin/dsv2dsv.js", "dsv2json": "bin/dsv2json.js", "json2csv": "bin/json2dsv.js", "json2dsv": "bin/json2dsv.js", "json2tsv": "bin/json2dsv.js", "tsv2csv": "bin/dsv2dsv.js", "tsv2json": "bin/dsv2json.js" } }, "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q=="], + "nkeys.js": ["nkeys.js@1.1.0", "", { "dependencies": { "tweetnacl": "1.0.3" } }, "sha512-tB/a0shZL5UZWSwsoeyqfTszONTt4k2YS0tuQioMOD180+MbombYVgzDUYHlx+gejYK6rgf08n/2Df99WY0Sxg=="], - "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="], + "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], - "d3-fetch": ["d3-fetch@3.0.1", "", { "dependencies": { "d3-dsv": "1 - 3" } }, "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw=="], + "node-abi": ["node-abi@3.89.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA=="], - "d3-force": ["d3-force@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", "d3-timer": "1 - 3" } }, "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg=="], + "node-abort-controller": ["node-abort-controller@3.1.1", "", {}, "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="], - "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="], + "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], - "d3-geo": ["d3-geo@3.1.1", "", { "dependencies": { "d3-array": "2.5.0 - 3" } }, "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q=="], + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - "d3-hierarchy": ["d3-hierarchy@3.1.2", "", {}, "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="], + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], - "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], + "node-forge": ["node-forge@1.3.1", "", {}, "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA=="], - "d3-path": ["d3-path@3.1.0", "", {}, "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="], + "node-gyp": ["node-gyp@8.4.1", "", { "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w=="], - "d3-polygon": ["d3-polygon@3.0.1", "", {}, "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg=="], + "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], - "d3-quadtree": ["d3-quadtree@3.0.1", "", {}, "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="], + "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], - "d3-random": ["d3-random@3.0.1", "", {}, "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="], + "node-html-parser": ["node-html-parser@5.4.2", "", { "dependencies": { "css-select": "^4.2.1", "he": "1.2.0" } }, "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw=="], - "d3-sankey": ["d3-sankey@0.12.3", "", { "dependencies": { "d3-array": "1 - 2", "d3-shape": "^1.2.0" } }, "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ=="], + "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], - "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", "d3-interpolate": "1.2.0 - 3", "d3-time": "2.1.1 - 3", "d3-time-format": "2 - 4" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="], + "node-liblzma": ["node-liblzma@2.2.0", "", { "dependencies": { "node-addon-api": "^8.5.0", "node-gyp-build": "^4.8.4" }, "bin": { "nxz": "lib/cli/nxz.js" } }, "sha512-s0KzNOWwOJJgPG6wxg6cKohnAl9Wk/oW1KrQaVzJBjQwVcUGPQCzpR46Ximygjqj/3KhOrtJXnYMp/xYAXp75g=="], - "d3-scale-chromatic": ["d3-scale-chromatic@3.1.0", "", { "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" } }, "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ=="], + "node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="], - "d3-selection": ["d3-selection@3.0.0", "", {}, "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="], + "nodemailer": ["nodemailer@8.0.7", "", {}, "sha512-pkjE4mkBzQjdJT4/UmlKl3pX0rC9fZmjh7c6C9o7lv66Ac6w9WCnzPzhbPNxwZAzlF4mdq4CSWB5+FbK6FWCow=="], - "d3-shape": ["d3-shape@3.2.0", "", { "dependencies": { "d3-path": "^3.1.0" } }, "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA=="], + "nopt": ["nopt@8.1.0", "", { "dependencies": { "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A=="], - "d3-time": ["d3-time@3.1.0", "", { "dependencies": { "d3-array": "2 - 3" } }, "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q=="], + "normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], - "d3-time-format": ["d3-time-format@4.1.0", "", { "dependencies": { "d3-time": "1 - 3" } }, "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg=="], + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], - "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], + "normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="], - "d3-transition": ["d3-transition@3.0.1", "", { "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", "d3-ease": "1 - 3", "d3-interpolate": "1 - 3", "d3-timer": "1 - 3" }, "peerDependencies": { "d3-selection": "2 - 3" } }, "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w=="], + "npm-run-all": ["npm-run-all@4.1.5", "", { "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", "cross-spawn": "^6.0.5", "memorystream": "^0.3.1", "minimatch": "^3.0.4", "pidtree": "^0.3.0", "read-pkg": "^3.0.0", "shell-quote": "^1.6.1", "string.prototype.padend": "^3.0.0" }, "bin": { "run-p": "bin/run-p/index.js", "run-s": "bin/run-s/index.js", "npm-run-all": "bin/npm-run-all/index.js" } }, "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ=="], - "d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="], + "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], - "dagre-d3-es": ["dagre-d3-es@7.0.14", "", { "dependencies": { "d3": "^7.9.0", "lodash-es": "^4.17.21" } }, "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg=="], + "npmlog": ["npmlog@6.0.2", "", { "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", "gauge": "^4.0.3", "set-blocking": "^2.0.0" } }, "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg=="], - "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], - "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], + "number-is-nan": ["number-is-nan@1.0.1", "", {}, "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="], - "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], + "nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], - "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], + "oauth4webapi": ["oauth4webapi@3.8.5", "", {}, "sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg=="], - "dayjs": ["dayjs@1.11.20", "", {}, "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="], + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "decamelize": ["decamelize@4.0.0", "", {}, "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="], + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], + "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], - "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + "obliterator": ["obliterator@1.6.1", "", {}, "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="], - "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], + "obuf": ["obuf@1.1.2", "", {}, "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="], - "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], + "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], - "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], - "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], - "deepmerge": ["deepmerge@2.2.1", "", {}, "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA=="], + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - "deepmerge-ts": ["deepmerge-ts@7.1.5", "", {}, "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw=="], + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="], + "open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], - "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], + "openid-client": ["openid-client@6.5.0", "", { "dependencies": { "jose": "^6.0.10", "oauth4webapi": "^3.5.1" } }, "sha512-fAfYaTnOYE2kQCqEJGX9KDObW2aw7IQy4jWpU/+3D3WoCFLbix5Hg6qIPQ6Js9r7f8jDUmsnnguRNCSw4wU/IQ=="], - "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], - "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], - "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + "orderedmap": ["orderedmap@2.1.1", "", {}, "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g=="], - "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], - "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], + "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], - "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + "p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], - "delegates": ["delegates@1.0.0", "", {}, "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="], + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], - "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], + "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], - "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + "p-queue": ["p-queue@9.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^7.0.0" } }, "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw=="], - "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + "p-timeout": ["p-timeout@7.0.1", "", {}, "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg=="], - "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], - "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], - "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], + "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], - "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], - "diff": ["diff@9.0.0", "", {}, "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw=="], + "papaparse": ["papaparse@5.5.3", "", {}, "sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A=="], - "diff-sequences": ["diff-sequences@29.6.3", "", {}, "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="], + "param-case": ["param-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A=="], - "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], - "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], + "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], - "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], - "domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], - "dompurify": ["dompurify@3.4.2", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA=="], + "parseley": ["parseley@0.12.1", "", { "dependencies": { "leac": "^0.6.0", "peberminta": "^0.9.0" } }, "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw=="], - "domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], - "dot-case": ["dot-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="], + "pascal-case": ["pascal-case@3.1.2", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g=="], - "dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], + "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], - "dotenv-expand": ["dotenv-expand@8.0.3", "", {}, "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg=="], + "path-data-parser": ["path-data-parser@0.1.0", "", {}, "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="], - "dprint-node": ["dprint-node@1.0.8", "", { "dependencies": { "detect-libc": "^1.0.3" } }, "sha512-iVKnUtYfGrYcW1ZAlfR/F59cUVL8QIhWoBJoSjkkdua/dkWIgjZfiLMeTjiB06X0ZLkQ0M2C1VbUj/CxkIf1zg=="], + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - "drizzle-orm": ["drizzle-orm@0.45.1", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA=="], + "path-expression-matcher": ["path-expression-matcher@1.5.0", "", {}, "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ=="], - "dts-bundle-generator": ["dts-bundle-generator@9.5.1", "", { "dependencies": { "typescript": ">=5.0.2", "yargs": "^17.6.0" }, "bin": { "dts-bundle-generator": "dist/bin/dts-bundle-generator.js" } }, "sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA=="], + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - "duplexer": ["duplexer@0.1.1", "", {}, "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q=="], + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - "duplexer2": ["duplexer2@0.1.4", "", { "dependencies": { "readable-stream": "^2.0.2" } }, "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA=="], + "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + "path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], - "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], + "path-type": ["path-type@3.0.0", "", { "dependencies": { "pify": "^3.0.0" } }, "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg=="], - "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - "effect": ["effect@3.18.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA=="], + "pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], - "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + "pdfjs-dist": ["pdfjs-dist@5.7.284", "", { "optionalDependencies": { "@napi-rs/canvas": "^0.1.100" } }, "sha512-h4EdYQczmGhbOlqc3PPZwxevn7ApdWPbovAuWXOB/DjIyigSnwfy2oze7c6mRcSr9XgLp3eN3EeL4DyySTPMFw=="], - "electron-to-chromium": ["electron-to-chromium@1.5.307", "", {}, "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg=="], + "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], - "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], - "empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], + "pg": ["pg@8.19.0", "", { "dependencies": { "pg-connection-string": "^2.11.0", "pg-pool": "^3.12.0", "pg-protocol": "^1.12.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ=="], - "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + "pg-cloudflare": ["pg-cloudflare@1.3.0", "", {}, "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ=="], - "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], + "pg-connection-string": ["pg-connection-string@2.11.0", "", {}, "sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ=="], - "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], - "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], + "pg-numeric": ["pg-numeric@1.0.2", "", {}, "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw=="], - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "pg-pool": ["pg-pool@3.12.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg=="], - "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + "pg-protocol": ["pg-protocol@1.12.0", "", {}, "sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg=="], - "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], + "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], - "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], + "pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="], - "error-stack-parser": ["error-stack-parser@2.1.4", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "es-abstract": ["es-abstract@1.24.1", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw=="], + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + "picomatch-browser": ["picomatch-browser@2.2.6", "", {}, "sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w=="], - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + "pidtree": ["pidtree@0.3.1", "", { "bin": { "pidtree": "bin/pidtree.js" } }, "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA=="], - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + "pify": ["pify@5.0.0", "", {}, "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA=="], - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], - "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], - "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], + "pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], - "es-toolkit": ["es-toolkit@1.46.1", "", {}, "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ=="], + "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], - "es6-promise": ["es6-promise@4.2.8", "", {}, "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="], + "points-on-curve": ["points-on-curve@0.2.0", "", {}, "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="], - "es6-promisify": ["es6-promisify@5.0.0", "", { "dependencies": { "es6-promise": "^4.0.3" } }, "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ=="], + "points-on-path": ["points-on-path@0.2.1", "", { "dependencies": { "path-data-parser": "0.1.0", "points-on-curve": "0.2.0" } }, "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g=="], - "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "esbuild-plugin-alias": ["esbuild-plugin-alias@0.2.1", "", {}, "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ=="], + "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], - "esbuild-plugin-styled-components": ["esbuild-plugin-styled-components@3.0.1", "", { "dependencies": { "@babel/core": "^7.22.1", "babel-plugin-styled-components": "^2.1.3" } }, "sha512-yhqHjVykhfek3TCLZQlLr6VSIrIbwAdwhn3Hpqj/n7KxEMcb3k/rkzO7U7BosbaC7TItJMyOauNwtGoioz4A1Q=="], + "postcss-calc": ["postcss-calc@8.2.4", "", { "dependencies": { "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.2" } }, "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q=="], - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + "postcss-colormin": ["postcss-colormin@5.3.1", "", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ=="], - "escape-carriage": ["escape-carriage@1.3.1", "", {}, "sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw=="], + "postcss-convert-values": ["postcss-convert-values@5.1.3", "", { "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA=="], - "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + "postcss-discard-comments": ["postcss-discard-comments@5.1.2", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ=="], - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + "postcss-discard-duplicates": ["postcss-discard-duplicates@5.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw=="], - "eslint": ["eslint@9.39.3", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.3", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg=="], + "postcss-discard-empty": ["postcss-discard-empty@5.1.1", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A=="], - "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + "postcss-discard-overridden": ["postcss-discard-overridden@5.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw=="], - "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + "postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="], - "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], + "postcss-merge-longhand": ["postcss-merge-longhand@5.1.7", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.1" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ=="], - "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], + "postcss-merge-rules": ["postcss-merge-rules@5.1.4", "", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g=="], - "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + "postcss-minify-font-values": ["postcss-minify-font-values@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA=="], - "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + "postcss-minify-gradients": ["postcss-minify-gradients@5.1.1", "", { "dependencies": { "colord": "^2.9.1", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw=="], - "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], + "postcss-minify-params": ["postcss-minify-params@5.1.4", "", { "dependencies": { "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw=="], - "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "postcss-minify-selectors": ["postcss-minify-selectors@5.2.1", "", { "dependencies": { "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg=="], - "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + "postcss-modules": ["postcss-modules@4.3.1", "", { "dependencies": { "generic-names": "^4.0.0", "icss-replace-symbols": "^1.1.0", "lodash.camelcase": "^4.3.0", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "string-hash": "^1.1.1" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q=="], - "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + "postcss-modules-extract-imports": ["postcss-modules-extract-imports@3.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q=="], - "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], + "postcss-modules-local-by-default": ["postcss-modules-local-by-default@4.2.0", "", { "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw=="], - "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], + "postcss-modules-scope": ["postcss-modules-scope@3.2.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA=="], - "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + "postcss-modules-values": ["postcss-modules-values@4.0.0", "", { "dependencies": { "icss-utils": "^5.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ=="], - "events-universal": ["events-universal@1.0.1", "", { "dependencies": { "bare-events": "^2.7.0" } }, "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw=="], + "postcss-normalize-charset": ["postcss-normalize-charset@5.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg=="], - "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], + "postcss-normalize-display-values": ["postcss-normalize-display-values@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA=="], - "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], + "postcss-normalize-positions": ["postcss-normalize-positions@5.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg=="], - "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], + "postcss-normalize-repeat-style": ["postcss-normalize-repeat-style@5.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g=="], - "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], + "postcss-normalize-string": ["postcss-normalize-string@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w=="], - "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], + "postcss-normalize-timing-functions": ["postcss-normalize-timing-functions@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg=="], - "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], + "postcss-normalize-unicode": ["postcss-normalize-unicode@5.1.1", "", { "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA=="], - "express-rate-limit": ["express-rate-limit@8.2.1", "", { "dependencies": { "ip-address": "10.0.1" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g=="], + "postcss-normalize-url": ["postcss-normalize-url@5.1.0", "", { "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew=="], - "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], + "postcss-normalize-whitespace": ["postcss-normalize-whitespace@5.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA=="], - "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + "postcss-ordered-values": ["postcss-ordered-values@5.1.3", "", { "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ=="], - "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + "postcss-reduce-initial": ["postcss-reduce-initial@5.1.2", "", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg=="], - "fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], + "postcss-reduce-transforms": ["postcss-reduce-transforms@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ=="], - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - "fast-equals": ["fast-equals@5.4.0", "", {}, "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw=="], + "postcss-svgo": ["postcss-svgo@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA=="], - "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], + "postcss-unique-selectors": ["postcss-unique-selectors@5.1.1", "", { "dependencies": { "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA=="], - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + "postgres": ["postgres@3.4.7", "", {}, "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw=="], - "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + "postgres-array": ["postgres-array@3.0.4", "", {}, "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ=="], - "fast-shallow-equal": ["fast-shallow-equal@1.0.0", "", {}, "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw=="], + "postgres-bytea": ["postgres-bytea@1.0.1", "", {}, "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ=="], - "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], - "fast-xml-builder": ["fast-xml-builder@1.2.0", "", { "dependencies": { "path-expression-matcher": "^1.5.0", "xml-naming": "^0.1.0" } }, "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q=="], + "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], - "fast-xml-parser": ["fast-xml-parser@5.8.0", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.2.0", "path-expression-matcher": "^1.5.0", "strnum": "^2.3.0", "xml-naming": "^0.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg=="], + "postgres-range": ["postgres-range@1.1.4", "", {}, "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="], - "fastest-stable-stringify": ["fastest-stable-stringify@2.0.2", "", {}, "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q=="], + "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], - "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - "fault": ["fault@2.0.1", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ=="], + "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], - "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + "pretty-bytes": ["pretty-bytes@5.6.0", "", {}, "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="], - "fetch-retry": ["fetch-retry@6.0.0", "", {}, "sha512-BUFj1aMubgib37I3v4q78fYo63Po7t4HUPTpQ6/QE6yK6cIQrP+W43FYToeTEyg5m2Y7eFUtijUuAv/PDlWuag=="], + "pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], - "fflate": ["fflate@0.8.2", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="], + "prism-react-renderer": ["prism-react-renderer@2.4.1", "", { "dependencies": { "@types/prismjs": "^1.26.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": ">=16.0.0" } }, "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig=="], - "figures": ["figures@1.7.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" } }, "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ=="], + "prisma": ["prisma@7.4.2", "", { "dependencies": { "@prisma/config": "7.4.2", "@prisma/dev": "0.20.0", "@prisma/engines": "7.4.2", "@prisma/studio-core": "0.13.1", "mysql2": "3.15.3", "postgres": "3.4.7" }, "peerDependencies": { "better-sqlite3": ">=9.0.0", "typescript": ">=5.4.0" }, "optionalPeers": ["better-sqlite3", "typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-2bP8Ruww3Q95Z2eH4Yqh4KAENRsj/SxbdknIVBfd6DmjPwmpsC4OVFMLOeHt6tM3Amh8ebjvstrUz3V/hOe1dA=="], - "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + "prisma-json-types-generator": ["prisma-json-types-generator@4.1.1", "", { "dependencies": { "@prisma/generator-helper": "^7.2.0", "semver": "^7.7.3", "try": "^1.0.3", "tslib": "^2.8.1" }, "peerDependencies": { "@prisma/client": "^7.2.0", "prisma": "^7.2.0", "typescript": "^5.9.3" }, "bin": { "prisma-json-types-generator": "index.js" } }, "sha512-oz0MYu1r2Jqu3qOGCEGulz6RjPsECVjyS3ZAz3HEmz0jkKbVkZEwQyksNJm0X5utV1TZCmaG/98EPExN7S22xw=="], - "file-selector": ["file-selector@2.1.2", "", { "dependencies": { "tslib": "^2.7.0" } }, "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig=="], + "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], - "file-type": ["file-type@21.3.4", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g=="], + "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], - "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], - "filelist": ["filelist@1.0.6", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA=="], + "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], - "filesize": ["filesize@6.4.0", "", {}, "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ=="], + "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="], - "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], - "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], + "promise.series": ["promise.series@0.2.0", "", {}, "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ=="], - "find-cache-dir": ["find-cache-dir@3.3.2", "", { "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig=="], + "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], - "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], - "fix-dts-default-cjs-exports": ["fix-dts-default-cjs-exports@1.0.1", "", { "dependencies": { "magic-string": "^0.30.17", "mlly": "^1.7.4", "rollup": "^4.34.8" } }, "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg=="], + "property-expr": ["property-expr@2.0.6", "", {}, "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="], - "flat": ["flat@5.0.2", "", { "bin": { "flat": "cli.js" } }, "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="], + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], - "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + "prosemirror-changeset": ["prosemirror-changeset@2.4.0", "", { "dependencies": { "prosemirror-transform": "^1.0.0" } }, "sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng=="], - "flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="], + "prosemirror-collab": ["prosemirror-collab@1.3.1", "", { "dependencies": { "prosemirror-state": "^1.0.0" } }, "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ=="], - "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + "prosemirror-commands": ["prosemirror-commands@1.7.1", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.10.2" } }, "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w=="], - "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + "prosemirror-dropcursor": ["prosemirror-dropcursor@1.8.2", "", { "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0", "prosemirror-view": "^1.1.0" } }, "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw=="], - "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + "prosemirror-gapcursor": ["prosemirror-gapcursor@1.4.0", "", { "dependencies": { "prosemirror-keymap": "^1.0.0", "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-view": "^1.0.0" } }, "sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ=="], - "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + "prosemirror-history": ["prosemirror-history@1.5.0", "", { "dependencies": { "prosemirror-state": "^1.2.2", "prosemirror-transform": "^1.0.0", "prosemirror-view": "^1.31.0", "rope-sequence": "^1.3.0" } }, "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg=="], - "format": ["format@0.2.2", "", {}, "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="], + "prosemirror-inputrules": ["prosemirror-inputrules@1.5.1", "", { "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.0.0" } }, "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw=="], - "formik": ["formik@2.4.9", "", { "dependencies": { "@types/hoist-non-react-statics": "^3.3.1", "deepmerge": "^2.1.1", "hoist-non-react-statics": "^3.3.0", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "react-fast-compare": "^2.0.1", "tiny-warning": "^1.0.2", "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-5nI94BMnlFDdQRBY4Sz39WkhxajZJ57Fzs8wVbtsQlm5ScKIR1QLYqv/ultBnobObtlUyxpxoLodpixrsf36Og=="], + "prosemirror-keymap": ["prosemirror-keymap@1.2.3", "", { "dependencies": { "prosemirror-state": "^1.0.0", "w3c-keyname": "^2.2.0" } }, "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw=="], - "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + "prosemirror-markdown": ["prosemirror-markdown@1.13.4", "", { "dependencies": { "@types/markdown-it": "^14.0.0", "markdown-it": "^14.0.0", "prosemirror-model": "^1.25.0" } }, "sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw=="], - "forwarded-parse": ["forwarded-parse@2.1.2", "", {}, "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="], + "prosemirror-menu": ["prosemirror-menu@1.3.0", "", { "dependencies": { "crelt": "^1.0.0", "prosemirror-commands": "^1.0.0", "prosemirror-history": "^1.0.0", "prosemirror-state": "^1.0.0" } }, "sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg=="], - "fraction.js": ["fraction.js@5.3.4", "", {}, "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ=="], + "prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], - "framer-motion": ["framer-motion@12.35.0", "", { "dependencies": { "motion-dom": "^12.35.0", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-w8hghCMQ4oq10j6aZh3U2yeEQv5K69O/seDI/41PK4HtgkLrcBovUNc0ayBC3UyyU7V1mrY2yLzvYdWJX9pGZQ=="], + "prosemirror-schema-basic": ["prosemirror-schema-basic@1.2.4", "", { "dependencies": { "prosemirror-model": "^1.25.0" } }, "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ=="], - "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], + "prosemirror-schema-list": ["prosemirror-schema-list@1.5.1", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.7.3" } }, "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q=="], - "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], + "prosemirror-state": ["prosemirror-state@1.4.4", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-transform": "^1.0.0", "prosemirror-view": "^1.27.0" } }, "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw=="], - "fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], + "prosemirror-tables": ["prosemirror-tables@1.8.5", "", { "dependencies": { "prosemirror-keymap": "^1.2.3", "prosemirror-model": "^1.25.4", "prosemirror-state": "^1.4.4", "prosemirror-transform": "^1.10.5", "prosemirror-view": "^1.41.4" } }, "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw=="], - "fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], + "prosemirror-trailing-node": ["prosemirror-trailing-node@3.0.0", "", { "dependencies": { "@remirror/core-constants": "3.0.0", "escape-string-regexp": "^4.0.0" }, "peerDependencies": { "prosemirror-model": "^1.22.1", "prosemirror-state": "^1.4.2", "prosemirror-view": "^1.33.8" } }, "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ=="], - "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + "prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "prosemirror-view": ["prosemirror-view@1.41.6", "", { "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg=="], - "function-bay": ["function-bay@workspace:src/systems/function-bay/packages/function-bay"], + "protobufjs": ["protobufjs@7.5.4", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="], - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], + "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], - "gauge": ["gauge@4.0.4", "", { "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.5" } }, "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg=="], + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "gaxios": ["gaxios@6.7.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", "node-fetch": "^2.6.9", "uuid": "^9.0.1" } }, "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ=="], + "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], - "gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="], + "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], - "generate-function": ["generate-function@2.3.1", "", { "dependencies": { "is-property": "^1.0.2" } }, "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ=="], + "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], - "generator": ["generator@workspace:scripts/generators"], + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], - "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], + "quickjs-emscripten": ["quickjs-emscripten@0.32.0", "", { "dependencies": { "@jitl/quickjs-wasmfile-debug-asyncify": "0.32.0", "@jitl/quickjs-wasmfile-debug-sync": "0.32.0", "@jitl/quickjs-wasmfile-release-asyncify": "0.32.0", "@jitl/quickjs-wasmfile-release-sync": "0.32.0", "quickjs-emscripten-core": "0.32.0" } }, "sha512-So0Sqw869y/S2oE3Nuc0uT3Dhqgvsj8FSrwBdsuTosVsG8ME5/OcudU1GxsrIFdFABgy17GHnTVO9TYV/bLQcA=="], - "generic-names": ["generic-names@4.0.0", "", { "dependencies": { "loader-utils": "^3.2.0" } }, "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A=="], + "quickjs-emscripten-core": ["quickjs-emscripten-core@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-QFnPfjFey8EqknSrSxe1hZrf1/8z7/6s1QzGOmKo6++02r7QRRX7ZoyNaZh7JuVjWsVW87KnQrbZqnHkOAzUyg=="], - "generic-pool": ["generic-pool@3.9.0", "", {}, "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="], + "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], - "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + "rate-limiter-flexible": ["rate-limiter-flexible@8.3.0", "", {}, "sha512-mzwlfipDLlRinPgELqVDJetke6Snq26nL565m8nLWXIcWgosYSeNRgqwh7ZrZ4MfYs8CNfmLvR5SBVz3rISQsQ=="], - "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], + "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], - "get-func-name": ["get-func-name@2.0.2", "", {}, "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ=="], + "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], - "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], + "re2js": ["re2js@1.4.0", "", {}, "sha512-KTOIcZTSOpOxbu3i0+T6mFQ6tkxXKlTxfcMFs1trQbsMnG84qNq+DjXr8Afu+FEFjvF1NNlldpC7roPyazFI8g=="], - "get-port-please": ["get-port-please@3.2.0", "", {}, "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A=="], + "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + "react-apexcharts": ["react-apexcharts@1.9.0", "", { "dependencies": { "prop-types": "^15.8.1" }, "peerDependencies": { "apexcharts": ">=4.0.0", "react": ">=16.8.0" } }, "sha512-DDBzQFuKdwyCEZnji1yIcjlnV8hRr4VDabS5Y3iuem/WcTq6n4VbjWPzbPm3aOwW4I+rf/gA3zWqhws4z9CwLw=="], - "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + "react-avatar-editor": ["react-avatar-editor@13.0.2", "", { "dependencies": { "@babel/plugin-transform-runtime": "^7.12.1", "@babel/runtime": "^7.12.5", "prop-types": "^15.7.2" }, "peerDependencies": { "react": "^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom": "^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, "sha512-a4ajbi7lwDh98kgEtSEeKMu0vs0CHTczkq4Xcxr1EiwMFH1GlgHCEtwGU8q/H5W8SeLnH4KPK8LUjEEaZXklxQ=="], - "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], + "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], - "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], + "react-dropzone": ["react-dropzone@14.4.1", "", { "dependencies": { "attr-accept": "^2.2.4", "file-selector": "^2.1.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.8 || 18.0.0" } }, "sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g=="], - "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], + "react-fast-compare": ["react-fast-compare@3.2.2", "", {}, "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="], - "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "react-feather": ["react-feather@2.0.10", "", { "dependencies": { "prop-types": "^15.7.2" }, "peerDependencies": { "react": ">=16.8.6" } }, "sha512-BLhukwJ+Z92Nmdcs+EMw6dy1Z/VLiJTzEQACDUEnWMClhYnFykJCGWQx+NmwP/qQHGX/5CzQ+TGi8ofg2+HzVQ=="], - "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + "react-helmet": ["react-helmet@6.1.0", "", { "dependencies": { "object-assign": "^4.1.1", "prop-types": "^15.7.2", "react-fast-compare": "^3.1.1", "react-side-effect": "^2.1.0" }, "peerDependencies": { "react": ">=16.3.0" } }, "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw=="], - "globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + "react-hook-form": ["react-hook-form@7.72.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-V4v6jubaf6JAurEaVnT9aUPKFbNtDgohj5CIgVGyPHvT9wRx5OZHVjz31GsxnPNI278XMu+ruFz+wGOscHaLKw=="], - "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], + "react-hotkeys-hook": ["react-hotkeys-hook@5.2.4", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-BgKg+A1+TawkYluh5Bo4cTmcgMN5L29uhJbDUQdHwPX+qgXRjIPYU5kIDHyxnAwCkCBiu9V5OpB2mpyeluVF2A=="], - "globalyzer": ["globalyzer@0.1.0", "", {}, "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="], + "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], - "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], + "react-markdown": ["react-markdown@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw=="], - "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], + "react-medium-image-zoom": ["react-medium-image-zoom@5.4.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-DD2iZYaCfAwiQGR8AN62r/cDJYoXhezlYJc5HY4TzBUGuGge43CptG0f7m0PEIM72aN6GfpjohvY1yYdtCJB7g=="], - "google-auth-library": ["google-auth-library@9.15.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.1.1", "gcp-metadata": "^6.1.0", "gtoken": "^7.0.0", "jws": "^4.0.0" } }, "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng=="], + "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], - "google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], + "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], - "google-protobuf": ["google-protobuf@3.15.8", "", {}, "sha512-2jtfdqTaSxk0cuBJBtTTWsot4WtR9RVr2rXg7x7OoqiuOKopPrwXpM1G4dXIkLcUNRh3RKzz76C8IOkksZSeOw=="], + "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], - "googleapis-common": ["googleapis-common@7.2.0", "", { "dependencies": { "extend": "^3.0.2", "gaxios": "^6.0.3", "google-auth-library": "^9.7.0", "qs": "^6.7.0", "url-template": "^2.0.8", "uuid": "^9.0.0" } }, "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA=="], + "react-router": ["react-router@6.30.3", "", { "dependencies": { "@remix-run/router": "1.23.2" }, "peerDependencies": { "react": ">=16.8" } }, "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw=="], - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + "react-router-dom": ["react-router-dom@6.30.3", "", { "dependencies": { "@remix-run/router": "1.23.2", "react-router": "6.30.3" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag=="], - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "react-side-effect": ["react-side-effect@2.1.2", "", { "peerDependencies": { "react": "^16.3.0 || ^17.0.0 || ^18.0.0" } }, "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw=="], - "grammex": ["grammex@3.1.12", "", {}, "sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ=="], + "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], - "graphmatch": ["graphmatch@1.1.1", "", {}, "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg=="], + "react-textarea-autosize": ["react-textarea-autosize@8.5.9", "", { "dependencies": { "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A=="], - "growl": ["growl@1.10.5", "", {}, "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="], + "react-trend": ["react-trend@1.2.5", "", { "dependencies": { "prop-types": "^15.5.8" }, "peerDependencies": { "react": "" } }, "sha512-8//dg52xjPKkWPcd7Iml5WfwellgBpeILbN2tKhTP5gacJbg8jDTsNoEJboN9ATf9OllODpo4/gXhguNAIo7gg=="], - "grpc-tools": ["grpc-tools@1.13.1", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0" }, "bin": { "grpc_tools_node_protoc": "bin/protoc.js", "grpc_tools_node_protoc_plugin": "bin/protoc_plugin.js" } }, "sha512-0sttMUxThNIkCTJq5qI0xXMz5zWqV2u3yG1kR3Sj9OokGIoyRBFjoInK9NyW7x5fH7knj48Roh1gq5xbl0VoDQ=="], + "react-universal-interface": ["react-universal-interface@0.6.2", "", { "peerDependencies": { "react": "*", "tslib": "*" } }, "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw=="], - "grpc_tools_node_protoc_ts": ["grpc_tools_node_protoc_ts@5.3.3", "", { "dependencies": { "google-protobuf": "3.15.8", "handlebars": "4.7.7" }, "bin": { "protoc-gen-ts": "bin/protoc-gen-ts" } }, "sha512-M/YrklvVXMtuuj9kb42PxeouZhs7Ul+R4e/31XwrankUcKL8cQQP50Q9q+KEHGyHQaPt6VtKKsxMgLaKbCxeww=="], + "react-use": ["react-use@17.6.0", "", { "dependencies": { "@types/js-cookie": "^2.2.6", "@xobotyi/scrollbar-width": "^1.9.5", "copy-to-clipboard": "^3.3.1", "fast-deep-equal": "^3.1.3", "fast-shallow-equal": "^1.0.0", "js-cookie": "^2.2.1", "nano-css": "^5.6.2", "react-universal-interface": "^0.6.2", "resize-observer-polyfill": "^1.5.1", "screenfull": "^5.1.0", "set-harmonic-interval": "^1.0.1", "throttle-debounce": "^3.0.1", "ts-easing": "^0.2.0", "tslib": "^2.1.0" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g=="], - "gtoken": ["gtoken@7.1.0", "", { "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" } }, "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw=="], + "react-wrap-balancer": ["react-wrap-balancer@1.1.1", "", { "peerDependencies": { "react": ">=16.8.0 || ^17.0.0 || ^18" } }, "sha512-AB+l7FPRWl6uZ28VcJ8skkwLn2+UC62bjiw8tQUrZPlEWDVnR9MG0lghyn7EyxuJSsFEpht4G+yh2WikEqQ/5Q=="], - "gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="], + "read-pkg": ["read-pkg@3.0.0", "", { "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA=="], - "hachure-fill": ["hachure-fill@0.5.2", "", {}, "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="], + "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - "handlebars": ["handlebars@4.7.7", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA=="], + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], - "has-ansi": ["has-ansi@2.0.0", "", { "dependencies": { "ansi-regex": "^2.0.0" } }, "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg=="], + "redis": ["redis@5.11.0", "", { "dependencies": { "@redis/bloom": "5.11.0", "@redis/client": "5.11.0", "@redis/json": "5.11.0", "@redis/search": "5.11.0", "@redis/time-series": "5.11.0" } }, "sha512-YwXjATVDT+AuxcyfOwZn046aml9jMlQPvU1VXIlLDVAExe0u93aTfPYSeRgG4p9Q/Jlkj+LXJ1XEoFV+j2JKcQ=="], - "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], + "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + "redis-parser": ["redis-parser@3.0.0", "", { "dependencies": { "redis-errors": "^1.0.0" } }, "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A=="], - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + "redlock": ["redlock@5.0.0-beta.2", "", { "dependencies": { "node-abort-controller": "^3.0.1" } }, "sha512-2RDWXg5jgRptDrB1w9O/JgSZC0j7y4SlaXnor93H/UJm/QyDiFgBKNtrh0TI6oCXqYSaSoXxFh6Sd3VtYfhRXw=="], - "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], + "reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="], - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], - "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + "regenerate": ["regenerate@1.4.2", "", {}, "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="], - "has-unicode": ["has-unicode@2.0.1", "", {}, "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="], + "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.2", "", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g=="], - "hash-base": ["hash-base@3.1.2", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.1" } }, "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg=="], + "regexp-to-ast": ["regexp-to-ast@0.5.0", "", {}, "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], - "hast-util-embedded": ["hast-util-embedded@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-is-element": "^3.0.0" } }, "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA=="], + "regexpu-core": ["regexpu-core@6.4.0", "", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" } }, "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA=="], - "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], + "regjsgen": ["regjsgen@0.8.0", "", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], - "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], + "regjsparser": ["regjsparser@0.13.0", "", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q=="], - "hast-util-has-property": ["hast-util-has-property@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA=="], + "rehype-minify-whitespace": ["rehype-minify-whitespace@6.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-minify-whitespace": "^1.0.0" } }, "sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw=="], - "hast-util-is-body-ok-link": ["hast-util-is-body-ok-link@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ=="], + "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="], - "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], + "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], - "hast-util-minify-whitespace": ["hast-util-minify-whitespace@1.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "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" } }, "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw=="], + "rehype-remark": ["rehype-remark@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "hast-util-to-mdast": "^10.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-EmDndlb5NVwXGfUa4c9GPK+lXeItTilLhE6ADSaQuHr4JUlKw9MidzGzx4HpqZrNCt6vnHmEifXQiiA+CEnjYQ=="], - "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], + "rehype-sanitize": ["rehype-sanitize@6.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-sanitize": "^5.0.0" } }, "sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg=="], - "hast-util-phrasing": ["hast-util-phrasing@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-embedded": "^3.0.0", "hast-util-has-property": "^3.0.0", "hast-util-is-body-ok-link": "^3.0.0", "hast-util-is-element": "^3.0.0" } }, "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ=="], + "rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="], - "hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="], + "relateurl": ["relateurl@0.2.7", "", {}, "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog=="], - "hast-util-sanitize": ["hast-util-sanitize@5.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "unist-util-position": "^5.0.0" } }, "sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg=="], + "remark-frontmatter": ["remark-frontmatter@5.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-frontmatter": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0", "unified": "^11.0.0" } }, "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ=="], - "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], + "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], - "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], + "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], - "hast-util-to-mdast": ["hast-util-to-mdast@10.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-phrasing": "^3.0.0", "hast-util-to-html": "^9.0.0", "hast-util-to-text": "^4.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "mdast-util-to-string": "^4.0.0", "rehype-minify-whitespace": "^6.0.0", "trim-trailing-lines": "^2.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ=="], + "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], - "hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="], + "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], - "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], + "remeda": ["remeda@2.33.4", "", {}, "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ=="], - "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], - "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], + "require-in-the-middle": ["require-in-the-middle@8.0.1", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3" } }, "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ=="], - "highlight.js": ["highlight.js@11.11.1", "", {}, "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w=="], + "reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="], - "hoist-non-react-statics": ["hoist-non-react-statics@3.3.2", "", { "dependencies": { "react-is": "^16.7.0" } }, "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="], + "resize-observer-polyfill": ["resize-observer-polyfill@1.5.1", "", {}, "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="], - "hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], + "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], - "hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], + "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], - "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], + "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], - "html-minifier-terser": ["html-minifier-terser@6.1.0", "", { "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", "commander": "^8.3.0", "he": "^1.2.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.10.0" }, "bin": { "html-minifier-terser": "cli.js" } }, "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw=="], + "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="], - "html-to-text": ["html-to-text@9.0.5", "", { "dependencies": { "@selderee/plugin-htmlparser2": "^0.11.0", "deepmerge": "^4.3.1", "dom-serializer": "^2.0.0", "htmlparser2": "^8.0.2", "selderee": "^0.11.0" } }, "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg=="], + "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], - "html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="], + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], - "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], + "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], - "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + "ripemd160": ["ripemd160@2.0.2", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="], - "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + "robust-predicates": ["robust-predicates@3.0.3", "", {}, "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA=="], - "http-proxy-agent": ["http-proxy-agent@9.0.0", "", { "dependencies": { "agent-base": "9.0.0", "debug": "^4.3.4" } }, "sha512-FcF8VhXYLQcxWCnt/cCpT2apKsRDUGeVEeMqGu4HSTu29U8Yw0TLOjdYIlDsYk3IkUh+taX4IDWpPcCqKDhCjA=="], + "rollup": ["rollup@4.59.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.59.0", "@rollup/rollup-android-arm64": "4.59.0", "@rollup/rollup-darwin-arm64": "4.59.0", "@rollup/rollup-darwin-x64": "4.59.0", "@rollup/rollup-freebsd-arm64": "4.59.0", "@rollup/rollup-freebsd-x64": "4.59.0", "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", "@rollup/rollup-linux-arm-musleabihf": "4.59.0", "@rollup/rollup-linux-arm64-gnu": "4.59.0", "@rollup/rollup-linux-arm64-musl": "4.59.0", "@rollup/rollup-linux-loong64-gnu": "4.59.0", "@rollup/rollup-linux-loong64-musl": "4.59.0", "@rollup/rollup-linux-ppc64-gnu": "4.59.0", "@rollup/rollup-linux-ppc64-musl": "4.59.0", "@rollup/rollup-linux-riscv64-gnu": "4.59.0", "@rollup/rollup-linux-riscv64-musl": "4.59.0", "@rollup/rollup-linux-s390x-gnu": "4.59.0", "@rollup/rollup-linux-x64-gnu": "4.59.0", "@rollup/rollup-linux-x64-musl": "4.59.0", "@rollup/rollup-openbsd-x64": "4.59.0", "@rollup/rollup-openharmony-arm64": "4.59.0", "@rollup/rollup-win32-arm64-msvc": "4.59.0", "@rollup/rollup-win32-ia32-msvc": "4.59.0", "@rollup/rollup-win32-x64-gnu": "4.59.0", "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg=="], - "http-status-codes": ["http-status-codes@2.3.0", "", {}, "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA=="], + "rollup-plugin-bundle-size": ["rollup-plugin-bundle-size@1.0.3", "", { "dependencies": { "chalk": "^1.1.3", "maxmin": "^2.1.0" } }, "sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ=="], - "https-proxy-agent": ["https-proxy-agent@9.0.0", "", { "dependencies": { "agent-base": "9.0.0", "debug": "^4.3.4" } }, "sha512-/MVmHp58WkOypgFhCLk4fzpPcFQvTJ/e6LBI7irpIO2HfxUbpmYoHF+KzipzJpxxzJu7aJNWQ0xojJ/dzV2G5g=="], + "rollup-plugin-postcss": ["rollup-plugin-postcss@4.0.2", "", { "dependencies": { "chalk": "^4.1.0", "concat-with-sourcemaps": "^1.1.0", "cssnano": "^5.0.1", "import-cwd": "^3.0.0", "p-queue": "^6.6.2", "pify": "^5.0.0", "postcss-load-config": "^3.0.0", "postcss-modules": "^4.0.0", "promise.series": "^0.2.0", "resolve": "^1.19.0", "rollup-pluginutils": "^2.8.2", "safe-identifier": "^0.4.2", "style-inject": "^0.3.0" }, "peerDependencies": { "postcss": "8.x" } }, "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w=="], - "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], + "rollup-plugin-terser": ["rollup-plugin-terser@7.0.2", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", "serialize-javascript": "^4.0.0", "terser": "^5.0.0" }, "peerDependencies": { "rollup": "^2.0.0" } }, "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ=="], - "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="], + "rollup-plugin-typescript2": ["rollup-plugin-typescript2@0.32.1", "", { "dependencies": { "@rollup/pluginutils": "^4.1.2", "find-cache-dir": "^3.3.2", "fs-extra": "^10.0.0", "resolve": "^1.20.0", "tslib": "^2.4.0" }, "peerDependencies": { "rollup": ">=1.26.3", "typescript": ">=2.4.0" } }, "sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw=="], - "hyphenate-style-name": ["hyphenate-style-name@1.1.0", "", {}, "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw=="], + "rollup-plugin-visualizer": ["rollup-plugin-visualizer@5.14.0", "", { "dependencies": { "open": "^8.4.0", "picomatch": "^4.0.2", "source-map": "^0.7.4", "yargs": "^17.5.1" }, "peerDependencies": { "rolldown": "1.x", "rollup": "2.x || 3.x || 4.x" }, "optionalPeers": ["rolldown", "rollup"], "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" } }, "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA=="], - "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "rollup-pluginutils": ["rollup-pluginutils@2.8.2", "", { "dependencies": { "estree-walker": "^0.6.1" } }, "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ=="], - "icss-replace-symbols": ["icss-replace-symbols@1.1.0", "", {}, "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg=="], + "rope-sequence": ["rope-sequence@1.3.4", "", {}, "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ=="], - "icss-utils": ["icss-utils@5.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="], + "roughjs": ["roughjs@4.6.6", "", { "dependencies": { "hachure-fill": "^0.5.2", "path-data-parser": "^0.1.0", "points-on-curve": "^0.2.0", "points-on-path": "^0.2.1" } }, "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ=="], - "idb": ["idb@8.0.3", "", {}, "sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg=="], + "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], - "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + "rtl-css-js": ["rtl-css-js@1.16.1", "", { "dependencies": { "@babel/runtime": "^7.1.2" } }, "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg=="], - "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], - "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "immutable": ["immutable@5.1.5", "", {}, "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A=="], + "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="], - "import-cwd": ["import-cwd@3.0.0", "", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], + "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], - "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], - "import-from": ["import-from@3.0.0", "", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ=="], + "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], - "import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], + "safe-identifier": ["safe-identifier@0.4.2", "", {}, "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w=="], - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], - "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - "infer-owner": ["infer-owner@1.0.4", "", {}, "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="], + "safe-regex2": ["safe-regex2@5.1.0", "", { "dependencies": { "ret": "~0.5.0" }, "bin": { "safe-regex2": "bin/safe-regex2.js" } }, "sha512-pNHAuBW7TrcleFHsxBr5QMi/Iyp0ENjUKz7GCcX1UO7cMh+NmVK6HxQckNL1tJp1XAJVjG6B8OKIPqodqj9rtw=="], - "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "sass": ["sass@1.97.3", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg=="], - "ini": ["ini@6.0.0", "", {}, "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ=="], + "sass-embedded": ["sass-embedded@1.97.3", "", { "dependencies": { "@bufbuild/protobuf": "^2.5.0", "colorjs.io": "^0.5.0", "immutable": "^5.0.2", "rxjs": "^7.4.0", "supports-color": "^8.1.1", "sync-child-process": "^1.0.2", "varint": "^6.0.0" }, "optionalDependencies": { "sass-embedded-all-unknown": "1.97.3", "sass-embedded-android-arm": "1.97.3", "sass-embedded-android-arm64": "1.97.3", "sass-embedded-android-riscv64": "1.97.3", "sass-embedded-android-x64": "1.97.3", "sass-embedded-darwin-arm64": "1.97.3", "sass-embedded-darwin-x64": "1.97.3", "sass-embedded-linux-arm": "1.97.3", "sass-embedded-linux-arm64": "1.97.3", "sass-embedded-linux-musl-arm": "1.97.3", "sass-embedded-linux-musl-arm64": "1.97.3", "sass-embedded-linux-musl-riscv64": "1.97.3", "sass-embedded-linux-musl-x64": "1.97.3", "sass-embedded-linux-riscv64": "1.97.3", "sass-embedded-linux-x64": "1.97.3", "sass-embedded-unknown-all": "1.97.3", "sass-embedded-win32-arm64": "1.97.3", "sass-embedded-win32-x64": "1.97.3" }, "bin": { "sass": "dist/bin/sass.js" } }, "sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA=="], - "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + "sass-embedded-all-unknown": ["sass-embedded-all-unknown@1.97.3", "", { "dependencies": { "sass": "1.97.3" }, "cpu": [ "!arm", "!x64", "!arm64", ] }, "sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg=="], - "inline-style-prefixer": ["inline-style-prefixer@7.0.1", "", { "dependencies": { "css-in-js-utils": "^3.1.0" } }, "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw=="], + "sass-embedded-android-arm": ["sass-embedded-android-arm@1.97.3", "", { "os": "android", "cpu": "arm" }, "sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg=="], - "input-otp": ["input-otp@1.4.2", "", { "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA=="], + "sass-embedded-android-arm64": ["sass-embedded-android-arm64@1.97.3", "", { "os": "android", "cpu": "arm64" }, "sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA=="], - "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + "sass-embedded-android-riscv64": ["sass-embedded-android-riscv64@1.97.3", "", { "os": "android", "cpu": "none" }, "sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA=="], - "internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], + "sass-embedded-android-x64": ["sass-embedded-android-x64@1.97.3", "", { "os": "android", "cpu": "x64" }, "sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw=="], - "ioredis": ["ioredis@5.10.0", "", { "dependencies": { "@ioredis/commands": "1.5.1", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA=="], + "sass-embedded-darwin-arm64": ["sass-embedded-darwin-arm64@1.97.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA=="], - "ip-address": ["ip-address@10.0.1", "", {}, "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA=="], + "sass-embedded-darwin-x64": ["sass-embedded-darwin-x64@1.97.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA=="], - "ipaddr.js": ["ipaddr.js@2.3.0", "", {}, "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg=="], + "sass-embedded-linux-arm": ["sass-embedded-linux-arm@1.97.3", "", { "os": "linux", "cpu": "arm" }, "sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA=="], - "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], + "sass-embedded-linux-arm64": ["sass-embedded-linux-arm64@1.97.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg=="], - "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], + "sass-embedded-linux-musl-arm": ["sass-embedded-linux-musl-arm@1.97.3", "", { "os": "linux", "cpu": "arm" }, "sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg=="], - "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], + "sass-embedded-linux-musl-arm64": ["sass-embedded-linux-musl-arm64@1.97.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw=="], - "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], + "sass-embedded-linux-musl-riscv64": ["sass-embedded-linux-musl-riscv64@1.97.3", "", { "os": "linux", "cpu": "none" }, "sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA=="], - "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], + "sass-embedded-linux-musl-x64": ["sass-embedded-linux-musl-x64@1.97.3", "", { "os": "linux", "cpu": "x64" }, "sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw=="], - "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], + "sass-embedded-linux-riscv64": ["sass-embedded-linux-riscv64@1.97.3", "", { "os": "linux", "cpu": "none" }, "sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA=="], - "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + "sass-embedded-linux-x64": ["sass-embedded-linux-x64@1.97.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg=="], - "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + "sass-embedded-unknown-all": ["sass-embedded-unknown-all@1.97.3", "", { "dependencies": { "sass": "1.97.3" }, "os": [ "!linux", "!win32", "!darwin", "!android", ] }, "sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q=="], - "is-buffer": ["is-buffer@2.0.5", "", {}, "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="], + "sass-embedded-win32-arm64": ["sass-embedded-win32-arm64@1.97.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw=="], - "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + "sass-embedded-win32-x64": ["sass-embedded-win32-x64@1.97.3", "", { "os": "win32", "cpu": "x64" }, "sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], - "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], - "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + "screenfull": ["screenfull@5.2.0", "", {}, "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA=="], - "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], + "seek-bzip": ["seek-bzip@2.0.0", "", { "dependencies": { "commander": "^6.0.0" }, "bin": { "seek-bunzip": "bin/seek-bunzip", "seek-table": "bin/seek-bzip-table" } }, "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg=="], - "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + "selderee": ["selderee@0.11.0", "", { "dependencies": { "parseley": "^0.12.0" } }, "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA=="], - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + "semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], - "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], + "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + "seq-queue": ["seq-queue@0.0.5", "", {}, "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="], - "is-generator-function": ["is-generator-function@1.1.2", "", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="], + "serialize-javascript": ["serialize-javascript@4.0.0", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw=="], - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], - "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], + "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], - "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], - "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], - "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="], + "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], - "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], + "set-harmonic-interval": ["set-harmonic-interval@1.0.1", "", {}, "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g=="], - "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], + "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], - "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], + "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + "sha.js": ["sha.js@2.4.12", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" } }, "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w=="], - "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], + "shallowequal": ["shallowequal@1.1.0", "", {}, "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="], - "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], - "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "is-property": ["is-property@1.0.2", "", {}, "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="], + "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], - "is-reference": ["is-reference@1.2.1", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="], + "shleemy": ["shleemy@1.2.2", "", {}, "sha512-w6/eQeTCTIqla+r9cxGK+fC10jv9JotaUWZsw2O/ncqkq6thcZMNI4S73dtoG4SXsYEaWJI3uzBRgEHt+rY6Vg=="], - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + "short-uuid": ["short-uuid@5.2.0", "", { "dependencies": { "any-base": "^1.1.0", "uuid": "^9.0.1" } }, "sha512-296/Nzi4DmANh93iYBwT4NoYRJuHnKEzefrkSagQbTH/A6NTaB68hSPDjm5IlbI5dx9FXdmtqPcj6N5H+CPm6w=="], - "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], - "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + "sift": ["sift@17.1.3", "", {}, "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ=="], - "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], - "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], + "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], - "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], + "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], - "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], + "sirv": ["sirv@3.0.2", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g=="], - "is-what": ["is-what@5.5.0", "", {}, "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw=="], + "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], - "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "slugify": ["slugify@1.6.6", "", {}, "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw=="], - "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "smol-toml": ["smol-toml@1.6.1", "", {}, "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg=="], - "isomorphic.js": ["isomorphic.js@0.2.5", "", {}, "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw=="], + "snowflake-uuid": ["snowflake-uuid@1.0.0", "", {}, "sha512-Y8Wj4ota0NgqXm2mhQ+lIWQQbUekkZYVlwXDGMmOpEhH4BfNVnCfDTqboeo0N+BFBN2FhRSaUWXLZBk4ngiImA=="], - "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], + "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="], - "istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="], + "socks-proxy-agent": ["socks-proxy-agent@6.2.1", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ=="], - "istanbul-reports": ["istanbul-reports@3.2.0", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="], + "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], - "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - "jake": ["jake@10.9.4", "", { "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4", "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" } }, "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA=="], + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - "jest-worker": ["jest-worker@26.6.2", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" } }, "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ=="], + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], - "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "sourcemap-codec": ["sourcemap-codec@1.4.8", "", {}, "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="], - "jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], - "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], + "sparse-bitfield": ["sparse-bitfield@3.0.3", "", { "dependencies": { "memory-pager": "^1.0.2" } }, "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ=="], - "js-base64": ["js-base64@3.7.8", "", {}, "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow=="], + "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], - "js-cookie": ["js-cookie@2.2.1", "", {}, "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="], + "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], - "js-md4": ["js-md4@0.3.2", "", {}, "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA=="], + "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], - "js-tokens": ["js-tokens@10.0.0", "", {}, "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q=="], + "spdx-license-ids": ["spdx-license-ids@3.0.23", "", {}, "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw=="], - "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], - "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], + "sql-highlight": ["sql-highlight@6.1.0", "", {}, "sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA=="], - "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + "sql.js": ["sql.js@1.14.1", "", {}, "sha512-gcj8zBWU5cFsi9WUP+4bFNXAyF1iRpA3LLyS/DP5xlrNzGmPIizUeBggKa8DbDwdqaKwUcTEnChtd2grWo/x/A=="], - "json-parse-better-errors": ["json-parse-better-errors@1.0.2", "", {}, "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="], + "sqlite3": ["sqlite3@5.1.7", "", { "dependencies": { "bindings": "^1.5.0", "node-addon-api": "^7.0.0", "prebuild-install": "^7.1.1", "tar": "^6.1.11" }, "optionalDependencies": { "node-gyp": "8.x" } }, "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog=="], - "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + "sqlstring": ["sqlstring@2.3.3", "", {}, "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="], - "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + "ssri": ["ssri@8.0.1", "", { "dependencies": { "minipass": "^3.1.1" } }, "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ=="], - "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "stable": ["stable@0.1.8", "", {}, "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="], - "json-schema-typed": ["json-schema-typed@8.0.2", "", {}, "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="], + "stack-generator": ["stack-generator@2.0.10", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ=="], - "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], - "json-with-bigint": ["json-with-bigint@3.5.8", "", {}, "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw=="], + "stackframe": ["stackframe@1.3.4", "", {}, "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="], - "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + "stacktrace-gps": ["stacktrace-gps@3.1.2", "", { "dependencies": { "source-map": "0.5.6", "stackframe": "^1.3.4" } }, "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ=="], - "jsonata": ["jsonata@2.1.0", "", {}, "sha512-OCzaRMK8HobtX8fp37uIVmL8CY1IGc/a6gLsDqz3quExFR09/U78HUzWYr7T31UEB6+Eu0/8dkVD5fFDOl9a8w=="], + "stacktrace-js": ["stacktrace-js@2.0.2", "", { "dependencies": { "error-stack-parser": "^2.0.6", "stack-generator": "^2.0.5", "stacktrace-gps": "^3.0.4" } }, "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg=="], - "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], - "jsonwebtoken": ["jsonwebtoken@9.0.3", "", { "dependencies": { "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g=="], + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], - "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], + "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], - "just-bash": ["just-bash@2.14.5", "", { "dependencies": { "diff": "^8.0.2", "fast-xml-parser": "^5.7.3", "file-type": "^21.2.0", "ini": "^6.0.0", "minimatch": "^10.1.1", "modern-tar": "^0.7.3", "papaparse": "^5.5.3", "quickjs-emscripten": "^0.32.0", "re2js": "^1.2.1", "seek-bzip": "^2.0.0", "smol-toml": "^1.6.0", "sprintf-js": "^1.1.3", "sql.js": "^1.13.0", "turndown": "^7.2.2", "yaml": "^2.8.2" }, "optionalDependencies": { "@mongodb-js/zstd": "^7.0.0", "node-liblzma": "^2.0.3" }, "bin": { "just-bash": "dist/bin/just-bash.js", "just-bash-shell": "dist/bin/shell/shell.js" } }, "sha512-MCBGnRlDeZ/MM7mcw+ZuSGFMBsggajrmKz6e/hrOAN7syvVZkjiY+Vh2wyCwN/CdcnAX5SxbiQB51n5nrQuX+g=="], + "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], - "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], - "jws": ["jws@4.0.1", "", { "dependencies": { "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA=="], + "streamx": ["streamx@2.25.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg=="], - "kareem": ["kareem@3.2.0", "", {}, "sha512-VS8MWZz/cT+SqBCpVfNN4zoVz5VskR3N4+sTmUXme55e9avQHntpwpNq0yjnosISXqwJ3AQVjlbI4Dyzv//JtA=="], + "string-hash": ["string-hash@1.1.3", "", {}, "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="], - "katex": ["katex@0.16.45", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA=="], + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "khroma": ["khroma@2.1.0", "", {}, "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="], + "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], - "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + "string.prototype.padend": ["string.prototype.padend@3.1.6", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q=="], - "layout-base": ["layout-base@1.0.2", "", {}, "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="], + "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], - "leac": ["leac@0.6.0", "", {}, "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg=="], + "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], - "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], - "lib0": ["lib0@0.2.117", "", { "dependencies": { "isomorphic.js": "^0.2.4" }, "bin": { "0serve": "bin/0serve.js", "0gentesthtml": "bin/gentesthtml.js", "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js" } }, "sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw=="], + "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], - "lightningcss": ["lightningcss@1.31.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.31.1", "lightningcss-darwin-arm64": "1.31.1", "lightningcss-darwin-x64": "1.31.1", "lightningcss-freebsd-x64": "1.31.1", "lightningcss-linux-arm-gnueabihf": "1.31.1", "lightningcss-linux-arm64-gnu": "1.31.1", "lightningcss-linux-arm64-musl": "1.31.1", "lightningcss-linux-x64-gnu": "1.31.1", "lightningcss-linux-x64-musl": "1.31.1", "lightningcss-win32-arm64-msvc": "1.31.1", "lightningcss-win32-x64-msvc": "1.31.1" } }, "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ=="], + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - "lightningcss-android-arm64": ["lightningcss-android-arm64@1.31.1", "", { "os": "android", "cpu": "arm64" }, "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg=="], + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.31.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg=="], + "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], - "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.31.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA=="], + "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.31.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A=="], + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.31.1", "", { "os": "linux", "cpu": "arm" }, "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g=="], + "strip-literal": ["strip-literal@1.3.0", "", { "dependencies": { "acorn": "^8.10.0" } }, "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg=="], - "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg=="], + "stripe": ["stripe@18.5.0", "", { "dependencies": { "qs": "^6.11.0" }, "peerDependencies": { "@types/node": ">=12.x.x" }, "optionalPeers": ["@types/node"] }, "sha512-Hp+wFiEQtCB0LlNgcFh5uVyKznpDjzyUZ+CNVEf+I3fhlYvh7rZruIg+jOwzJRCpy0ZTPMjlzm7J2/M2N6d+DA=="], - "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg=="], + "striptags": ["striptags@3.2.0", "", {}, "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw=="], - "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA=="], + "strnum": ["strnum@2.3.0", "", {}, "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q=="], - "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA=="], + "strtok3": ["strtok3@10.3.5", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA=="], - "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.31.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w=="], + "style-inject": ["style-inject@0.3.0", "", {}, "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw=="], - "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.31.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw=="], + "style-mod": ["style-mod@4.1.3", "", {}, "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ=="], - "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], - "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], - "linkify-it": ["linkify-it@3.0.3", "", { "dependencies": { "uc.micro": "^1.0.1" } }, "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ=="], + "styled-components": ["styled-components@6.3.11", "", { "dependencies": { "@emotion/is-prop-valid": "1.4.0", "@emotion/unitless": "0.10.0", "@types/stylis": "4.2.7", "css-to-react-native": "3.2.0", "csstype": "3.2.3", "postcss": "8.4.49", "shallowequal": "1.1.0", "stylis": "4.3.6", "tslib": "2.8.1" }, "peerDependencies": { "react": ">= 16.8.0", "react-dom": ">= 16.8.0" }, "optionalPeers": ["react-dom"] }, "sha512-opzgceGlQ5rdZdGwf9ddLW7EM2F4L7tgsgLn6fFzQ2JgE5EVQ4HZwNkcgB1p8WfOBx1GEZP3fa66ajJmtXhSrA=="], - "linkifyjs": ["linkifyjs@4.3.2", "", {}, "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA=="], + "stylehacks": ["stylehacks@5.1.1", "", { "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw=="], - "load-json-file": ["load-json-file@4.0.0", "", { "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" } }, "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw=="], + "stylis": ["stylis@4.3.6", "", {}, "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="], - "load-tsconfig": ["load-tsconfig@0.2.5", "", {}, "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg=="], + "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], - "loader-utils": ["loader-utils@3.3.1", "", {}, "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg=="], + "superjson": ["superjson@2.2.6", "", { "dependencies": { "copy-anything": "^4" } }, "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA=="], - "local-pkg": ["local-pkg@0.4.3", "", {}, "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g=="], + "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + "svgo": ["svgo@2.8.2", "", { "dependencies": { "commander": "^7.2.0", "css-select": "^4.1.3", "css-tree": "^1.1.3", "csso": "^4.2.0", "picocolors": "^1.0.0", "sax": "^1.5.0", "stable": "^0.1.8" }, "bin": "./bin/svgo" }, "sha512-TyzE4NVGLUFy+H/Uy4N6c3G0HEeprsVfge6Lmq+0FdQQ/zqoVYB62IsBZORsiL+o96s6ff/V6/3UQo/C0cgCAA=="], - "lodash-es": ["lodash-es@4.17.23", "", {}, "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="], + "sync-child-process": ["sync-child-process@1.0.2", "", { "dependencies": { "sync-message-port": "^1.0.0" } }, "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA=="], - "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], + "sync-message-port": ["sync-message-port@1.2.0", "", {}, "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg=="], - "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], + "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], - "lodash.defaults": ["lodash.defaults@4.2.0", "", {}, "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="], + "tailwindcss": ["tailwindcss@4.2.1", "", {}, "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw=="], - "lodash.includes": ["lodash.includes@4.3.0", "", {}, "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="], + "tapable": ["tapable@2.3.2", "", {}, "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA=="], - "lodash.isarguments": ["lodash.isarguments@3.1.0", "", {}, "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="], + "tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], - "lodash.isboolean": ["lodash.isboolean@3.0.3", "", {}, "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="], + "tar-fs": ["tar-fs@2.1.4", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ=="], - "lodash.isinteger": ["lodash.isinteger@4.0.4", "", {}, "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="], + "tar-stream": ["tar-stream@3.1.8", "", { "dependencies": { "b4a": "^1.6.4", "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ=="], - "lodash.isnumber": ["lodash.isnumber@3.0.3", "", {}, "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="], + "tarn": ["tarn@3.0.2", "", {}, "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ=="], - "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], + "tedious": ["tedious@18.6.2", "", { "dependencies": { "@azure/core-auth": "^1.7.2", "@azure/identity": "^4.2.1", "@azure/keyvault-keys": "^4.4.0", "@js-joda/core": "^5.6.1", "@types/node": ">=18", "bl": "^6.0.11", "iconv-lite": "^0.6.3", "js-md4": "^0.3.2", "native-duplexpair": "^1.0.0", "sprintf-js": "^1.1.3" } }, "sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg=="], - "lodash.isstring": ["lodash.isstring@4.0.1", "", {}, "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="], + "teex": ["teex@1.0.1", "", { "dependencies": { "streamx": "^2.12.5" } }, "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg=="], - "lodash.memoize": ["lodash.memoize@4.1.2", "", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="], + "terser": ["terser@5.46.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ=="], - "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + "test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], - "lodash.once": ["lodash.once@4.1.1", "", {}, "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="], + "test-servers": ["test-servers@workspace:src/systems/subspace/test-servers"], - "lodash.sortby": ["lodash.sortby@4.7.0", "", {}, "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="], + "text-decoder": ["text-decoder@1.2.7", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ=="], - "lodash.throttle": ["lodash.throttle@4.1.1", "", {}, "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="], + "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], - "lodash.uniq": ["lodash.uniq@4.5.0", "", {}, "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="], + "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], - "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], + "throttle-debounce": ["throttle-debounce@3.0.1", "", {}, "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg=="], - "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], + "tiny-case": ["tiny-case@1.0.3", "", {}, "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="], - "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], + "tiny-glob": ["tiny-glob@0.2.9", "", { "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" } }, "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + "tiny-warning": ["tiny-warning@1.0.3", "", {}, "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="], - "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], + "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], - "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], + "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], - "lowlight": ["lowlight@3.3.0", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.0.0", "highlight.js": "~11.11.0" } }, "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ=="], + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - "lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], - "lru.min": ["lru.min@1.1.4", "", {}, "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA=="], + "tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], - "luxon": ["luxon@3.7.2", "", {}, "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew=="], + "tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="], - "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + "tiptap-markdown": ["tiptap-markdown@0.9.0", "", { "dependencies": { "@types/markdown-it": "^13.0.7", "markdown-it": "^14.1.0", "markdown-it-task-lists": "^2.1.1", "prosemirror-markdown": "^1.11.1" }, "peerDependencies": { "@tiptap/core": "^3.0.1" } }, "sha512-dKLQ9iiuGNgrlGVjrNauF/UBzWu4LYOx5pkD0jNkmQt/GOwfCJsBuzZTsf1jZ204ANHOm572mZ9PYvGh1S7tpQ=="], - "magicast": ["magicast@0.5.2", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "source-map-js": "^1.2.1" } }, "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ=="], + "to-buffer": ["to-buffer@1.2.2", "", { "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", "typed-array-buffer": "^1.0.3" } }, "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw=="], - "make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], - "make-fetch-happen": ["make-fetch-happen@9.1.0", "", { "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^6.0.0", "minipass": "^3.1.3", "minipass-collect": "^1.0.2", "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.2", "promise-retry": "^2.0.1", "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" } }, "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg=="], + "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], - "markdown-it": ["markdown-it@14.1.1", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA=="], + "toggle-selection": ["toggle-selection@1.0.6", "", {}, "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ=="], - "markdown-it-task-lists": ["markdown-it-task-lists@2.1.1", "", {}, "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA=="], + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], + "token-types": ["token-types@6.1.2", "", { "dependencies": { "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww=="], - "marked": ["marked@18.0.3", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-7VT90JOkDeaRWpfjOReRGPEKn0ecdARBkDGL+tT1wZY0efPPqkUxLUSmzy/C7TIylQYJC9STISEsCHrqb/7VIA=="], + "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], - "maxmin": ["maxmin@2.1.0", "", { "dependencies": { "chalk": "^1.0.0", "figures": "^1.0.1", "gzip-size": "^3.0.0", "pretty-bytes": "^3.0.0" } }, "sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw=="], + "tr46": ["tr46@1.0.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA=="], - "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], + "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], - "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], - "mdast-util-frontmatter": ["mdast-util-frontmatter@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "escape-string-regexp": "^5.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0" } }, "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA=="], + "trim-trailing-lines": ["trim-trailing-lines@2.1.0", "", {}, "sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg=="], - "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], - "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], + "try": ["try@1.0.3", "", {}, "sha512-AHA8khVCII6zKyRkyPo6pRwoR9v5jb7QFw6e5avtaVSkxVfaEucYIo06xnwB+pJaEarfYNbs7W3Vq+LZLZiWyA=="], - "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], + "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], - "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], + "ts-dedent": ["ts-dedent@2.2.0", "", {}, "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ=="], - "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], + "ts-easing": ["ts-easing@0.2.0", "", {}, "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ=="], - "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], + "ts-error": ["ts-error@1.0.6", "", {}, "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA=="], - "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="], + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], - "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="], + "ts-poet": ["ts-poet@6.12.0", "", { "dependencies": { "dprint-node": "^1.0.8" } }, "sha512-xo+iRNMWqyvXpFTaOAvLPA5QAWO6TZrSUs5s4Odaya3epqofBu/fMLHEWl8jPmjhA0s9sgj9sNvF1BmaQlmQkA=="], - "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], + "ts-proto": ["ts-proto@2.11.4", "", { "dependencies": { "@bufbuild/protobuf": "^2.10.2", "case-anything": "^2.1.13", "ts-poet": "^6.12.0", "ts-proto-descriptors": "2.1.0" }, "bin": { "protoc-gen-ts_proto": "protoc-gen-ts_proto" } }, "sha512-LGf1llYT/YsZRIzz3nzBei5mR8Sq0xmrL0cI36Pdiuok2V4PHiDuXQGP+D9i3NzChuwURPo8KAmGV1HLH0xHyw=="], - "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], + "ts-proto-descriptors": ["ts-proto-descriptors@2.1.0", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0" } }, "sha512-S5EZYEQ6L9KLFfjSRpZWDIXDV/W7tAj8uW7pLsihIxyr62EAVSiKuVPwE8iWnr849Bqa53enex1jhDUcpgquzA=="], - "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], + "tsup": ["tsup@8.5.1", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.27.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing=="], - "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], - "mdn-data": ["mdn-data@2.0.14", "", {}, "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="], + "turbo": ["turbo@2.8.13", "", { "optionalDependencies": { "turbo-darwin-64": "2.8.13", "turbo-darwin-arm64": "2.8.13", "turbo-linux-64": "2.8.13", "turbo-linux-arm64": "2.8.13", "turbo-windows-64": "2.8.13", "turbo-windows-arm64": "2.8.13" }, "bin": { "turbo": "bin/turbo" } }, "sha512-nyM99hwFB9/DHaFyKEqatdayGjsMNYsQ/XBNO6MITc7roncZetKb97MpHxWf3uiU+LB9c9HUlU3Jp2Ixei2k1A=="], - "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], + "turbo-darwin-64": ["turbo-darwin-64@2.8.13", "", { "os": "darwin", "cpu": "x64" }, "sha512-PmOvodQNiOj77+Zwoqku70vwVjKzL34RTNxxoARjp5RU5FOj/CGiC6vcDQhNtFPUOWSAaogHF5qIka9TBhX4XA=="], - "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], + "turbo-darwin-arm64": ["turbo-darwin-arm64@2.8.13", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kI+anKcLIM4L8h+NsM7mtAUpElkCOxv5LgiQVQR8BASyDFfc8Efj5kCk3cqxuxOvIqx0sLfCX7atrHQ2kwuNJQ=="], - "memfs": ["memfs@workspace:src/systems/origin/apps/code-workspace/extensions/memfs"], + "turbo-linux-64": ["turbo-linux-64@2.8.13", "", { "os": "linux", "cpu": "x64" }, "sha512-j29KnQhHyzdzgCykBFeBqUPS4Wj7lWMnZ8CHqytlYDap4Jy70l4RNG46pOL9+lGu6DepK2s1rE86zQfo0IOdPw=="], - "memory-pager": ["memory-pager@1.5.0", "", {}, "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="], + "turbo-linux-arm64": ["turbo-linux-arm64@2.8.13", "", { "os": "linux", "cpu": "arm64" }, "sha512-OEl1YocXGZDRDh28doOUn49QwNe82kXljO1HXApjU0LapkDiGpfl3jkAlPKxEkGDSYWc8MH5Ll8S16Rf5tEBYg=="], - "memorystream": ["memorystream@0.3.1", "", {}, "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw=="], + "turbo-windows-64": ["turbo-windows-64@2.8.13", "", { "os": "win32", "cpu": "x64" }, "sha512-717bVk1+Pn2Jody7OmWludhEirEe0okoj1NpRbSm5kVZz/yNN/jfjbxWC6ilimXMz7xoMT3IDfQFJsFR3PMANA=="], - "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], + "turbo-windows-arm64": ["turbo-windows-arm64@2.8.13", "", { "os": "win32", "cpu": "arm64" }, "sha512-R819HShLIT0Wj6zWVnIsYvSNtRNj1q9VIyaUz0P24SMcLCbQZIm1sV09F4SDbg+KCCumqD2lcaR2UViQ8SnUJA=="], - "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], + "turndown": ["turndown@7.2.4", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + "tweetnacl": ["tweetnacl@1.0.3", "", {}, "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="], - "mermaid": ["mermaid@11.15.0", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.1.1", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.33.1", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.19", "dompurify": "^3.3.1", "es-toolkit": "^1.45.1", "katex": "^0.16.25", "khroma": "^2.1.0", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, "sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw=="], + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], - "metorial-dev-tools": ["metorial-dev-tools@workspace:scripts/dev-tools"], + "type-detect": ["type-detect@4.1.0", "", {}, "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw=="], - "metorial-test-tools": ["metorial-test-tools@workspace:scripts/test-tools"], + "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], - "microbundle": ["microbundle@0.15.1", "", { "dependencies": { "@babel/core": "^7.12.10", "@babel/plugin-proposal-class-properties": "7.12.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-jsx": "^7.12.1", "@babel/plugin-transform-flow-strip-types": "^7.12.10", "@babel/plugin-transform-react-jsx": "^7.12.11", "@babel/plugin-transform-regenerator": "^7.12.1", "@babel/preset-env": "^7.12.11", "@babel/preset-flow": "^7.12.1", "@babel/preset-react": "^7.12.10", "@rollup/plugin-alias": "^3.1.1", "@rollup/plugin-babel": "^5.2.2", "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.0.1", "@surma/rollup-plugin-off-main-thread": "^2.2.2", "asyncro": "^3.0.0", "autoprefixer": "^10.1.0", "babel-plugin-macros": "^3.0.1", "babel-plugin-transform-async-to-promises": "^0.8.18", "babel-plugin-transform-replace-expressions": "^0.2.0", "brotli-size": "^4.0.0", "builtin-modules": "^3.1.0", "camelcase": "^6.2.0", "escape-string-regexp": "^4.0.0", "filesize": "^6.1.0", "gzip-size": "^6.0.0", "kleur": "^4.1.3", "lodash.merge": "^4.6.2", "postcss": "^8.2.1", "pretty-bytes": "^5.4.1", "rollup": "^2.35.1", "rollup-plugin-bundle-size": "^1.0.3", "rollup-plugin-postcss": "^4.0.0", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.32.0", "rollup-plugin-visualizer": "^5.6.0", "sade": "^1.7.4", "terser": "^5.7.0", "tiny-glob": "^0.2.8", "tslib": "^2.0.3", "typescript": "^4.1.3" }, "bin": { "microbundle": "dist/cli.js" } }, "sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q=="], + "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], - "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], - "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], + "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], - "micromark-extension-frontmatter": ["micromark-extension-frontmatter@2.0.0", "", { "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg=="], + "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], - "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], + "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], - "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], + "typeorm": ["typeorm@0.3.22", "", { "dependencies": { "@sqltools/formatter": "^1.2.5", "ansis": "^3.17.0", "app-root-path": "^3.1.0", "buffer": "^6.0.3", "dayjs": "^1.11.13", "debug": "^4.4.0", "dotenv": "^16.4.7", "glob": "^10.4.5", "sha.js": "^2.4.11", "sql-highlight": "^6.0.0", "tslib": "^2.8.1", "uuid": "^11.1.0", "yargs": "^17.7.2" }, "peerDependencies": { "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0", "@sap/hana-client": "^2.12.25", "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", "mongodb": "^5.8.0 || ^6.0.0", "mssql": "^9.1.1 || ^10.0.1 || ^11.0.1", "mysql2": "^2.2.5 || ^3.0.1", "oracledb": "^6.3.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^3.1.1 || ^4.0.0", "reflect-metadata": "^0.1.14 || ^0.2.0", "sql.js": "^1.4.0", "sqlite3": "^5.0.3", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" }, "optionalPeers": ["@google-cloud/spanner", "@sap/hana-client", "better-sqlite3", "hdb-pool", "ioredis", "mongodb", "mssql", "mysql2", "oracledb", "pg", "pg-native", "pg-query-stream", "redis", "sql.js", "sqlite3", "ts-node", "typeorm-aurora-data-api-driver"], "bin": { "typeorm": "cli.js", "typeorm-ts-node-esm": "cli-ts-node-esm.js", "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js" } }, "sha512-P/Tsz3UpJ9+K0oryC0twK5PO27zejLYYwMsE8SISfZc1lVHX+ajigiOyWsKbuXpEFMjD9z7UjLzY3+ElVOMMDA=="], - "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], + "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], - "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], + "ua-parser-js": ["ua-parser-js@1.0.41", "", { "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug=="], - "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], + "uc.micro": ["uc.micro@1.0.6", "", {}, "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="], - "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], + "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], - "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], + "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], - "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], + "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], - "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], + "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], - "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "undici": ["undici@8.1.0", "", {}, "sha512-E9MkTS4xXLnRPYqxH2e6Hr2/49e7WFDKczKcCaFH4VaZs2iNvHMqeIkyUAD9vM8kujy9TjVrRlQ5KkdEJxB2pw=="], - "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], + "unicode-canonical-property-names-ecmascript": ["unicode-canonical-property-names-ecmascript@2.0.1", "", {}, "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg=="], - "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "unicode-match-property-ecmascript": ["unicode-match-property-ecmascript@2.0.0", "", { "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q=="], - "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], + "unicode-match-property-value-ecmascript": ["unicode-match-property-value-ecmascript@2.2.1", "", {}, "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg=="], - "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], + "unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.2.0", "", {}, "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ=="], - "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], - "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], + "unique-filename": ["unique-filename@1.1.1", "", { "dependencies": { "unique-slug": "^2.0.0" } }, "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ=="], - "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], + "unique-slug": ["unique-slug@2.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w=="], - "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], + "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], - "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], - "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], - "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], - "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "universal-github-app-jwt": ["universal-github-app-jwt@2.2.2", "", {}, "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw=="], - "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], + "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], - "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], - "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + "unplugin": ["unplugin@1.0.1", "", { "dependencies": { "acorn": "^8.8.1", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.5.0" } }, "sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA=="], - "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + "unzipper": ["unzipper@0.12.3", "", { "dependencies": { "bluebird": "~3.7.2", "duplexer2": "~0.1.4", "fs-extra": "^11.2.0", "graceful-fs": "^4.2.2", "node-int64": "^0.4.0" } }, "sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA=="], - "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], + "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], - "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - "minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "url-template": ["url-template@2.0.8", "", {}, "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw=="], - "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], - "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], + "use-composed-ref": ["use-composed-ref@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w=="], - "minipass-collect": ["minipass-collect@1.0.2", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="], + "use-delayed": ["use-delayed@0.1.0", "", { "peerDependencies": { "react": ">=16" } }, "sha512-z8whfQV4ZttiOrk73wGwhJ5NXRSB0lroQRGJYEAf5nQ+qdod5hwEY9U3EHaWHp8aVWlEoP1RVbLiQQd+LJB+gQ=="], - "minipass-fetch": ["minipass-fetch@1.4.1", "", { "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", "minizlib": "^2.0.0" }, "optionalDependencies": { "encoding": "^0.1.12" } }, "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw=="], + "use-interval": ["use-interval@1.4.0", "", { "peerDependencies": { "react": ">=16.8.0 || ^17" } }, "sha512-1betIJun2rXKLxa30AFOBZCeZhsBJoJ/3+gkCeYbJ63lAR//EnAb1NjNeFqzgqeM7zQfR76rrCUaA8DvfgoOpA=="], - "minipass-flush": ["minipass-flush@1.0.7", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA=="], + "use-isomorphic-layout-effect": ["use-isomorphic-layout-effect@1.2.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA=="], - "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="], + "use-latest": ["use-latest@1.3.0", "", { "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ=="], - "minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="], + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], - "minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], - "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - "mixpanel": ["mixpanel@0.18.1", "", { "dependencies": { "https-proxy-agent": "5.0.0" } }, "sha512-YD1xfn6WP6ZLQ6Pmgh0KgdXhueJEsrodThMTsHzHMH0VbWa9ck8s+ynDtM83OSgt+yQ61W/SQNrH8Y4wIwocGg=="], + "uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="], - "mkdirp": ["mkdirp@0.5.1", "", { "dependencies": { "minimist": "0.0.8" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA=="], + "v8-to-istanbul": ["v8-to-istanbul@9.3.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" } }, "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA=="], - "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], + "valibot": ["valibot@1.2.0", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg=="], - "mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], - "mnemonist": ["mnemonist@0.38.3", "", { "dependencies": { "obliterator": "^1.6.1" } }, "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw=="], + "varint": ["varint@6.0.0", "", {}, "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg=="], - "mocha": ["mocha@5.2.0", "", { "dependencies": { "browser-stdout": "1.3.1", "commander": "2.15.1", "debug": "3.1.0", "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", "growl": "1.10.5", "he": "1.1.1", "minimatch": "3.0.4", "mkdirp": "0.5.1", "supports-color": "5.4.0" }, "bin": { "mocha": "./bin/mocha", "_mocha": "./bin/_mocha" } }, "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ=="], + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - "modern-tar": ["modern-tar@0.7.6", "", {}, "sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg=="], + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], - "module-details-from-path": ["module-details-from-path@1.0.4", "", {}, "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w=="], + "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], - "mongodb": ["mongodb@6.16.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.1.9", "bson": "^6.10.3", "mongodb-connection-string-url": "^3.0.0" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.2.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw=="], + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - "mongodb-connection-string-url": ["mongodb-connection-string-url@3.0.2", "", { "dependencies": { "@types/whatwg-url": "^11.0.2", "whatwg-url": "^14.1.0 || ^13.0.0" } }, "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA=="], + "vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], - "mongoose": ["mongoose@9.4.1", "", { "dependencies": { "kareem": "3.2.0", "mongodb": "~7.1", "mpath": "0.9.0", "mquery": "6.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-4rFBWa+/wdBQSfvnOPJBpiSG6UCEbhSQh865dEdaH9Y8WfHBUC+I2XT28dp0IBIGrEwmh+gzrgZgea5PbmrHWA=="], + "vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], - "motion-dom": ["motion-dom@12.35.0", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-FFMLEnIejK/zDABn+vqGVAUN4T0+3fw+cVAY8MMT65yR+j5uMuvWdd4npACWhh94OVWQs79CrBBuwOwGRZAQiA=="], + "vite-plugin-html": ["vite-plugin-html@3.2.2", "", { "dependencies": { "@rollup/pluginutils": "^4.2.0", "colorette": "^2.0.16", "connect-history-api-fallback": "^1.6.0", "consola": "^2.15.3", "dotenv": "^16.0.0", "dotenv-expand": "^8.0.2", "ejs": "^3.1.6", "fast-glob": "^3.2.11", "fs-extra": "^10.0.1", "html-minifier-terser": "^6.1.0", "node-html-parser": "^5.3.3", "pathe": "^0.2.0" }, "peerDependencies": { "vite": ">=2.0.0" } }, "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q=="], - "motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="], + "vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], - "mpath": ["mpath@0.9.0", "", {}, "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew=="], + "vscode": ["vscode@1.1.37", "", { "dependencies": { "glob": "^7.1.2", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "mocha": "^5.2.0", "semver": "^5.4.1", "source-map-support": "^0.5.0", "vscode-test": "^0.4.1" }, "bin": { "vscode-install": "./bin/install" } }, "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg=="], - "mquery": ["mquery@6.0.0", "", {}, "sha512-b2KQNsmgtkscfeDgkYMcWGn9vZI9YoXh802VDEwE6qc50zxBFQ0Oo8ROkawbPAsXCY1/Z1yp0MagqsZStPWJjw=="], + "vscode-oniguruma": ["vscode-oniguruma@2.0.1", "", {}, "sha512-poJU8iHIWnC3vgphJnrLZyI3YdqRlR27xzqDmpPXYzA93R4Gk8z7T6oqDzDoHjoikA2aS82crdXFkjELCdJsjQ=="], - "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], + "vscode-test": ["vscode-test@0.4.3", "", { "dependencies": { "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^2.2.1" } }, "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w=="], - "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + "vscode-textmate": ["vscode-textmate@9.3.2", "", {}, "sha512-n2uGbUcrjhUEBH16uGA0TvUfhWwliFZ1e3+pTjrkim1Mt7ydB41lV08aUvsi70OlzDWp6X7Bx3w/x3fAXIsN0Q=="], - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "vscode-web": ["vscode-web@1.91.1", "", {}, "sha512-kzrbnxxmAmBDBLcTXQBM5Ehucdf35MI4pX1DHMPa6SFFg4IVKd18Qn6TrdG+VT4O4fk6nySovNP22GHky3nD8Q=="], - "msgpackr": ["msgpackr@1.11.5", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA=="], + "w3c-keyname": ["w3c-keyname@2.2.8", "", {}, "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="], - "msgpackr-extract": ["msgpackr-extract@3.0.3", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA=="], + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], - "mssql": ["mssql@11.0.1", "", { "dependencies": { "@tediousjs/connection-string": "^0.5.0", "commander": "^11.0.0", "debug": "^4.3.3", "rfdc": "^1.3.0", "tarn": "^3.0.2", "tedious": "^18.2.1" }, "bin": { "mssql": "bin/mssql" } }, "sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w=="], + "webidl-conversions": ["webidl-conversions@4.0.2", "", {}, "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="], - "mute-stream": ["mute-stream@2.0.0", "", {}, "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA=="], + "webpack-sources": ["webpack-sources@3.3.4", "", {}, "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q=="], - "mysql2": ["mysql2@3.15.3", "", { "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.7.0", "long": "^5.2.1", "lru.min": "^1.0.0", "named-placeholders": "^1.1.3", "seq-queue": "^0.0.5", "sqlstring": "^2.3.2" } }, "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg=="], + "webpack-virtual-modules": ["webpack-virtual-modules@0.5.0", "", {}, "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw=="], - "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], + "whatwg-url": ["whatwg-url@7.1.0", "", { "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="], - "named-placeholders": ["named-placeholders@1.1.6", "", { "dependencies": { "lru.min": "^1.1.0" } }, "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "nano-css": ["nano-css@5.6.2", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "css-tree": "^1.1.2", "csstype": "^3.1.2", "fastest-stable-stringify": "^2.0.2", "inline-style-prefixer": "^7.0.1", "rtl-css-js": "^1.16.1", "stacktrace-js": "^2.0.2", "stylis": "^4.3.0" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw=="], + "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], - "nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], + "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], - "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], + "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], - "native-duplexpair": ["native-duplexpair@1.0.0", "", {}, "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA=="], + "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], - "nats": ["nats@2.29.3", "", { "dependencies": { "nkeys.js": "1.1.0" } }, "sha512-tOQCRCwC74DgBTk4pWZ9V45sk4d7peoE2njVprMRCBXrhJ5q5cYM7i6W+Uvw2qUrcfOSnuisrX7bEx3b3Wx4QA=="], + "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], - "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + "wide-align": ["wide-align@1.1.5", "", { "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg=="], - "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], - "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], + "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], - "nice-grpc": ["nice-grpc@2.1.14", "", { "dependencies": { "@grpc/grpc-js": "^1.14.0", "abort-controller-x": "^0.4.0", "nice-grpc-common": "^2.0.2" } }, "sha512-GK9pKNxlvnU5FAdaw7i2FFuR9CqBspcE+if2tqnKXBcE0R8525wj4BZvfcwj7FjvqbssqKxRHt2nwedalbJlww=="], + "workerpool": ["workerpool@9.3.4", "", {}, "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg=="], - "nice-grpc-common": ["nice-grpc-common@2.0.2", "", { "dependencies": { "ts-error": "^1.0.6" } }, "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ=="], + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "nice-try": ["nice-try@1.0.5", "", {}, "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="], + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "nkeys.js": ["nkeys.js@1.1.0", "", { "dependencies": { "tweetnacl": "1.0.3" } }, "sha512-tB/a0shZL5UZWSwsoeyqfTszONTt4k2YS0tuQioMOD180+MbombYVgzDUYHlx+gejYK6rgf08n/2Df99WY0Sxg=="], + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], + "ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], - "node-abi": ["node-abi@3.89.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA=="], + "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], - "node-abort-controller": ["node-abort-controller@3.1.1", "", {}, "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="], + "xcase": ["xcase@2.0.1", "", {}, "sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw=="], - "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], + "xml-crypto": ["xml-crypto@6.1.2", "", { "dependencies": { "@xmldom/is-dom-node": "^1.0.1", "@xmldom/xmldom": "^0.8.10", "xpath": "^0.0.33" } }, "sha512-leBOVQdVi8FvPJrMYoum7Ici9qyxfE4kVi+AkpUoYCSXaQF4IlBm1cneTK9oAxR61LpYxTx7lNcsnBIeRpGW2w=="], - "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "xml-encryption": ["xml-encryption@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.5", "escape-html": "^1.0.3", "xpath": "0.0.32" } }, "sha512-PV7qnYpoAMXbf1kvQkqMScLeQpjCMixddAKq9PtqVrho8HnYbBOWNfG0kA4R7zxQDo7w9kiYAyzS/ullAyO55Q=="], - "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + "xml-naming": ["xml-naming@0.1.0", "", {}, "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw=="], - "node-forge": ["node-forge@1.3.1", "", {}, "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA=="], + "xml2js": ["xml2js@0.6.2", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA=="], - "node-gyp": ["node-gyp@8.4.1", "", { "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w=="], + "xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], - "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], + "xpath": ["xpath@0.0.33", "", {}, "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA=="], - "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], + "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], - "node-html-parser": ["node-html-parser@5.4.2", "", { "dependencies": { "css-select": "^4.2.1", "he": "1.2.0" } }, "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw=="], + "y-protocols": ["y-protocols@1.0.7", "", { "dependencies": { "lib0": "^0.2.85" }, "peerDependencies": { "yjs": "^13.0.0" } }, "sha512-YSVsLoXxO67J6eE/nV4AtFtT3QEotZf5sK5BHxFBXso7VDUT3Tx07IfA6hsu5Q5OmBdMkQVmFZ9QOA7fikWvnw=="], - "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - "node-liblzma": ["node-liblzma@2.2.0", "", { "dependencies": { "node-addon-api": "^8.5.0", "node-gyp-build": "^4.8.4" }, "bin": { "nxz": "lib/cli/nxz.js" } }, "sha512-s0KzNOWwOJJgPG6wxg6cKohnAl9Wk/oW1KrQaVzJBjQwVcUGPQCzpR46Ximygjqj/3KhOrtJXnYMp/xYAXp75g=="], + "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - "node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="], + "yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], - "nodemailer": ["nodemailer@8.0.7", "", {}, "sha512-pkjE4mkBzQjdJT4/UmlKl3pX0rC9fZmjh7c6C9o7lv66Ac6w9WCnzPzhbPNxwZAzlF4mdq4CSWB5+FbK6FWCow=="], + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - "nopt": ["nopt@8.1.0", "", { "dependencies": { "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A=="], + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - "normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], + "yargs-unparser": ["yargs-unparser@2.0.0", "", { "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" } }, "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA=="], - "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + "yjs": ["yjs@13.6.30", "", { "dependencies": { "lib0": "^0.2.99" } }, "sha512-vv/9h42eCMC81ZHDFswuu/MKzkl/vyq1BhaNGfHyOonwlG4CJbQF4oiBBJPvfdeCt/PlVDWh7Nov9D34YY09uQ=="], - "normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="], + "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], - "npm-run-all": ["npm-run-all@4.1.5", "", { "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", "cross-spawn": "^6.0.5", "memorystream": "^0.3.1", "minimatch": "^3.0.4", "pidtree": "^0.3.0", "read-pkg": "^3.0.0", "shell-quote": "^1.6.1", "string.prototype.padend": "^3.0.0" }, "bin": { "run-p": "bin/run-p/index.js", "run-s": "bin/run-s/index.js", "npm-run-all": "bin/npm-run-all/index.js" } }, "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ=="], + "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], - "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], + "yup": ["yup@1.7.1", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw=="], - "npmlog": ["npmlog@6.0.2", "", { "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", "gauge": "^4.0.3", "set-blocking": "^2.0.0" } }, "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg=="], + "zeptomatch": ["zeptomatch@2.1.0", "", { "dependencies": { "grammex": "^3.1.11", "graphmatch": "^1.1.0" } }, "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA=="], - "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], - "number-is-nan": ["number-is-nan@1.0.1", "", {}, "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="], + "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], - "nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "oauth4webapi": ["oauth4webapi@3.8.5", "", {}, "sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg=="], + "@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.8", "", {}, "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="], - "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + "@aws-crypto/crc32c/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + "@aws-crypto/sha1-browser/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "object-storage-client": ["object-storage-client@0.2.5", "", { "dependencies": { "axios": "^1.6.0" } }, "sha512-YlCCmPjqvySjmVE0vPaS4dVYeYwNwKI70jx0xcbCBIzdvo9E91U6vaNzRUlWyTB+k9H/XFzZUqtGO4+X/L19ew=="], + "@aws-crypto/sha1-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + "@aws-crypto/sha256-browser/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "obliterator": ["obliterator@1.6.1", "", {}, "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="], + "@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - "obuf": ["obuf@1.1.2", "", {}, "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="], + "@aws-crypto/sha256-js/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], + "@aws-crypto/util/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.30", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.25", "@aws-sdk/credential-provider-http": "^3.972.27", "@aws-sdk/credential-provider-ini": "^3.972.29", "@aws-sdk/credential-provider-process": "^3.972.25", "@aws-sdk/credential-provider-sso": "^3.972.29", "@aws-sdk/credential-provider-web-identity": "^3.972.29", "@aws-sdk/types": "^3.973.7", "@smithy/credential-provider-imds": "^4.2.13", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-FMnAnWxc8PG+ZrZ2OBKzY4luCUJhe9CG0B9YwYr4pzrYGLXBS2rl+UoUvjGbAwiptxRL6hyA3lFn03Bv1TLqTw=="], - "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + "@aws-sdk/client-codebuild/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-je5vRdNw4SkuTnmRbFZLdye4sQ0faLt8kwka5wnnSU30q1mHO4X+idGEJOOE+Tn1ME7Oryn05xxkDvIb3UaLaQ=="], - "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + "@aws-sdk/client-codebuild/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-HsVgDrruhqI28RkaXALm8grJ7Agc1wF6Et0xh6pom8NdO2VdO/SD9U/tPwUjewwK/pVoka+EShBxyCvgsPCtog=="], - "open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + "@aws-sdk/client-codebuild/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-RVQQbq5orQ/GHUnXvqEOj2HHPBJm+mM+ySwZKS5UaLBwra5ugRtiH09PLUoOZRl7a1YzaOzXSuGbn9iD5j60WQ=="], - "openid-client": ["openid-client@6.5.0", "", { "dependencies": { "jose": "^6.0.10", "oauth4webapi": "^3.5.1" } }, "sha512-fAfYaTnOYE2kQCqEJGX9KDObW2aw7IQy4jWpU/+3D3WoCFLbix5Hg6qIPQ6Js9r7f8jDUmsnnguRNCSw4wU/IQ=="], + "@aws-sdk/client-codebuild/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@aws-sdk/util-endpoints": "^3.996.6", "@smithy/core": "^3.23.14", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/util-retry": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-f/sIRzuTfEjg6NsbMYvye2VsmnQoNgntntleQyx5uGacUYzszbfIlO3GcI6G6daWUmTm0IDZc11qMHWwF0o0mQ=="], - "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + "@aws-sdk/client-codebuild/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/config-resolver": "^4.4.14", "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-6Q8B1dcx6BBqUTY1Mc/eROKA0FImEEY5VPSd6AGPEUf0ErjExz4snVqa9kNJSoVDV1rKaNf3qrWojgcKW+SdDg=="], - "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], + "@aws-sdk/client-codebuild/@aws-sdk/types": ["@aws-sdk/types@3.973.7", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-reXRwoJ6CfChoqAsBszUYajAF8Z2LRE+CRcKocvFSMpIiLOtYU3aJ9trmn6VVPAzbbY5LXF+FfmUslbXk1SYFg=="], - "orderedmap": ["orderedmap@2.1.1", "", {}, "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g=="], + "@aws-sdk/client-codebuild/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-endpoints": "^3.3.4", "tslib": "^2.6.2" } }, "sha512-2nUQ+2ih7CShuKHpGSIYvvAIOHy52dOZguYG36zptBukhw6iFwcvGfG0tes0oZFWQqEWvgZe9HLWaNlvXGdOrg=="], - "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], + "@aws-sdk/client-codebuild/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/types": "^4.14.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-sn/LMzTbGjYqCCF24390WxPd6hkpoSptiUn5DzVp4cD71yqw+yGEGm1YCxyEoPXyc8qciM8UzLJcZBFslxo5Uw=="], - "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], + "@aws-sdk/client-codebuild/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.15", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.29", "@aws-sdk/types": "^3.973.7", "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-fYn3s9PtKdgQkczGZCFMgkNEe8aq1JCVbnRqjqN9RSVW43xn2RV9xdcZ3z01a48Jpkuh/xCmBKJxdLOo4Ozg7w=="], - "p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], + "@aws-sdk/client-codebuild/@smithy/config-resolver": ["@smithy/config-resolver@4.4.15", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.4.0", "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-BJdMBY5YO9iHh+lPLYdHv6LbX+J8IcPCYMl1IJdBt2KDWNHwONHrPVHk3ttYBqJd9wxv84wlbN0f7GlQzcQtNQ=="], - "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + "@aws-sdk/client-codebuild/@smithy/core": ["@smithy/core@3.23.14", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.13", "@smithy/util-stream": "^4.5.22", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-vJ0IhpZxZAkFYOegMKSrxw7ujhhT2pass/1UEcZ4kfl5srTAqtPU5I7MdYQoreVas3204ykCiNhY1o7Xlz6Yyg=="], - "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], + "@aws-sdk/client-codebuild/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.16", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/querystring-builder": "^4.2.13", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-nYDRUIvNd4mFmuXraRWt6w5UsZTNqtj4hXJA/iiOD4tuseIdLP9Lq38teH/SZTcIFCa2f+27o7hYpIsWktJKEQ=="], - "p-queue": ["p-queue@9.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^7.0.0" } }, "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw=="], + "@aws-sdk/client-codebuild/@smithy/hash-node": ["@smithy/hash-node@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-4/oy9h0jjmY80a2gOIo75iLl8TOPhmtx4E2Hz+PfMjvx/vLtGY4TMU/35WRyH2JHPfT5CVB38u4JRow7gnmzJA=="], - "p-timeout": ["p-timeout@7.0.1", "", {}, "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg=="], + "@aws-sdk/client-codebuild/@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-jvC0RB/8BLj2SMIkY0Npl425IdnxZJxInpZJbu563zIRnVjpDMXevU3VMCRSabaLB0kf/eFIOusdGstrLJ8IDg=="], - "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], + "@aws-sdk/client-codebuild/@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.13", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-IPMLm/LE4AZwu6qiE8Rr8vJsWhs9AtOdySRXrOM7xnvclp77Tyh7hMs/FRrMf26kgIe67vFJXXOSmVxS7oKeig=="], - "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + "@aws-sdk/client-codebuild/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.29", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/middleware-serde": "^4.2.17", "@smithy/node-config-provider": "^4.3.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-R9Q/58U+qBiSARGWbAbFLczECg/RmysRksX6Q8BaQEpt75I7LI6WGDZnjuC9GXSGKljEbA7N118LhGaMbfrTXw=="], - "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], + "@aws-sdk/client-codebuild/@smithy/middleware-retry": ["@smithy/middleware-retry@4.5.1", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/node-config-provider": "^4.3.13", "@smithy/protocol-http": "^5.3.13", "@smithy/service-error-classification": "^4.2.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/util-middleware": "^4.2.13", "@smithy/util-retry": "^4.3.1", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-/zY+Gp7Qj2D2hVm3irkCyONER7E9MiX3cUUm/k2ZmhkzZkrPgwVS4aJ5NriZUEN/M0D1hhjrgjUmX04HhRwdWA=="], - "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + "@aws-sdk/client-codebuild/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.17", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-0T2mcaM6v9W1xku86Dk0bEW7aEseG6KenFkPK98XNw0ZhOqOiD1MrMsdnQw9QsL3/Oa85T53iSMlm0SZdSuIEQ=="], - "papaparse": ["papaparse@5.5.3", "", {}, "sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A=="], + "@aws-sdk/client-codebuild/@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-g72jN/sGDLyTanrCLH9fhg3oysO3f7tQa6eWWsMyn2BiYNCgjF24n4/I9wff/5XidFvjj9ilipAoQrurTUrLvw=="], - "param-case": ["param-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A=="], + "@aws-sdk/client-codebuild/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.13", "", { "dependencies": { "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-iGxQ04DsKXLckbgnX4ipElrOTk+IHgTyu0q0WssZfYhDm9CQWHmu6cOeI5wmWRxpXbBDhIIfXMWz5tPEtcVqbw=="], - "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + "@aws-sdk/client-codebuild/@smithy/node-http-handler": ["@smithy/node-http-handler@4.5.2", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/querystring-builder": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-/oD7u8M0oj2ZTFw7GkuuHWpIxtWdLlnyNkbrWcyVYhd5RJNDuczdkb0wfnQICyNFrVPlr8YHOhamjNy3zidhmA=="], - "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], + "@aws-sdk/client-codebuild/@smithy/protocol-http": ["@smithy/protocol-http@5.3.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-+HsmuJUF4u8POo6s8/a2Yb/AQ5t/YgLovCuHF9oxbocqv+SZ6gd8lC2duBFiCA/vFHoHQhoq7QjqJqZC6xOxxg=="], - "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + "@aws-sdk/client-codebuild/@smithy/smithy-client": ["@smithy/smithy-client@4.12.9", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/middleware-endpoint": "^4.4.29", "@smithy/middleware-stack": "^4.2.13", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" } }, "sha512-ovaLEcTU5olSeHcRXcxV6viaKtpkHZumn6Ps0yn7dRf2rRSfy794vpjOtrWDO0d1auDSvAqxO+lyhERSXQ03EQ=="], - "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + "@aws-sdk/client-codebuild/@smithy/types": ["@smithy/types@4.14.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-OWgntFLW88kx2qvf/c/67Vno1yuXm/f9M7QFAtVkkO29IJXGBIg0ycEaBTH0kvCtwmvZxRujrgP5a86RvsXJAQ=="], - "parseley": ["parseley@0.12.1", "", { "dependencies": { "leac": "^0.6.0", "peberminta": "^0.9.0" } }, "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw=="], + "@aws-sdk/client-codebuild/@smithy/url-parser": ["@smithy/url-parser@4.2.13", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-2G03yoboIRZlZze2+PT4GZEjgwQsJjUgn6iTsvxA02bVceHR6vp4Cuk7TUnPFWKF+ffNUk3kj4COwkENS2K3vw=="], - "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.45", "", { "dependencies": { "@smithy/property-provider": "^4.2.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-ag9sWc6/nWZAuK3Wm9KlFJUnRkXLrXn33RFjIAmCTFThqLHY+7wCst10BGq56FxslsDrjhSie46c8OULS+BiIw=="], - "pascal-case": ["pascal-case@3.1.2", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g=="], + "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.50", "", { "dependencies": { "@smithy/config-resolver": "^4.4.15", "@smithy/credential-provider-imds": "^4.2.13", "@smithy/node-config-provider": "^4.3.13", "@smithy/property-provider": "^4.2.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-xpjncL5XozFA3No7WypTsPU1du0fFS8flIyO+Wh2nhCy7bpEapvU7BR55Bg+wrfw+1cRA+8G8UsTjaxgzrMzXg=="], - "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], + "@aws-sdk/client-codebuild/@smithy/util-endpoints": ["@smithy/util-endpoints@3.4.0", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-QQHGPKkw6NPcU6TJ1rNEEa201srPtZiX4k61xL163vvs9sTqW/XKz+UEuJ00uvPqoN+5Rs4Ka1UJ7+Mp03IXJw=="], - "path-data-parser": ["path-data-parser@0.1.0", "", {}, "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="], + "@aws-sdk/client-codebuild/@smithy/util-middleware": ["@smithy/util-middleware@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-GTooyrlmRTqvUen4eK7/K1p6kryF7bnDfq6XsAbIsf2mo51B/utaH+XThY6dKgNCWzMAaH/+OLmqaBuLhLWRow=="], - "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + "@aws-sdk/client-codebuild/@smithy/util-retry": ["@smithy/util-retry@4.3.1", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-FwmicpgWOkP5kZUjN3y+3JIom8NLGqSAJBeoIgK0rIToI817TEBHCrd0A2qGeKQlgDeP+Jzn4i0H/NLAXGy9uQ=="], - "path-expression-matcher": ["path-expression-matcher@1.5.0", "", {}, "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.42", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-ini": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ=="], - "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + "@aws-sdk/client-cognito-identity/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + "@aws-sdk/client-cognito-identity/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], - "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + "@aws-sdk/client-cognito-identity/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], - "path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], + "@aws-sdk/client-cognito-identity/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], - "path-type": ["path-type@3.0.0", "", { "dependencies": { "pify": "^3.0.0" } }, "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg=="], + "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.42", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-ini": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ=="], - "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + "@aws-sdk/client-dynamodb/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], - "pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], + "@aws-sdk/client-dynamodb/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "pdfjs-dist": ["pdfjs-dist@5.7.284", "", { "optionalDependencies": { "@napi-rs/canvas": "^0.1.100" } }, "sha512-h4EdYQczmGhbOlqc3PPZwxevn7ApdWPbovAuWXOB/DjIyigSnwfy2oze7c6mRcSr9XgLp3eN3EeL4DyySTPMFw=="], + "@aws-sdk/client-dynamodb/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], - "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], + "@aws-sdk/client-dynamodb/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], - "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + "@aws-sdk/client-dynamodb/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], - "pg": ["pg@8.19.0", "", { "dependencies": { "pg-connection-string": "^2.11.0", "pg-pool": "^3.12.0", "pg-protocol": "^1.12.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.37", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.32", "@aws-sdk/credential-provider-http": "^3.972.34", "@aws-sdk/credential-provider-ini": "^3.972.36", "@aws-sdk/credential-provider-process": "^3.972.32", "@aws-sdk/credential-provider-sso": "^3.972.36", "@aws-sdk/credential-provider-web-identity": "^3.972.36", "@aws-sdk/types": "^3.973.8", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-/WFixFAAiw8WpmjZcI0l4t3DerXLmVinOIfuotmRZnu2qmsFPoqqmstASz0z8bi1pGdFXzeLzf6bwucM3mZcUQ=="], - "pg-cloudflare": ["pg-cloudflare@1.3.0", "", {}, "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ=="], + "@aws-sdk/client-kms/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg=="], - "pg-connection-string": ["pg-connection-string@2.11.0", "", {}, "sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ=="], + "@aws-sdk/client-kms/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ=="], - "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], + "@aws-sdk/client-kms/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ=="], - "pg-numeric": ["pg-numeric@1.0.2", "", {}, "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw=="], + "@aws-sdk/client-kms/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@smithy/core": "^3.23.17", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-retry": "^4.3.5", "tslib": "^2.6.2" } }, "sha512-O2beToxguBvrZFFZ+fFgPbbae8MvyIBjQ6lImee4APHEXXNAD5ZJ2ayLF1mb7rsKw86TM81y5czg82bZncjSjg=="], - "pg-pool": ["pg-pool@3.12.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg=="], + "@aws-sdk/client-kms/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.13", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/config-resolver": "^4.4.17", "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A=="], - "pg-protocol": ["pg-protocol@1.12.0", "", {}, "sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg=="], + "@aws-sdk/client-kms/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], - "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], + "@aws-sdk/client-kms/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-endpoints": "^3.4.2", "tslib": "^2.6.2" } }, "sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g=="], - "pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="], + "@aws-sdk/client-kms/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g=="], - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + "@aws-sdk/client-kms/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.22", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/types": "^3.973.8", "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-YTYqTmOUrwbm1h99Ee4y/mVYpFRl0oSO/amtP5cc1BZZWdaAVWs9zj3TkyRHWvR9aI/ZS8m3mS6awXtYUlWyaw=="], - "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@aws-sdk/client-kms/@smithy/config-resolver": ["@smithy/config-resolver@4.4.17", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ=="], - "picomatch-browser": ["picomatch-browser@2.2.6", "", {}, "sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w=="], + "@aws-sdk/client-kms/@smithy/core": ["@smithy/core@3.23.17", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-stream": "^4.5.25", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-x7BlLbUFL8NWCGjMF9C+1N5cVCxcPa7g6Tv9B4A2luWx3be3oU8hQ96wIwxe/s7OhIzvoJH73HAUSg5JXVlEtQ=="], - "pidtree": ["pidtree@0.3.1", "", { "bin": { "pidtree": "bin/pidtree.js" } }, "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA=="], + "@aws-sdk/client-kms/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.17", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/querystring-builder": "^4.2.14", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw=="], - "pify": ["pify@5.0.0", "", {}, "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA=="], + "@aws-sdk/client-kms/@smithy/hash-node": ["@smithy/hash-node@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g=="], - "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + "@aws-sdk/client-kms/@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw=="], - "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], + "@aws-sdk/client-kms/@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.14", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw=="], - "pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], + "@aws-sdk/client-kms/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.32", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/middleware-serde": "^4.2.20", "@smithy/node-config-provider": "^4.3.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-ZZkgyjnJppiZbIm6Qbx92pbXYi1uzenIvGhBSCDlc7NwuAkiqSgS75j1czAD25ZLs2FjMjYy1q7gyRVWG6JA0Q=="], - "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "@aws-sdk/client-kms/@smithy/middleware-retry": ["@smithy/middleware-retry@4.5.7", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/node-config-provider": "^4.3.14", "@smithy/protocol-http": "^5.3.14", "@smithy/service-error-classification": "^4.3.1", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.6", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-bRt6ZImqVSeTk39Nm81K20ObIiAZ3WefY7G6+iz/0tZjs4dgRRjvRX2sgsH+zi6iDCRR/aQvQofLKxxz4rPBZg=="], - "points-on-curve": ["points-on-curve@0.2.0", "", {}, "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="], + "@aws-sdk/client-kms/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.20", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-Lx9JMO9vArPtiChE3wbEZ5akMIDQpWQtlu90lhACQmNOXcGXRbaDywMHDzuDZ2OkZzP+9wQfZi3YJT9F67zTQQ=="], - "points-on-path": ["points-on-path@0.2.1", "", { "dependencies": { "path-data-parser": "0.1.0", "points-on-curve": "0.2.0" } }, "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g=="], + "@aws-sdk/client-kms/@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA=="], - "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + "@aws-sdk/client-kms/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.14", "", { "dependencies": { "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg=="], - "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + "@aws-sdk/client-kms/@smithy/node-http-handler": ["@smithy/node-http-handler@4.6.1", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/querystring-builder": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-iB+orM4x3xrr57X3YaXazfKnntl0LHlZB1kcXSGzMV1Tt0+YwEjGlbjk/44qEGtBzXAz6yFDzkYTKSV6Pj2HUg=="], - "postcss-calc": ["postcss-calc@8.2.4", "", { "dependencies": { "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.2" } }, "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q=="], + "@aws-sdk/client-kms/@smithy/protocol-http": ["@smithy/protocol-http@5.3.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ=="], - "postcss-colormin": ["postcss-colormin@5.3.1", "", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ=="], + "@aws-sdk/client-kms/@smithy/smithy-client": ["@smithy/smithy-client@4.12.13", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-stack": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" } }, "sha512-y/Pcj1V9+qG98gyu1gvftHB7rDpdh+7kIBIggs55yGm3JdtBV8GT8IFF3a1qxZ79QnaJHX9GXzvBG6tAd+czJA=="], - "postcss-convert-values": ["postcss-convert-values@5.1.3", "", { "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA=="], + "@aws-sdk/client-kms/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], - "postcss-discard-comments": ["postcss-discard-comments@5.1.2", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ=="], + "@aws-sdk/client-kms/@smithy/url-parser": ["@smithy/url-parser@4.2.14", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ=="], - "postcss-discard-duplicates": ["postcss-discard-duplicates@5.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw=="], + "@aws-sdk/client-kms/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.49", "", { "dependencies": { "@smithy/property-provider": "^4.2.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw=="], - "postcss-discard-empty": ["postcss-discard-empty@5.1.1", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A=="], + "@aws-sdk/client-kms/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.54", "", { "dependencies": { "@smithy/config-resolver": "^4.4.17", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw=="], - "postcss-discard-overridden": ["postcss-discard-overridden@5.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw=="], + "@aws-sdk/client-kms/@smithy/util-endpoints": ["@smithy/util-endpoints@3.4.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg=="], - "postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="], + "@aws-sdk/client-kms/@smithy/util-middleware": ["@smithy/util-middleware@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw=="], - "postcss-merge-longhand": ["postcss-merge-longhand@5.1.7", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.1" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ=="], + "@aws-sdk/client-kms/@smithy/util-retry": ["@smithy/util-retry@4.3.6", "", { "dependencies": { "@smithy/service-error-classification": "^4.3.1", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-p6/FO1n2KxMeQyna067i0uJ6TSbb165ZhnRtCpWh4Foxqbfc6oW+XITaL8QkFJj3KFnDe2URt4gOhgU06EP9ew=="], - "postcss-merge-rules": ["postcss-merge-rules@5.1.4", "", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.15", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.14", "@aws-sdk/credential-provider-http": "^3.972.16", "@aws-sdk/credential-provider-ini": "^3.972.14", "@aws-sdk/credential-provider-process": "^3.972.14", "@aws-sdk/credential-provider-sso": "^3.972.14", "@aws-sdk/credential-provider-web-identity": "^3.972.14", "@aws-sdk/types": "^3.973.4", "@smithy/credential-provider-imds": "^4.2.10", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-59NBJgTcQ2FC94T+SWkN5UQgViFtrLnkswSKhG5xbjPAotOXnkEF2Bf0bfUV1F3VaXzqAPZJoZ3bpg4rr8XD5Q=="], - "postcss-minify-font-values": ["postcss-minify-font-values@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA=="], + "@aws-sdk/client-s3/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5XHwjPH1lHB+1q4bfC7T8Z5zZrZXfaLcjSMwTd1HPSPrCmPFMbg3UQ5vgNWcVj0xoX4HWqTGkSf2byrjlnRg5w=="], - "postcss-minify-gradients": ["postcss-minify-gradients@5.1.1", "", { "dependencies": { "colord": "^2.9.1", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw=="], + "@aws-sdk/client-s3/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-iFnaMFMQdljAPrvsCVKYltPt2j40LQqukAbXvW7v0aL5I+1GO7bZ/W8m12WxW3gwyK5p5u1WlHg8TSAizC5cZw=="], - "postcss-minify-params": ["postcss-minify-params@5.1.4", "", { "dependencies": { "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw=="], + "@aws-sdk/client-s3/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-dY4v3of5EEMvik6+UDwQ96KfUFDk8m1oZDdkSc5lwi4o7rFrjnv0A+yTV+gu230iybQZnKgDLg/rt2P3H+Vscw=="], - "postcss-minify-selectors": ["postcss-minify-selectors@5.2.1", "", { "dependencies": { "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg=="], + "@aws-sdk/client-s3/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.16", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-endpoints": "^3.996.3", "@smithy/core": "^3.23.7", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-AmVxtxn8ZkNJbuPu3KKfW9IkJgTgcEtgSwbo0NVcAb31iGvLgHXj2nbbyrUDfh2fx8otXmqL+qw1lRaTi+V3vA=="], - "postcss-modules": ["postcss-modules@4.3.1", "", { "dependencies": { "generic-names": "^4.0.0", "icss-replace-symbols": "^1.1.0", "lodash.camelcase": "^4.3.0", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "string-hash": "^1.1.1" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q=="], + "@aws-sdk/client-s3/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/config-resolver": "^4.4.9", "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-Aa5PusHLXAqLTX1UKDvI3pHQJtIsF7Q+3turCHqfz/1F61/zDMWfbTC8evjhrrYVAtz9Vsv3SJ/waSUeu7B6gw=="], - "postcss-modules-extract-imports": ["postcss-modules-extract-imports@3.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q=="], + "@aws-sdk/client-s3/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "postcss-modules-local-by-default": ["postcss-modules-local-by-default@4.2.0", "", { "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw=="], + "@aws-sdk/client-s3/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.3", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-endpoints": "^3.3.1", "tslib": "^2.6.2" } }, "sha512-yWIQSNiCjykLL+ezN5A+DfBb1gfXTytBxm57e64lYmwxDHNmInYHRJYYRAGWG1o77vKEiWaw4ui28e3yb1k5aQ=="], - "postcss-modules-scope": ["postcss-modules-scope@3.2.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA=="], + "@aws-sdk/client-s3/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-Fwr/llD6GOrFgQnKaI2glhohdGuBDfHfora6iG9qsBBBR8xv1SdCSwbtf5CWlUdCw5X7g76G/9Hf0Inh0EmoxA=="], - "postcss-modules-values": ["postcss-modules-values@4.0.0", "", { "dependencies": { "icss-utils": "^5.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ=="], + "@aws-sdk/client-s3/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.1", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.16", "@aws-sdk/types": "^3.973.4", "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-kmgbDqT7aCBEVrqESM2JUjbf0zhDUQ7wnt3q1RuVS+3mglrcfVb2bwkbmf38npOyyPGtQPV5dWN3m+sSFAVAgQ=="], - "postcss-normalize-charset": ["postcss-normalize-charset@5.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg=="], + "@aws-sdk/client-s3/@smithy/config-resolver": ["@smithy/config-resolver@4.4.9", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.1", "@smithy/util-endpoints": "^3.3.1", "@smithy/util-middleware": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-ejQvXqlcU30h7liR9fXtj7PIAau1t/sFbJpgWPfiYDs7zd16jpH0IsSXKcba2jF6ChTXvIjACs27kNMc5xxE2Q=="], - "postcss-normalize-display-values": ["postcss-normalize-display-values@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA=="], + "@aws-sdk/client-s3/@smithy/core": ["@smithy/core@3.23.7", "", { "dependencies": { "@smithy/middleware-serde": "^4.2.11", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "@smithy/uuid": "^1.1.1", "tslib": "^2.6.2" } }, "sha512-/+ldRdtiO5Cb26afAZOG1FZM0x7D4AYdjpyOv2OScJw+4C7X+OLdRnNKF5UyUE0VpPgSKr3rnF/kvprRA4h2kg=="], - "postcss-normalize-positions": ["postcss-normalize-positions@5.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg=="], + "@aws-sdk/client-s3/@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.10", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-0xupsu9yj9oDVuQ50YCTS9nuSYhGlrwqdaKQel9y2Fz7LU9fNErVlw9N0o4pm4qqvWEGbSTI4HKc6XJfB30MVw=="], - "postcss-normalize-repeat-style": ["postcss-normalize-repeat-style@5.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g=="], + "@aws-sdk/client-s3/@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-8kn6sinrduk0yaYHMJDsNuiFpXwQwibR7n/4CDUqn4UgaG+SeBHu5jHGFdU9BLFAM7Q4/gvr9RYxBHz9/jKrhA=="], - "postcss-normalize-string": ["postcss-normalize-string@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w=="], + "@aws-sdk/client-s3/@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.10", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-uUrxPGgIffnYfvIOUmBM5i+USdEBRTdh7mLPttjphgtooxQ8CtdO1p6K5+Q4BBAZvKlvtJ9jWyrWpBJYzBKsyQ=="], - "postcss-normalize-timing-functions": ["postcss-normalize-timing-functions@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg=="], + "@aws-sdk/client-s3/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-muS5tFw+A/uo+U+yig06vk1776UFM+aAp9hFM8efI4ZcHhTcgv6NTeK4x7ltHeMPBwnhEjcf0MULTyxNkSNxDw=="], - "postcss-normalize-unicode": ["postcss-normalize-unicode@5.1.1", "", { "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA=="], + "@aws-sdk/client-s3/@smithy/hash-node": ["@smithy/hash-node@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-1VzIOI5CcsvMDvP3iv1vG/RfLJVVVc67dCRyLSB2Hn9SWCZrDO3zvcIzj3BfEtqRW5kcMg5KAeVf1K3dR6nD3w=="], - "postcss-normalize-url": ["postcss-normalize-url@5.1.0", "", { "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew=="], + "@aws-sdk/client-s3/@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-vy9KPNSFUU0ajFYk0sDZIYiUlAWGEAhRfehIr5ZkdFrRFTAuXEPUd41USuqHU6vvLX4r6Q9X7MKBco5+Il0Org=="], - "postcss-normalize-whitespace": ["postcss-normalize-whitespace@5.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA=="], + "@aws-sdk/client-s3/@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.10", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-TQZ9kX5c6XbjhaEBpvhSvMEZ0klBs1CFtOdPFwATZSbC9UeQfKHPLPN9Y+I6wZGMOavlYTOlHEPDrt42PMSH9w=="], - "postcss-ordered-values": ["postcss-ordered-values@5.1.3", "", { "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ=="], + "@aws-sdk/client-s3/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.21", "", { "dependencies": { "@smithy/core": "^3.23.7", "@smithy/middleware-serde": "^4.2.11", "@smithy/node-config-provider": "^4.3.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-middleware": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-CoVGZaqIC0tEjz0ga3ciwCMA5fd/4lIOwO2wx0fH+cTi1zxSFZnMJbIiIF9G1d4vRSDyTupDrpS3FKBBJGkRZg=="], - "postcss-reduce-initial": ["postcss-reduce-initial@5.1.2", "", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg=="], + "@aws-sdk/client-s3/@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.38", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/protocol-http": "^5.3.10", "@smithy/service-error-classification": "^4.2.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/util-middleware": "^4.2.10", "@smithy/util-retry": "^4.2.10", "@smithy/uuid": "^1.1.1", "tslib": "^2.6.2" } }, "sha512-WdHvdhjE6Fj78vxFwDKFDwlqGOGRUWrwGeuENUbTVE46Su9mnQM+dXHtbnCaQvwuSYrRsjpe8zUsFpwUp/azlA=="], - "postcss-reduce-transforms": ["postcss-reduce-transforms@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ=="], + "@aws-sdk/client-s3/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg=="], - "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], + "@aws-sdk/client-s3/@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA=="], - "postcss-svgo": ["postcss-svgo@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA=="], + "@aws-sdk/client-s3/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.10", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w=="], - "postcss-unique-selectors": ["postcss-unique-selectors@5.1.1", "", { "dependencies": { "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA=="], + "@aws-sdk/client-s3/@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.13", "", { "dependencies": { "@smithy/abort-controller": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-o8CP8w6tlUA0lk+Qfwm6Ed0jCWk3bEY6iBOJjdBaowbXKCSClk8zIHQvUL6RUZMvuNafF27cbRCMYqw6O1v4aA=="], - "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + "@aws-sdk/client-s3/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], - "postgres": ["postgres@3.4.7", "", {}, "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw=="], + "@aws-sdk/client-s3/@smithy/smithy-client": ["@smithy/smithy-client@4.12.1", "", { "dependencies": { "@smithy/core": "^3.23.7", "@smithy/middleware-endpoint": "^4.4.21", "@smithy/middleware-stack": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.16", "tslib": "^2.6.2" } }, "sha512-Xf9UFHlAihewfkmLNZ6I/Ek6kcYBKoU3cbRS9Z4q++9GWoW0YFbAHs7wMbuXm+nGuKHZ5OKheZMuDdaWPv8DJw=="], - "postgres-array": ["postgres-array@3.0.4", "", {}, "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ=="], + "@aws-sdk/client-s3/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "postgres-bytea": ["postgres-bytea@1.0.1", "", {}, "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ=="], + "@aws-sdk/client-s3/@smithy/url-parser": ["@smithy/url-parser@4.2.10", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A=="], - "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], + "@aws-sdk/client-s3/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], - "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], + "@aws-sdk/client-s3/@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g=="], - "postgres-range": ["postgres-range@1.1.4", "", {}, "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="], + "@aws-sdk/client-s3/@smithy/util-body-length-node": ["@smithy/util-body-length-node@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-4rHqBvxtJEBvsZcFQSPQqXP2b/yy/YlB66KlcEgcH2WNoOKCKB03DSLzXmOsXjbl8dJ4OEYTn31knhdznwk7zw=="], - "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], + "@aws-sdk/client-s3/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.37", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-JlPZhV1kQCGNJgofRTU6E8kHrjCKsb6cps8gco8QDVaFl7biFYzHg0p1x89ytIWyVyCkY3nOpO8tJPM47Vqlww=="], - "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + "@aws-sdk/client-s3/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.40", "", { "dependencies": { "@smithy/config-resolver": "^4.4.9", "@smithy/credential-provider-imds": "^4.2.10", "@smithy/node-config-provider": "^4.3.10", "@smithy/property-provider": "^4.2.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-BM5cPEsyxHdYYO4Da77E94lenhaVPNUzBTyCGDkcw/n/mE8Q1cfHwr+n/w2bNPuUsPC30WaW5/hGKWOTKqw8kw=="], - "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], + "@aws-sdk/client-s3/@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-xyctc4klmjmieQiF9I1wssBWleRV0RhJ2DpO8+8yzi2LO1Z+4IWOZNGZGNj4+hq9kdo+nyfrRLmQTzc16Op2Vg=="], - "pretty-bytes": ["pretty-bytes@5.6.0", "", {}, "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="], + "@aws-sdk/client-s3/@smithy/util-middleware": ["@smithy/util-middleware@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA=="], - "pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "@aws-sdk/client-s3/@smithy/util-retry": ["@smithy/util-retry@4.2.10", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-HrBzistfpyE5uqTwiyLsFHscgnwB0kgv8vySp7q5kZ0Eltn/tjosaSGGDj/jJ9ys7pWzIP/icE2d+7vMKXLv7A=="], - "prism-react-renderer": ["prism-react-renderer@2.4.1", "", { "dependencies": { "@types/prismjs": "^1.26.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": ">=16.0.0" } }, "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig=="], + "@aws-sdk/client-s3/@smithy/util-stream": ["@smithy/util-stream@4.5.16", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.12", "@smithy/node-http-handler": "^4.4.13", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-c7awZV6cxY0czgDDSr+Bz0XfRtg8AwW2BWhrHhLJISrpmwv8QzA2qzTllWyMVNdy1+UJr9vCm29hzuh3l8TTFw=="], - "prisma": ["prisma@7.4.2", "", { "dependencies": { "@prisma/config": "7.4.2", "@prisma/dev": "0.20.0", "@prisma/engines": "7.4.2", "@prisma/studio-core": "0.13.1", "mysql2": "3.15.3", "postgres": "3.4.7" }, "peerDependencies": { "better-sqlite3": ">=9.0.0", "typescript": ">=5.4.0" }, "optionalPeers": ["better-sqlite3", "typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-2bP8Ruww3Q95Z2eH4Yqh4KAENRsj/SxbdknIVBfd6DmjPwmpsC4OVFMLOeHt6tM3Amh8ebjvstrUz3V/hOe1dA=="], + "@aws-sdk/client-s3/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], - "prisma-json-types-generator": ["prisma-json-types-generator@4.1.1", "", { "dependencies": { "@prisma/generator-helper": "^7.2.0", "semver": "^7.7.3", "try": "^1.0.3", "tslib": "^2.8.1" }, "peerDependencies": { "@prisma/client": "^7.2.0", "prisma": "^7.2.0", "typescript": "^5.9.3" }, "bin": { "prisma-json-types-generator": "index.js" } }, "sha512-oz0MYu1r2Jqu3qOGCEGulz6RjPsECVjyS3ZAz3HEmz0jkKbVkZEwQyksNJm0X5utV1TZCmaG/98EPExN7S22xw=="], + "@aws-sdk/client-s3/@smithy/util-waiter": ["@smithy/util-waiter@4.2.10", "", { "dependencies": { "@smithy/abort-controller": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-4eTWph/Lkg1wZEDAyObwme0kmhEb7J/JjibY2znJdrYRgKbKqB7YoEhhJVJ4R1g/SYih4zuwX7LpJaM8RsnTVg=="], - "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.44", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.39", "@aws-sdk/credential-provider-http": "^3.972.41", "@aws-sdk/credential-provider-ini": "^3.972.43", "@aws-sdk/credential-provider-process": "^3.972.39", "@aws-sdk/credential-provider-sso": "^3.972.43", "@aws-sdk/credential-provider-web-identity": "^3.972.43", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-sDaBIT0yrNNIPfvlsiTCmANm07zKju+ipWODjEXgZlsjMeIJR3LVp7RDyAOzUoAsTbDfYKDWp+i5WrFiQP6rmQ=="], - "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], + "@aws-sdk/client-ses/@aws-sdk/types": ["@aws-sdk/types@3.973.9", "", { "dependencies": { "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-kuBfgQVdcz5Bmapc4A13YbpVw/pXkesfhetcFYwbntqas8sF41OHyd4o28+/TG2ZQdHBsv90Lsu5y6oitvYCdg=="], - "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + "@aws-sdk/client-ses/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], + "@aws-sdk/client-ses/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], - "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="], + "@aws-sdk/client-ses/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], - "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], + "@aws-sdk/client-ses/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "promise.series": ["promise.series@0.2.0", "", {}, "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ=="], + "@aws-sdk/core/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], - "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + "@aws-sdk/core/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], + "@aws-sdk/core/@smithy/signature-v4": ["@smithy/signature-v4@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-53+75QuPl6DL+ct6vVEB51FDO5oulXr20TPV46VvJZg76lIlXNWfxi8j+G2V/t0I2qxCBOa3vX/8bmjrpFVo9g=="], - "property-expr": ["property-expr@2.0.6", "", {}, "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="], + "@aws-sdk/core/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], - "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], + "@aws-sdk/crc64-nvme/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "prosemirror-changeset": ["prosemirror-changeset@2.4.0", "", { "dependencies": { "prosemirror-transform": "^1.0.0" } }, "sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng=="], + "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], - "prosemirror-collab": ["prosemirror-collab@1.3.1", "", { "dependencies": { "prosemirror-state": "^1.0.0" } }, "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ=="], + "@aws-sdk/credential-provider-cognito-identity/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "prosemirror-commands": ["prosemirror-commands@1.7.1", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.10.2" } }, "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w=="], + "@aws-sdk/credential-provider-cognito-identity/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "prosemirror-dropcursor": ["prosemirror-dropcursor@1.8.2", "", { "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0", "prosemirror-view": "^1.1.0" } }, "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw=="], + "@aws-sdk/credential-provider-ini/@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-sIk8oa6AzDoUhxsR11svZESqvzGuXesw62Rl2oW6wguZx8i9cdGCvkFg+h5K7iucUZP8wyWibUbJMc+J66cu5g=="], - "prosemirror-gapcursor": ["prosemirror-gapcursor@1.4.0", "", { "dependencies": { "prosemirror-keymap": "^1.0.0", "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-view": "^1.0.0" } }, "sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ=="], + "@aws-sdk/credential-provider-login/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], - "prosemirror-history": ["prosemirror-history@1.5.0", "", { "dependencies": { "prosemirror-state": "^1.2.2", "prosemirror-transform": "^1.0.0", "prosemirror-view": "^1.31.0", "rope-sequence": "^1.3.0" } }, "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg=="], + "@aws-sdk/credential-provider-login/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "prosemirror-inputrules": ["prosemirror-inputrules@1.5.1", "", { "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.0.0" } }, "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw=="], + "@aws-sdk/credential-provider-login/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "prosemirror-keymap": ["prosemirror-keymap@1.2.3", "", { "dependencies": { "prosemirror-state": "^1.0.0", "w3c-keyname": "^2.2.0" } }, "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q=="], - "prosemirror-markdown": ["prosemirror-markdown@1.13.4", "", { "dependencies": { "@types/markdown-it": "^14.0.0", "markdown-it": "^14.0.0", "prosemirror-model": "^1.25.0" } }, "sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg=="], - "prosemirror-menu": ["prosemirror-menu@1.3.0", "", { "dependencies": { "crelt": "^1.0.0", "prosemirror-commands": "^1.0.0", "prosemirror-history": "^1.0.0", "prosemirror-state": "^1.0.0" } }, "sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-login": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w=="], - "prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.42", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-ini": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ=="], - "prosemirror-schema-basic": ["prosemirror-schema-basic@1.2.4", "", { "dependencies": { "prosemirror-model": "^1.25.0" } }, "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg=="], - "prosemirror-schema-list": ["prosemirror-schema-list@1.5.1", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.7.3" } }, "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/token-providers": "3.1048.0", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ=="], - "prosemirror-state": ["prosemirror-state@1.4.4", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-transform": "^1.0.0", "prosemirror-view": "^1.27.0" } }, "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A=="], - "prosemirror-tables": ["prosemirror-tables@1.8.5", "", { "dependencies": { "prosemirror-keymap": "^1.2.3", "prosemirror-model": "^1.25.4", "prosemirror-state": "^1.4.4", "prosemirror-transform": "^1.10.5", "prosemirror-view": "^1.41.4" } }, "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw=="], + "@aws-sdk/credential-providers/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], - "prosemirror-trailing-node": ["prosemirror-trailing-node@3.0.0", "", { "dependencies": { "@remirror/core-constants": "3.0.0", "escape-string-regexp": "^4.0.0" }, "peerDependencies": { "prosemirror-model": "^1.22.1", "prosemirror-state": "^1.4.2", "prosemirror-view": "^1.33.8" } }, "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ=="], + "@aws-sdk/credential-providers/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], + "@aws-sdk/credential-providers/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.3.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w=="], - "prosemirror-view": ["prosemirror-view@1.41.6", "", { "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg=="], + "@aws-sdk/credential-providers/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], - "protobufjs": ["protobufjs@7.5.4", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="], + "@aws-sdk/dynamodb-codec/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + "@aws-sdk/dynamodb-codec/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "@aws-sdk/middleware-bucket-endpoint/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], + "@aws-sdk/middleware-bucket-endpoint/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.10", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w=="], - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + "@aws-sdk/middleware-bucket-endpoint/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], - "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], + "@aws-sdk/middleware-bucket-endpoint/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + "@aws-sdk/middleware-bucket-endpoint/@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A=="], - "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], + "@aws-sdk/middleware-endpoint-discovery/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "@aws-sdk/middleware-endpoint-discovery/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "quickjs-emscripten": ["quickjs-emscripten@0.32.0", "", { "dependencies": { "@jitl/quickjs-wasmfile-debug-asyncify": "0.32.0", "@jitl/quickjs-wasmfile-debug-sync": "0.32.0", "@jitl/quickjs-wasmfile-release-asyncify": "0.32.0", "@jitl/quickjs-wasmfile-release-sync": "0.32.0", "quickjs-emscripten-core": "0.32.0" } }, "sha512-So0Sqw869y/S2oE3Nuc0uT3Dhqgvsj8FSrwBdsuTosVsG8ME5/OcudU1GxsrIFdFABgy17GHnTVO9TYV/bLQcA=="], + "@aws-sdk/middleware-endpoint-discovery/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "quickjs-emscripten-core": ["quickjs-emscripten-core@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-QFnPfjFey8EqknSrSxe1hZrf1/8z7/6s1QzGOmKo6++02r7QRRX7ZoyNaZh7JuVjWsVW87KnQrbZqnHkOAzUyg=="], + "@aws-sdk/middleware-expect-continue/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], + "@aws-sdk/middleware-expect-continue/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + "@aws-sdk/middleware-expect-continue/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "rate-limiter-flexible": ["rate-limiter-flexible@8.3.0", "", {}, "sha512-mzwlfipDLlRinPgELqVDJetke6Snq26nL565m8nLWXIcWgosYSeNRgqwh7ZrZ4MfYs8CNfmLvR5SBVz3rISQsQ=="], + "@aws-sdk/middleware-flexible-checksums/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.10", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w=="], - "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], - "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "re2js": ["re2js@1.4.0", "", {}, "sha512-KTOIcZTSOpOxbu3i0+T6mFQ6tkxXKlTxfcMFs1trQbsMnG84qNq+DjXr8Afu+FEFjvF1NNlldpC7roPyazFI8g=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-middleware": ["@smithy/util-middleware@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA=="], - "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream": ["@smithy/util-stream@4.5.16", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.12", "@smithy/node-http-handler": "^4.4.13", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-c7awZV6cxY0czgDDSr+Bz0XfRtg8AwW2BWhrHhLJISrpmwv8QzA2qzTllWyMVNdy1+UJr9vCm29hzuh3l8TTFw=="], - "react-apexcharts": ["react-apexcharts@1.9.0", "", { "dependencies": { "prop-types": "^15.8.1" }, "peerDependencies": { "apexcharts": ">=4.0.0", "react": ">=16.8.0" } }, "sha512-DDBzQFuKdwyCEZnji1yIcjlnV8hRr4VDabS5Y3iuem/WcTq6n4VbjWPzbPm3aOwW4I+rf/gA3zWqhws4z9CwLw=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], - "react-avatar-editor": ["react-avatar-editor@13.0.2", "", { "dependencies": { "@babel/plugin-transform-runtime": "^7.12.1", "@babel/runtime": "^7.12.5", "prop-types": "^15.7.2" }, "peerDependencies": { "react": "^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom": "^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, "sha512-a4ajbi7lwDh98kgEtSEeKMu0vs0CHTczkq4Xcxr1EiwMFH1GlgHCEtwGU8q/H5W8SeLnH4KPK8LUjEEaZXklxQ=="], + "@aws-sdk/middleware-location-constraint/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], + "@aws-sdk/middleware-location-constraint/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "react-dropzone": ["react-dropzone@14.4.1", "", { "dependencies": { "attr-accept": "^2.2.4", "file-selector": "^2.1.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.8 || 18.0.0" } }, "sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g=="], + "@aws-sdk/middleware-sdk-s3/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "react-fast-compare": ["react-fast-compare@3.2.2", "", {}, "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/core": ["@smithy/core@3.23.7", "", { "dependencies": { "@smithy/middleware-serde": "^4.2.11", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "@smithy/uuid": "^1.1.1", "tslib": "^2.6.2" } }, "sha512-/+ldRdtiO5Cb26afAZOG1FZM0x7D4AYdjpyOv2OScJw+4C7X+OLdRnNKF5UyUE0VpPgSKr3rnF/kvprRA4h2kg=="], - "react-feather": ["react-feather@2.0.10", "", { "dependencies": { "prop-types": "^15.7.2" }, "peerDependencies": { "react": ">=16.8.6" } }, "sha512-BLhukwJ+Z92Nmdcs+EMw6dy1Z/VLiJTzEQACDUEnWMClhYnFykJCGWQx+NmwP/qQHGX/5CzQ+TGi8ofg2+HzVQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.10", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w=="], - "react-helmet": ["react-helmet@6.1.0", "", { "dependencies": { "object-assign": "^4.1.1", "prop-types": "^15.7.2", "react-fast-compare": "^3.1.1", "react-side-effect": "^2.1.0" }, "peerDependencies": { "react": ">=16.3.0" } }, "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw=="], + "@aws-sdk/middleware-sdk-s3/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], - "react-hook-form": ["react-hook-form@7.72.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-V4v6jubaf6JAurEaVnT9aUPKFbNtDgohj5CIgVGyPHvT9wRx5OZHVjz31GsxnPNI278XMu+ruFz+wGOscHaLKw=="], + "@aws-sdk/middleware-sdk-s3/@smithy/signature-v4": ["@smithy/signature-v4@5.3.10", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-uri-escape": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA=="], - "react-hotkeys-hook": ["react-hotkeys-hook@5.2.4", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-BgKg+A1+TawkYluh5Bo4cTmcgMN5L29uhJbDUQdHwPX+qgXRjIPYU5kIDHyxnAwCkCBiu9V5OpB2mpyeluVF2A=="], + "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client": ["@smithy/smithy-client@4.12.1", "", { "dependencies": { "@smithy/core": "^3.23.7", "@smithy/middleware-endpoint": "^4.4.21", "@smithy/middleware-stack": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.16", "tslib": "^2.6.2" } }, "sha512-Xf9UFHlAihewfkmLNZ6I/Ek6kcYBKoU3cbRS9Z4q++9GWoW0YFbAHs7wMbuXm+nGuKHZ5OKheZMuDdaWPv8DJw=="], - "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "react-markdown": ["react-markdown@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A=="], - "react-medium-image-zoom": ["react-medium-image-zoom@5.4.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-DD2iZYaCfAwiQGR8AN62r/cDJYoXhezlYJc5HY4TzBUGuGge43CptG0f7m0PEIM72aN6GfpjohvY1yYdtCJB7g=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-middleware": ["@smithy/util-middleware@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA=="], - "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream": ["@smithy/util-stream@4.5.16", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.12", "@smithy/node-http-handler": "^4.4.13", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-c7awZV6cxY0czgDDSr+Bz0XfRtg8AwW2BWhrHhLJISrpmwv8QzA2qzTllWyMVNdy1+UJr9vCm29hzuh3l8TTFw=="], - "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], - "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], + "@aws-sdk/middleware-ssec/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "react-router": ["react-router@6.30.3", "", { "dependencies": { "@remix-run/router": "1.23.2" }, "peerDependencies": { "react": ">=16.8" } }, "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw=="], + "@aws-sdk/middleware-ssec/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "react-router-dom": ["react-router-dom@6.30.3", "", { "dependencies": { "@remix-run/router": "1.23.2", "react-router": "6.30.3" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag=="], + "@aws-sdk/nested-clients/@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.27", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/signature-v4": "^5.4.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-0Phbz4t6HI3D3skxvG2uI+VWU034/nSIw1T8d+FPzzQG9EQTrw94o9mOKO2Gv3n3Oc8P7JD7RAUxkoneLWv5Eg=="], - "react-side-effect": ["react-side-effect@2.1.2", "", { "peerDependencies": { "react": "^16.3.0 || ^17.0.0 || ^18.0.0" } }, "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw=="], + "@aws-sdk/nested-clients/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], - "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], + "@aws-sdk/nested-clients/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], - "react-textarea-autosize": ["react-textarea-autosize@8.5.9", "", { "dependencies": { "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A=="], + "@aws-sdk/nested-clients/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], - "react-trend": ["react-trend@1.2.5", "", { "dependencies": { "prop-types": "^15.5.8" }, "peerDependencies": { "react": "" } }, "sha512-8//dg52xjPKkWPcd7Iml5WfwellgBpeILbN2tKhTP5gacJbg8jDTsNoEJboN9ATf9OllODpo4/gXhguNAIo7gg=="], + "@aws-sdk/nested-clients/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], - "react-universal-interface": ["react-universal-interface@0.6.2", "", { "peerDependencies": { "react": "*", "tslib": "*" } }, "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw=="], + "@aws-sdk/nested-clients/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], - "react-use": ["react-use@17.6.0", "", { "dependencies": { "@types/js-cookie": "^2.2.6", "@xobotyi/scrollbar-width": "^1.9.5", "copy-to-clipboard": "^3.3.1", "fast-deep-equal": "^3.1.3", "fast-shallow-equal": "^1.0.0", "js-cookie": "^2.2.1", "nano-css": "^5.6.2", "react-universal-interface": "^0.6.2", "resize-observer-polyfill": "^1.5.1", "screenfull": "^5.1.0", "set-harmonic-interval": "^1.0.1", "throttle-debounce": "^3.0.1", "ts-easing": "^0.2.0", "tslib": "^2.1.0" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g=="], + "@aws-sdk/signature-v4-multi-region/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], - "react-wrap-balancer": ["react-wrap-balancer@1.1.1", "", { "peerDependencies": { "react": ">=16.8.0 || ^17.0.0 || ^18" } }, "sha512-AB+l7FPRWl6uZ28VcJ8skkwLn2+UC62bjiw8tQUrZPlEWDVnR9MG0lghyn7EyxuJSsFEpht4G+yh2WikEqQ/5Q=="], + "@aws-sdk/signature-v4-multi-region/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], - "read-pkg": ["read-pkg@3.0.0", "", { "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA=="], + "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4": ["@smithy/signature-v4@5.3.10", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-uri-escape": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA=="], - "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "@aws-sdk/signature-v4-multi-region/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + "@aws-sdk/xml-builder/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "redis": ["redis@5.11.0", "", { "dependencies": { "@redis/bloom": "5.11.0", "@redis/client": "5.11.0", "@redis/json": "5.11.0", "@redis/search": "5.11.0", "@redis/time-series": "5.11.0" } }, "sha512-YwXjATVDT+AuxcyfOwZn046aml9jMlQPvU1VXIlLDVAExe0u93aTfPYSeRgG4p9Q/Jlkj+LXJ1XEoFV+j2JKcQ=="], + "@aws-sdk/xml-builder/fast-xml-parser": ["fast-xml-parser@5.7.3", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.1.7", "path-expression-matcher": "^1.5.0", "strnum": "^2.2.3" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg=="], - "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], + "@azure/identity/open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], - "redis-parser": ["redis-parser@3.0.0", "", { "dependencies": { "redis-errors": "^1.0.0" } }, "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A=="], + "@azure/msal-node/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "redlock": ["redlock@5.0.0-beta.2", "", { "dependencies": { "node-abort-controller": "^3.0.1" } }, "sha512-2RDWXg5jgRptDrB1w9O/JgSZC0j7y4SlaXnor93H/UJm/QyDiFgBKNtrh0TI6oCXqYSaSoXxFh6Sd3VtYfhRXw=="], + "@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], - "regenerate": ["regenerate@1.4.2", "", {}, "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="], + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.2", "", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g=="], + "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "regexp-to-ast": ["regexp-to-ast@0.5.0", "", {}, "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw=="], + "@babel/helper-create-regexp-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + "@babel/plugin-transform-runtime/babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.13.0", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A=="], - "regexpu-core": ["regexpu-core@6.4.0", "", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" } }, "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA=="], + "@babel/plugin-transform-runtime/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "regjsgen": ["regjsgen@0.8.0", "", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], + "@babel/preset-env/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "regjsparser": ["regjsparser@0.13.0", "", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q=="], + "@boxyhq/metrics/@grpc/grpc-js": ["@grpc/grpc-js@1.12.6", "", { "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q=="], - "rehype-minify-whitespace": ["rehype-minify-whitespace@6.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-minify-whitespace": "^1.0.0" } }, "sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw=="], + "@boxyhq/metrics/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], - "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="], + "@boxyhq/metrics/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.29.0", "", {}, "sha512-KZ1JsXcP2pqunfsJBNk+py6AJ5R6ZJ3yvM5Lhhf93rHPHvdDzgfMYPS4F7GNO3j/MVDCtfbttrkcpu7sl0Wu/Q=="], - "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], + "@boxyhq/saml-jackson/axios": ["axios@1.9.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg=="], - "rehype-remark": ["rehype-remark@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "hast-util-to-mdast": "^10.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-EmDndlb5NVwXGfUa4c9GPK+lXeItTilLhE6ADSaQuHr4JUlKw9MidzGzx4HpqZrNCt6vnHmEifXQiiA+CEnjYQ=="], + "@boxyhq/saml-jackson/ipaddr.js": ["ipaddr.js@2.2.0", "", {}, "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="], - "rehype-sanitize": ["rehype-sanitize@6.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-sanitize": "^5.0.0" } }, "sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg=="], + "@boxyhq/saml-jackson/jose": ["jose@6.0.11", "", {}, "sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg=="], - "rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="], + "@boxyhq/saml-jackson/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "relateurl": ["relateurl@0.2.7", "", {}, "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog=="], + "@boxyhq/saml-jackson/mysql2": ["mysql2@3.14.1", "", { "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.6.3", "long": "^5.2.1", "lru.min": "^1.0.0", "named-placeholders": "^1.1.3", "seq-queue": "^0.0.5", "sqlstring": "^2.3.2" } }, "sha512-7ytuPQJjQB8TNAYX/H2yhL+iQOnIBjAMam361R7UAL0lOVXWjtdrmoL9HYKqKoLp/8UUTRcvo1QPvK9KL7wA8w=="], - "remark-frontmatter": ["remark-frontmatter@5.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-frontmatter": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0", "unified": "^11.0.0" } }, "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ=="], + "@boxyhq/saml-jackson/pg": ["pg@8.16.0", "", { "dependencies": { "pg-connection-string": "^2.9.0", "pg-pool": "^3.10.0", "pg-protocol": "^1.10.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.2.5" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg=="], - "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], + "@boxyhq/saml-jackson/redis": ["redis@4.7.0", "", { "dependencies": { "@redis/bloom": "1.2.0", "@redis/client": "1.6.0", "@redis/graph": "1.1.1", "@redis/json": "1.0.7", "@redis/search": "1.2.0", "@redis/time-series": "1.1.0" } }, "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ=="], - "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], + "@chevrotain/cst-dts-gen/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], - "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], + "@chevrotain/cst-dts-gen/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], + "@chevrotain/gast/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], - "remeda": ["remeda@2.33.4", "", {}, "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ=="], + "@chevrotain/gast/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + "@eslint/config-array/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "require-in-the-middle": ["require-in-the-middle@8.0.1", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3" } }, "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ=="], + "@eslint/eslintrc/ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], - "reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="], + "@eslint/eslintrc/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "resize-observer-polyfill": ["resize-observer-polyfill@1.5.1", "", {}, "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="], + "@eslint/eslintrc/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "@function-bay/build/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + "@function-bay/nodejs/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], + "@function-bay/nodejs/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="], + "@function-bay/types/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + "@function-bay/types/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + "@function-bay/utils/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], + "@function-bay/utils/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], + "@inquirer/core/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "ripemd160": ["ripemd160@2.0.2", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="], + "@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], - "robust-predicates": ["robust-predicates@3.0.3", "", {}, "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA=="], + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "rollup": ["rollup@4.59.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.59.0", "@rollup/rollup-android-arm64": "4.59.0", "@rollup/rollup-darwin-arm64": "4.59.0", "@rollup/rollup-darwin-x64": "4.59.0", "@rollup/rollup-freebsd-arm64": "4.59.0", "@rollup/rollup-freebsd-x64": "4.59.0", "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", "@rollup/rollup-linux-arm-musleabihf": "4.59.0", "@rollup/rollup-linux-arm64-gnu": "4.59.0", "@rollup/rollup-linux-arm64-musl": "4.59.0", "@rollup/rollup-linux-loong64-gnu": "4.59.0", "@rollup/rollup-linux-loong64-musl": "4.59.0", "@rollup/rollup-linux-ppc64-gnu": "4.59.0", "@rollup/rollup-linux-ppc64-musl": "4.59.0", "@rollup/rollup-linux-riscv64-gnu": "4.59.0", "@rollup/rollup-linux-riscv64-musl": "4.59.0", "@rollup/rollup-linux-s390x-gnu": "4.59.0", "@rollup/rollup-linux-x64-gnu": "4.59.0", "@rollup/rollup-linux-x64-musl": "4.59.0", "@rollup/rollup-openbsd-x64": "4.59.0", "@rollup/rollup-openharmony-arm64": "4.59.0", "@rollup/rollup-win32-arm64-msvc": "4.59.0", "@rollup/rollup-win32-ia32-msvc": "4.59.0", "@rollup/rollup-win32-x64-gnu": "4.59.0", "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg=="], + "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "rollup-plugin-bundle-size": ["rollup-plugin-bundle-size@1.0.3", "", { "dependencies": { "chalk": "^1.1.3", "maxmin": "^2.1.0" } }, "sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ=="], + "@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "rollup-plugin-postcss": ["rollup-plugin-postcss@4.0.2", "", { "dependencies": { "chalk": "^4.1.0", "concat-with-sourcemaps": "^1.1.0", "cssnano": "^5.0.1", "import-cwd": "^3.0.0", "p-queue": "^6.6.2", "pify": "^5.0.0", "postcss-load-config": "^3.0.0", "postcss-modules": "^4.0.0", "promise.series": "^0.2.0", "resolve": "^1.19.0", "rollup-pluginutils": "^2.8.2", "safe-identifier": "^0.4.2", "style-inject": "^0.3.0" }, "peerDependencies": { "postcss": "8.x" } }, "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w=="], + "@lowerdeck/rpc-server/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "rollup-plugin-terser": ["rollup-plugin-terser@7.0.2", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", "serialize-javascript": "^4.0.0", "terser": "^5.0.0" }, "peerDependencies": { "rollup": "^2.0.0" } }, "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ=="], + "@lowerdeck/sentry/@sentry/core": ["@sentry/core@10.42.0", "", {}, "sha512-L4rMrXMqUKBanpjpMT+TuAVk6xAijz6AWM6RiEYpohAr7SGcCEc1/T0+Ep1eLV8+pwWacfU27OvELIyNeOnGzA=="], - "rollup-plugin-typescript2": ["rollup-plugin-typescript2@0.32.1", "", { "dependencies": { "@rollup/pluginutils": "^4.1.2", "find-cache-dir": "^3.3.2", "fs-extra": "^10.0.0", "resolve": "^1.20.0", "tslib": "^2.4.0" }, "peerDependencies": { "rollup": ">=1.26.3", "typescript": ">=2.4.0" } }, "sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw=="], + "@mapbox/node-pre-gyp/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "rollup-plugin-visualizer": ["rollup-plugin-visualizer@5.14.0", "", { "dependencies": { "open": "^8.4.0", "picomatch": "^4.0.2", "source-map": "^0.7.4", "yargs": "^17.5.1" }, "peerDependencies": { "rolldown": "1.x", "rollup": "2.x || 3.x || 4.x" }, "optionalPeers": ["rolldown", "rollup"], "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" } }, "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA=="], + "@mapbox/node-pre-gyp/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "rollup-pluginutils": ["rollup-pluginutils@2.8.2", "", { "dependencies": { "estree-walker": "^0.6.1" } }, "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ=="], + "@mapbox/node-pre-gyp/tar": ["tar@7.5.13", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng=="], - "rope-sequence": ["rope-sequence@1.3.4", "", {}, "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ=="], + "@metorial-cargo/service/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "roughjs": ["roughjs@4.6.6", "", { "dependencies": { "hachure-fill": "^0.5.2", "path-data-parser": "^0.1.0", "points-on-curve": "^0.2.0", "points-on-path": "^0.2.1" } }, "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ=="], + "@metorial-io/data-hooks/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], + "@metorial-io/layout/react-router-dom": ["react-router-dom@7.13.2", "", { "dependencies": { "react-router": "7.13.2" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-aR7SUORwTqAW0JDeiWF07e9SBE9qGpByR9I8kJT5h/FrBKxPMS6TiC7rmVO+gC0q52Bx7JnjWe8Z1sR9faN4YA=="], - "rtl-css-js": ["rtl-css-js@1.16.1", "", { "dependencies": { "@babel/runtime": "^7.1.2" } }, "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg=="], + "@metorial-io/ui-product/react-router-dom": ["react-router-dom@7.13.2", "", { "dependencies": { "react-router": "7.13.2" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-aR7SUORwTqAW0JDeiWF07e9SBE9qGpByR9I8kJT5h/FrBKxPMS6TiC7rmVO+gC0q52Bx7JnjWe8Z1sR9faN4YA=="], - "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], + "@metorial-platform-systems/ares-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + "@metorial-platform-systems/ares-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="], + "@metorial-platform-systems/cargo-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], + "@metorial-platform-systems/cargo-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], + "@metorial-platform-systems/forge-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + "@metorial-platform-systems/forge-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "@metorial-platform-systems/function-bay-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "safe-identifier": ["safe-identifier@0.4.2", "", {}, "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w=="], + "@metorial-platform-systems/function-bay-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], + "@metorial-platform-systems/object-storage-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + "@metorial-platform-systems/object-storage-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "safe-regex2": ["safe-regex2@5.1.0", "", { "dependencies": { "ret": "~0.5.0" }, "bin": { "safe-regex2": "bin/safe-regex2.js" } }, "sha512-pNHAuBW7TrcleFHsxBr5QMi/Iyp0ENjUKz7GCcX1UO7cMh+NmVK6HxQckNL1tJp1XAJVjG6B8OKIPqodqj9rtw=="], + "@metorial-platform-systems/origin-client/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + "@metorial-platform-systems/origin-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sass": ["sass@1.97.3", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg=="], + "@metorial-platform-systems/origin-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sass-embedded": ["sass-embedded@1.97.3", "", { "dependencies": { "@bufbuild/protobuf": "^2.5.0", "colorjs.io": "^0.5.0", "immutable": "^5.0.2", "rxjs": "^7.4.0", "supports-color": "^8.1.1", "sync-child-process": "^1.0.2", "varint": "^6.0.0" }, "optionalDependencies": { "sass-embedded-all-unknown": "1.97.3", "sass-embedded-android-arm": "1.97.3", "sass-embedded-android-arm64": "1.97.3", "sass-embedded-android-riscv64": "1.97.3", "sass-embedded-android-x64": "1.97.3", "sass-embedded-darwin-arm64": "1.97.3", "sass-embedded-darwin-x64": "1.97.3", "sass-embedded-linux-arm": "1.97.3", "sass-embedded-linux-arm64": "1.97.3", "sass-embedded-linux-musl-arm": "1.97.3", "sass-embedded-linux-musl-arm64": "1.97.3", "sass-embedded-linux-musl-riscv64": "1.97.3", "sass-embedded-linux-musl-x64": "1.97.3", "sass-embedded-linux-riscv64": "1.97.3", "sass-embedded-linux-x64": "1.97.3", "sass-embedded-unknown-all": "1.97.3", "sass-embedded-win32-arm64": "1.97.3", "sass-embedded-win32-x64": "1.97.3" }, "bin": { "sass": "dist/bin/sass.js" } }, "sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA=="], + "@metorial-platform-systems/relay-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sass-embedded-all-unknown": ["sass-embedded-all-unknown@1.97.3", "", { "dependencies": { "sass": "1.97.3" }, "cpu": [ "!arm", "!x64", "!arm64", ] }, "sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg=="], + "@metorial-platform-systems/relay-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sass-embedded-android-arm": ["sass-embedded-android-arm@1.97.3", "", { "os": "android", "cpu": "arm" }, "sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg=="], + "@metorial-platform-systems/shuttle-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sass-embedded-android-arm64": ["sass-embedded-android-arm64@1.97.3", "", { "os": "android", "cpu": "arm64" }, "sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA=="], + "@metorial-platform-systems/shuttle-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sass-embedded-android-riscv64": ["sass-embedded-android-riscv64@1.97.3", "", { "os": "android", "cpu": "none" }, "sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA=="], + "@metorial-platform-systems/signal-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sass-embedded-android-x64": ["sass-embedded-android-x64@1.97.3", "", { "os": "android", "cpu": "x64" }, "sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw=="], + "@metorial-platform-systems/signal-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sass-embedded-darwin-arm64": ["sass-embedded-darwin-arm64@1.97.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA=="], + "@metorial-platform-systems/slates-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sass-embedded-darwin-x64": ["sass-embedded-darwin-x64@1.97.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA=="], + "@metorial-platform-systems/slates-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sass-embedded-linux-arm": ["sass-embedded-linux-arm@1.97.3", "", { "os": "linux", "cpu": "arm" }, "sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA=="], + "@metorial-platform-systems/subspace-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sass-embedded-linux-arm64": ["sass-embedded-linux-arm64@1.97.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg=="], + "@metorial-platform-systems/subspace-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sass-embedded-linux-musl-arm": ["sass-embedded-linux-musl-arm@1.97.3", "", { "os": "linux", "cpu": "arm" }, "sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg=="], + "@metorial-platform-systems/synthesis-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sass-embedded-linux-musl-arm64": ["sass-embedded-linux-musl-arm64@1.97.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw=="], + "@metorial-platform-systems/synthesis-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sass-embedded-linux-musl-riscv64": ["sass-embedded-linux-musl-riscv64@1.97.3", "", { "os": "linux", "cpu": "none" }, "sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA=="], + "@metorial-platform-systems/voyager-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sass-embedded-linux-musl-x64": ["sass-embedded-linux-musl-x64@1.97.3", "", { "os": "linux", "cpu": "x64" }, "sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw=="], + "@metorial-platform-systems/voyager-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sass-embedded-linux-riscv64": ["sass-embedded-linux-riscv64@1.97.3", "", { "os": "linux", "cpu": "none" }, "sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA=="], + "@metorial-services/forge-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.4", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.3", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-d4tZsXDp7hxNLVU191Qkhry+dZUveUh7aejDBevAPB05fT+O5IyDgpo5E0TOpSh2/7zq1Ww6wMdIJXUchptYkA=="], - "sass-embedded-linux-x64": ["sass-embedded-linux-x64@1.97.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg=="], + "@metorial-services/registry-client/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "sass-embedded-unknown-all": ["sass-embedded-unknown-all@1.97.3", "", { "dependencies": { "sass": "1.97.3" }, "os": [ "!linux", "!win32", "!darwin", "!android", ] }, "sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q=="], + "@metorial-services/slates-registry-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sass-embedded-win32-arm64": ["sass-embedded-win32-arm64@1.97.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw=="], + "@metorial-services/slates-registry-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sass-embedded-win32-x64": ["sass-embedded-win32-x64@1.97.3", "", { "os": "win32", "cpu": "x64" }, "sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw=="], + "@metorial-services/slates-registry-internal-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], + "@metorial-services/slates-registry-internal-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + "@metorial-subspace/app-controller/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], - "screenfull": ["screenfull@5.2.0", "", {}, "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA=="], + "@metorial-subspace/conduit/vitest": ["vitest@2.1.9", "", { "dependencies": { "@vitest/expect": "2.1.9", "@vitest/mocker": "2.1.9", "@vitest/pretty-format": "^2.1.9", "@vitest/runner": "2.1.9", "@vitest/snapshot": "2.1.9", "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", "vite-node": "2.1.9", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "2.1.9", "@vitest/ui": "2.1.9", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q=="], - "seek-bzip": ["seek-bzip@2.0.0", "", { "dependencies": { "commander": "^6.0.0" }, "bin": { "seek-bunzip": "bin/seek-bunzip", "seek-table": "bin/seek-bzip-table" } }, "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg=="], + "@metorial-subspace/list-utils/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "selderee": ["selderee@0.11.0", "", { "dependencies": { "parseley": "^0.12.0" } }, "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA=="], + "@metorial-subspace/module-agent/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "@metorial-subspace/module-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], + "@metorial-subspace/module-callback/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "seq-queue": ["seq-queue@0.0.5", "", {}, "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="], + "@metorial-subspace/module-catalog/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "serialize-javascript": ["serialize-javascript@4.0.0", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw=="], + "@metorial-subspace/module-connection/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], + "@metorial-subspace/module-custom-provider/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], + "@metorial-subspace/module-deployment/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], + "@metorial-subspace/module-identity/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + "@metorial-subspace/module-integration/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + "@metorial-subspace/module-provider-internal/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "set-harmonic-interval": ["set-harmonic-interval@1.0.1", "", {}, "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g=="], + "@metorial-subspace/module-session/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], - "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], + "@metorial-subspace/module-session/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], + "@metorial-subspace/module-skills/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + "@metorial-subspace/module-tenant/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sha.js": ["sha.js@2.4.12", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" } }, "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w=="], + "@metorial/api-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "shallowequal": ["shallowequal@1.1.0", "", {}, "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="], + "@metorial/api-core/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + "@metorial/api-custom-portal/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + "@metorial/api-files/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], + "@metorial/api-keys/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "shleemy": ["shleemy@1.2.2", "", {}, "sha512-w6/eQeTCTIqla+r9cxGK+fC10jv9JotaUWZsw2O/ncqkq6thcZMNI4S73dtoG4SXsYEaWJI3uzBRgEHt+rY6Vg=="], + "@metorial/api-oauth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "short-uuid": ["short-uuid@5.2.0", "", { "dependencies": { "any-base": "^1.1.0", "uuid": "^9.0.1" } }, "sha512-296/Nzi4DmANh93iYBwT4NoYRJuHnKEzefrkSagQbTH/A6NTaB68hSPDjm5IlbI5dx9FXdmtqPcj6N5H+CPm6w=="], + "@metorial/app-api/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + "@metorial/app-dashboard/@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.1", "", { "dependencies": { "@babel/core": "^7.24.5", "@babel/plugin-transform-react-jsx-self": "^7.24.5", "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0" } }, "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg=="], - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + "@metorial/app-dashboard/date-fns": ["date-fns@3.6.0", "", {}, "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="], - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + "@metorial/app-dashboard/framer-motion": ["framer-motion@11.18.2", "", { "dependencies": { "motion-dom": "^11.18.1", "motion-utils": "^11.18.1", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w=="], - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + "@metorial/app-dashboard/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sift": ["sift@17.1.3", "", {}, "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ=="], + "@metorial/ares/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], + "@metorial/ares/@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.1", "", { "dependencies": { "@babel/core": "^7.24.5", "@babel/plugin-transform-react-jsx-self": "^7.24.5", "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0" } }, "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg=="], - "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "@metorial/auth/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], + "@metorial/auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], + "@metorial/bearer/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sirv": ["sirv@3.0.2", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g=="], + "@metorial/cache/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + "@metorial/chart/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "slugify": ["slugify@1.6.6", "", {}, "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw=="], + "@metorial/code/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], + "@metorial/code-editor/tsup": ["tsup@7.3.0", "", { "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", "esbuild": "^0.19.2", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^4.0.1", "resolve-from": "^5.0.0", "rollup": "^4.0.2", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ=="], - "smol-toml": ["smol-toml@1.6.1", "", {}, "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg=="], + "@metorial/code-editor/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "snowflake-uuid": ["snowflake-uuid@1.0.0", "", {}, "sha512-Y8Wj4ota0NgqXm2mhQ+lIWQQbUekkZYVlwXDGMmOpEhH4BfNVnCfDTqboeo0N+BFBN2FhRSaUWXLZBk4ngiImA=="], + "@metorial/code-editor/vitest": ["vitest@0.34.6", "", { "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", "@vitest/expect": "0.34.6", "@vitest/runner": "0.34.6", "@vitest/snapshot": "0.34.6", "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", "jsdom": "*", "playwright": "*", "safaridriver": "*", "webdriverio": "*" }, "optionalPeers": ["@edge-runtime/vm", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom", "playwright", "safaridriver", "webdriverio"], "bin": { "vitest": "vitest.mjs" } }, "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q=="], - "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="], + "@metorial/code-workspace/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "socks-proxy-agent": ["socks-proxy-agent@6.2.1", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ=="], + "@metorial/code-workspace/typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], - "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], + "@metorial/config/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + "@metorial/config/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + "@metorial/consumer-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + "@metorial/consumer-sdk/tsup": ["tsup@7.3.0", "", { "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", "esbuild": "^0.19.2", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^4.0.1", "resolve-from": "^5.0.0", "rollup": "^4.0.2", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ=="], - "sourcemap-codec": ["sourcemap-codec@1.4.8", "", {}, "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="], + "@metorial/consumer-sdk/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + "@metorial/consumer-sdk/vitest": ["vitest@0.34.6", "", { "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", "@vitest/expect": "0.34.6", "@vitest/runner": "0.34.6", "@vitest/snapshot": "0.34.6", "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", "jsdom": "*", "playwright": "*", "safaridriver": "*", "webdriverio": "*" }, "optionalPeers": ["@edge-runtime/vm", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom", "playwright", "safaridriver", "webdriverio"], "bin": { "vitest": "vitest.mjs" } }, "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q=="], - "sparse-bitfield": ["sparse-bitfield@3.0.3", "", { "dependencies": { "memory-pager": "^1.0.2" } }, "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ=="], + "@metorial/context/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], + "@metorial/cron/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], + "@metorial/dashboard-sdk/tsup": ["tsup@7.3.0", "", { "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", "esbuild": "^0.19.2", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^4.0.1", "resolve-from": "^5.0.0", "rollup": "^4.0.2", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ=="], - "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], + "@metorial/dashboard-sdk/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "spdx-license-ids": ["spdx-license-ids@3.0.23", "", {}, "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw=="], + "@metorial/dashboard-sdk/vitest": ["vitest@0.34.6", "", { "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", "@vitest/expect": "0.34.6", "@vitest/runner": "0.34.6", "@vitest/snapshot": "0.34.6", "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", "jsdom": "*", "playwright": "*", "safaridriver": "*", "webdriverio": "*" }, "optionalPeers": ["@edge-runtime/vm", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom", "playwright", "safaridriver", "webdriverio"], "bin": { "vitest": "vitest.mjs" } }, "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q=="], - "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + "@metorial/data-hooks/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], + "@metorial/db/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], - "sql-highlight": ["sql-highlight@6.1.0", "", {}, "sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA=="], + "@metorial/db/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], - "sql.js": ["sql.js@1.14.1", "", {}, "sha512-gcj8zBWU5cFsi9WUP+4bFNXAyF1iRpA3LLyS/DP5xlrNzGmPIizUeBggKa8DbDwdqaKwUcTEnChtd2grWo/x/A=="], + "@metorial/db/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sqlite3": ["sqlite3@5.1.7", "", { "dependencies": { "bindings": "^1.5.0", "node-addon-api": "^7.0.0", "prebuild-install": "^7.1.1", "tar": "^6.1.11" }, "optionalDependencies": { "node-gyp": "8.x" } }, "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog=="], + "@metorial/debug/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "sqlstring": ["sqlstring@2.3.3", "", {}, "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="], + "@metorial/debug/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "ssri": ["ssri@8.0.1", "", { "dependencies": { "minipass": "^3.1.1" } }, "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ=="], + "@metorial/dynamic-component/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], - "stable": ["stable@0.1.8", "", {}, "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="], + "@metorial/dynamic-component/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "stack-generator": ["stack-generator@2.0.10", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ=="], + "@metorial/event/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], - "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], + "@metorial/event/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "stackframe": ["stackframe@1.3.4", "", {}, "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="], + "@metorial/explorer/@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.1", "", { "dependencies": { "@babel/core": "^7.24.5", "@babel/plugin-transform-react-jsx-self": "^7.24.5", "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0" } }, "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg=="], - "stacktrace-gps": ["stacktrace-gps@3.1.2", "", { "dependencies": { "source-map": "0.5.6", "stackframe": "^1.3.4" } }, "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ=="], + "@metorial/explorer/react": ["react@19.1.1", "", {}, "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ=="], - "stacktrace-js": ["stacktrace-js@2.0.2", "", { "dependencies": { "error-stack-parser": "^2.0.6", "stack-generator": "^2.0.5", "stacktrace-gps": "^3.0.4" } }, "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg=="], + "@metorial/explorer/react-dom": ["react-dom@19.1.1", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.1" } }, "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw=="], - "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], + "@metorial/explorer/react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], - "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + "@metorial/explorer/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "@metorial/fabric/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], + "@metorial/frontend-config/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], + "@metorial/function-bay/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "streamx": ["streamx@2.25.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg=="], + "@metorial/generated/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - "string-hash": ["string-hash@1.1.3", "", {}, "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="], + "@metorial/id/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "@metorial/id/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "@metorial/internal-clients/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], + "@metorial/layout/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "string.prototype.padend": ["string.prototype.padend@3.1.6", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q=="], + "@metorial/lock/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], + "@metorial/logging/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], + "@metorial/markdown/react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], - "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], + "@metorial/markdown/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + "@metorial/mcp/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + "@metorial/mcp/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "@metorial/mcp-server/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@metorial/mcp-server/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "@metorial/mcp-transport-memory/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], + "@metorial/mcp-transport-memory/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + "@metorial/mcp-utils/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "strip-literal": ["strip-literal@1.3.0", "", { "dependencies": { "acorn": "^8.10.0" } }, "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg=="], + "@metorial/microfrontend/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], - "stripe": ["stripe@18.5.0", "", { "dependencies": { "qs": "^6.11.0" }, "peerDependencies": { "@types/node": ">=12.x.x" }, "optionalPeers": ["@types/node"] }, "sha512-Hp+wFiEQtCB0LlNgcFh5uVyKznpDjzyUZ+CNVEf+I3fhlYvh7rZruIg+jOwzJRCpy0ZTPMjlzm7J2/M2N6d+DA=="], + "@metorial/microfrontend/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "striptags": ["striptags@3.2.0", "", {}, "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw=="], + "@metorial/module-access/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "strnum": ["strnum@2.3.0", "", {}, "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q=="], + "@metorial/module-assistant/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "strtok3": ["strtok3@10.3.5", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA=="], + "@metorial/module-community/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "style-inject": ["style-inject@0.3.0", "", {}, "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw=="], + "@metorial/module-consumer/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "style-mod": ["style-mod@4.1.3", "", {}, "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ=="], + "@metorial/module-email/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], + "@metorial/module-event/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + "@metorial/module-file/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "styled-components": ["styled-components@6.3.11", "", { "dependencies": { "@emotion/is-prop-valid": "1.4.0", "@emotion/unitless": "0.10.0", "@types/stylis": "4.2.7", "css-to-react-native": "3.2.0", "csstype": "3.2.3", "postcss": "8.4.49", "shallowequal": "1.1.0", "stylis": "4.3.6", "tslib": "2.8.1" }, "peerDependencies": { "react": ">= 16.8.0", "react-dom": ">= 16.8.0" }, "optionalPeers": ["react-dom"] }, "sha512-opzgceGlQ5rdZdGwf9ddLW7EM2F4L7tgsgLn6fFzQ2JgE5EVQ4HZwNkcgB1p8WfOBx1GEZP3fa66ajJmtXhSrA=="], + "@metorial/module-flags/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "stylehacks": ["stylehacks@5.1.1", "", { "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw=="], + "@metorial/module-machine-access/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "stylis": ["stylis@4.3.6", "", {}, "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="], + "@metorial/module-magic/mongoose": ["mongoose@8.23.0", "", { "dependencies": { "bson": "^6.10.4", "kareem": "2.6.3", "mongodb": "~6.20.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug=="], - "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], + "@metorial/module-magic/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "superjson": ["superjson@2.2.6", "", { "dependencies": { "copy-anything": "^4" } }, "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA=="], + "@metorial/module-markdown/mongoose": ["mongoose@8.23.0", "", { "dependencies": { "bson": "^6.10.4", "kareem": "2.6.3", "mongodb": "~6.20.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug=="], - "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "@metorial/module-markdown/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + "@metorial/module-organization/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "svgo": ["svgo@2.8.2", "", { "dependencies": { "commander": "^7.2.0", "css-select": "^4.1.3", "css-tree": "^1.1.3", "csso": "^4.2.0", "picocolors": "^1.0.0", "sax": "^1.5.0", "stable": "^0.1.8" }, "bin": "./bin/svgo" }, "sha512-TyzE4NVGLUFy+H/Uy4N6c3G0HEeprsVfge6Lmq+0FdQQ/zqoVYB62IsBZORsiL+o96s6ff/V6/3UQo/C0cgCAA=="], + "@metorial/module-protect/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sync-child-process": ["sync-child-process@1.0.2", "", { "dependencies": { "sync-message-port": "^1.0.0" } }, "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA=="], + "@metorial/module-search/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "sync-message-port": ["sync-message-port@1.2.0", "", {}, "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg=="], + "@metorial/module-subspace/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], + "@metorial/module-usage/mongoose": ["mongoose@8.23.0", "", { "dependencies": { "bson": "^6.10.4", "kareem": "2.6.3", "mongodb": "~6.20.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug=="], - "tailwindcss": ["tailwindcss@4.2.1", "", {}, "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw=="], + "@metorial/module-usage/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "tapable": ["tapable@2.3.2", "", {}, "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA=="], + "@metorial/module-user/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], + "@metorial/multi-region/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], - "tar-fs": ["tar-fs@2.1.4", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ=="], + "@metorial/multi-region/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "tar-stream": ["tar-stream@3.1.8", "", { "dependencies": { "b4a": "^1.6.4", "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ=="], + "@metorial/origin/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "tarn": ["tarn@3.0.2", "", {}, "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ=="], + "@metorial/pages/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "tedious": ["tedious@18.6.2", "", { "dependencies": { "@azure/core-auth": "^1.7.2", "@azure/identity": "^4.2.1", "@azure/keyvault-keys": "^4.4.0", "@js-joda/core": "^5.6.1", "@types/node": ">=18", "bl": "^6.0.11", "iconv-lite": "^0.6.3", "js-md4": "^0.3.2", "native-duplexpair": "^1.0.0", "sprintf-js": "^1.1.3" } }, "sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg=="], + "@metorial/presenter/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "teex": ["teex@1.0.1", "", { "dependencies": { "streamx": "^2.12.5" } }, "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg=="], + "@metorial/queue/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "terser": ["terser@5.46.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ=="], + "@metorial/redis/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], - "test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], + "@metorial/redis/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "test-servers": ["test-servers@workspace:src/systems/subspace/test-servers"], + "@metorial/relay/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "text-decoder": ["text-decoder@1.2.7", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ=="], + "@metorial/rest/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], + "@metorial/rpc/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], + "@metorial/scene-assistant/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "throttle-debounce": ["throttle-debounce@3.0.1", "", {}, "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg=="], + "@metorial/scene-docs/@tiptap/extension-highlight": ["@tiptap/extension-highlight@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-sNzwL0OZRpxAef9LE4SS3AbNyMBsxyGw3MJF34+Bdcu2VpaqoM3XFn664cD7iAsyTJI9eY0eLhZTMcKsdAlBaw=="], - "tiny-case": ["tiny-case@1.0.3", "", {}, "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="], + "@metorial/scene-docs/@tiptap/extension-image": ["@tiptap/extension-image@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-3ze2Et/p9YwQ34RkX8cIuClNiGup0/OfTy22GtjGPMpRPTSt8LTwz9vUEmENCdwfFYidyNSoh2rXA1gXKRfNFQ=="], - "tiny-glob": ["tiny-glob@0.2.9", "", { "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" } }, "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg=="], + "@metorial/scene-docs/@tiptap/extension-placeholder": ["@tiptap/extension-placeholder@3.6.1", "", { "peerDependencies": { "@tiptap/extensions": "^3.6.1" } }, "sha512-AhNI+75OqoJKtt5SChzacbPco9jnfV9rkHCF4yVenlK0Z3IQ/iOgAjLUbYqveXzNmLdhyt7lZn3yaCPXwCldJA=="], - "tiny-warning": ["tiny-warning@1.0.3", "", {}, "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="], + "@metorial/scene-docs/@tiptap/extension-subscript": ["@tiptap/extension-subscript@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-GxJB9+JQq+x1Z+ykn1pm3G3M73gXZfhqzraI47jYinqOftv/DHZ6sPxgQJFVInlAseMD5KdqWmJ7YlXWVJisRQ=="], - "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], + "@metorial/scene-docs/@tiptap/extension-superscript": ["@tiptap/extension-superscript@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-Zwpr+5alDail0GAe+u1TWVbprpJcRLbHpDZq1fro3ea3KdtQjr8TcXPBVRvJ+66URahAT2BxKTQ5esruKj2cBQ=="], - "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + "@metorial/scene-docs/@tiptap/extension-text-align": ["@tiptap/extension-text-align@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-zegYnbKAPGV5FcPWefucBWfirbROSLl52qkl6+5okHDyeGOKBmo1FPZieikopK+kTmwgzRQZUyCejybQQuW2ZA=="], - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "@metorial/scene-docs/@tiptap/extension-typography": ["@tiptap/extension-typography@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-zAL3uO5A2/3raoApI0YYHE+HbK1cx92gfakUREDfzWG45M6C+D7TCIX320qvqUhzjVWK+qrFaWQddAX5w8VQJA=="], - "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], + "@metorial/scene-docs/@tiptap/pm": ["@tiptap/pm@3.6.1", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.24.1", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-4F3qKhLQYlHGfayO0dQD3hiX3VeSCkdoKQQ+gIegNhwX5IWboQleVMueo7rcKN8WarTkysbYnILcWgx5OYcKew=="], - "tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], + "@metorial/scene-docs/@tiptap/react": ["@tiptap/react@3.6.1", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "fast-deep-equal": "^3.1.3", "use-sync-external-store": "^1.4.0" }, "optionalDependencies": { "@tiptap/extension-bubble-menu": "^3.6.1", "@tiptap/extension-floating-menu": "^3.6.1" }, "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-5J1a1JNxhuMYrrAb2NZfs7AX/Pc6xBvVQJnNJ6vR9QZWlBgSe67iJK/bh8KPB7jxrzbItKQ2Brp3v46QLZXPDw=="], - "tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="], + "@metorial/scene-docs/@tiptap/starter-kit": ["@tiptap/starter-kit@3.6.1", "", { "dependencies": { "@tiptap/core": "^3.6.1", "@tiptap/extension-blockquote": "^3.6.1", "@tiptap/extension-bold": "^3.6.1", "@tiptap/extension-bullet-list": "^3.6.1", "@tiptap/extension-code": "^3.6.1", "@tiptap/extension-code-block": "^3.6.1", "@tiptap/extension-document": "^3.6.1", "@tiptap/extension-dropcursor": "^3.6.1", "@tiptap/extension-gapcursor": "^3.6.1", "@tiptap/extension-hard-break": "^3.6.1", "@tiptap/extension-heading": "^3.6.1", "@tiptap/extension-horizontal-rule": "^3.6.1", "@tiptap/extension-italic": "^3.6.1", "@tiptap/extension-link": "^3.6.1", "@tiptap/extension-list": "^3.6.1", "@tiptap/extension-list-item": "^3.6.1", "@tiptap/extension-list-keymap": "^3.6.1", "@tiptap/extension-ordered-list": "^3.6.1", "@tiptap/extension-paragraph": "^3.6.1", "@tiptap/extension-strike": "^3.6.1", "@tiptap/extension-text": "^3.6.1", "@tiptap/extension-underline": "^3.6.1", "@tiptap/extensions": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-gmQCHEcZxjnVqTInhNx3z7Vuvz+mmIVcXiCSLd5cA9/8PkHo3ttxijfc3lXe4V2ed6RPBWU/FUHFxcUmxqc5Vg=="], - "tiptap-markdown": ["tiptap-markdown@0.9.0", "", { "dependencies": { "@types/markdown-it": "^13.0.7", "markdown-it": "^14.1.0", "markdown-it-task-lists": "^2.1.1", "prosemirror-markdown": "^1.11.1" }, "peerDependencies": { "@tiptap/core": "^3.0.1" } }, "sha512-dKLQ9iiuGNgrlGVjrNauF/UBzWu4LYOx5pkD0jNkmQt/GOwfCJsBuzZTsf1jZ204ANHOm572mZ9PYvGh1S7tpQ=="], + "@metorial/scene-docs/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "to-buffer": ["to-buffer@1.2.2", "", { "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", "typed-array-buffer": "^1.0.3" } }, "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw=="], + "@metorial/scene-skills/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + "@metorial/shuttle/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], + "@metorial/signal/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "toggle-selection": ["toggle-selection@1.0.6", "", {}, "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ=="], + "@metorial/slates/@metorial-services/slates-registry-client": ["@metorial-services/slates-registry-client@1.0.1", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.2" } }, "sha512-u2KNK4QdScDl3wGWup31jlUk13KvH1NoPl1EGa21J7p/PLjjvX+PdObOuHq/34X8d2MIX+WsDmWGiZuMp4T+rg=="], - "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + "@metorial/slates/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], - "token-types": ["token-types@6.1.2", "", { "dependencies": { "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww=="], + "@metorial/slates/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], + "@metorial/slates/sonner": ["sonner@1.7.4", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw=="], - "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], + "@metorial/slates-registry/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], - "tr46": ["tr46@1.0.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA=="], + "@metorial/state/@metorial/generated": ["@metorial/generated@3.0.2", "", { "dependencies": { "@metorial/util-endpoint": "^3.0.0", "@metorial/util-resource-mapper": "^3.0.0", "jose": "^5.9.6" } }, "sha512-Z+wvSmgtUyQY2RVMfYgxdul7ZZCdCGvryE1+2nM0cMwB7bZ/57SgRbL6RsNQ8iEenUj48/oH7tkl3EU0To1KFQ=="], - "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], + "@metorial/state/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + "@metorial/storage/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "trim-trailing-lines": ["trim-trailing-lines@2.1.0", "", {}, "sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg=="], + "@metorial/synthesis/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], + "@metorial/ui/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "try": ["try@1.0.3", "", {}, "sha512-AHA8khVCII6zKyRkyPo6pRwoR9v5jb7QFw6e5avtaVSkxVfaEucYIo06xnwB+pJaEarfYNbs7W3Vq+LZLZiWyA=="], + "@metorial/ui-product/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + "@metorial/unified-id/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "ts-dedent": ["ts-dedent@2.2.0", "", {}, "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ=="], + "@metorial/voyager/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "ts-easing": ["ts-easing@0.2.0", "", {}, "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ=="], + "@modelcontextprotocol/sdk/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], - "ts-error": ["ts-error@1.0.6", "", {}, "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA=="], + "@modelcontextprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], + "@mongodb-js/zstd/node-addon-api": ["node-addon-api@8.7.0", "", {}, "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA=="], - "ts-poet": ["ts-poet@6.12.0", "", { "dependencies": { "dprint-node": "^1.0.8" } }, "sha512-xo+iRNMWqyvXpFTaOAvLPA5QAWO6TZrSUs5s4Odaya3epqofBu/fMLHEWl8jPmjhA0s9sgj9sNvF1BmaQlmQkA=="], + "@mrleebo/prisma-ast/lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], - "ts-proto": ["ts-proto@2.11.4", "", { "dependencies": { "@bufbuild/protobuf": "^2.10.2", "case-anything": "^2.1.13", "ts-poet": "^6.12.0", "ts-proto-descriptors": "2.1.0" }, "bin": { "protoc-gen-ts_proto": "protoc-gen-ts_proto" } }, "sha512-LGf1llYT/YsZRIzz3nzBei5mR8Sq0xmrL0cI36Pdiuok2V4PHiDuXQGP+D9i3NzChuwURPo8KAmGV1HLH0xHyw=="], + "@mtsrc/anonymize-ip/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "ts-proto-descriptors": ["ts-proto-descriptors@2.1.0", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0" } }, "sha512-S5EZYEQ6L9KLFfjSRpZWDIXDV/W7tAj8uW7pLsihIxyr62EAVSiKuVPwE8iWnr849Bqa53enex1jhDUcpgquzA=="], + "@mtsrc/anonymize-ip/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "@mtsrc/api-key/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "tsup": ["tsup@8.5.1", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.27.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing=="], + "@mtsrc/api-key/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], + "@mtsrc/api-mux/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "turbo": ["turbo@2.8.13", "", { "optionalDependencies": { "turbo-darwin-64": "2.8.13", "turbo-darwin-arm64": "2.8.13", "turbo-linux-64": "2.8.13", "turbo-linux-arm64": "2.8.13", "turbo-windows-64": "2.8.13", "turbo-windows-arm64": "2.8.13" }, "bin": { "turbo": "bin/turbo" } }, "sha512-nyM99hwFB9/DHaFyKEqatdayGjsMNYsQ/XBNO6MITc7roncZetKb97MpHxWf3uiU+LB9c9HUlU3Jp2Ixei2k1A=="], + "@mtsrc/api-mux/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "turbo-darwin-64": ["turbo-darwin-64@2.8.13", "", { "os": "darwin", "cpu": "x64" }, "sha512-PmOvodQNiOj77+Zwoqku70vwVjKzL34RTNxxoARjp5RU5FOj/CGiC6vcDQhNtFPUOWSAaogHF5qIka9TBhX4XA=="], + "@mtsrc/base62/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "turbo-darwin-arm64": ["turbo-darwin-arm64@2.8.13", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kI+anKcLIM4L8h+NsM7mtAUpElkCOxv5LgiQVQR8BASyDFfc8Efj5kCk3cqxuxOvIqx0sLfCX7atrHQ2kwuNJQ=="], + "@mtsrc/base62/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "turbo-linux-64": ["turbo-linux-64@2.8.13", "", { "os": "linux", "cpu": "x64" }, "sha512-j29KnQhHyzdzgCykBFeBqUPS4Wj7lWMnZ8CHqytlYDap4Jy70l4RNG46pOL9+lGu6DepK2s1rE86zQfo0IOdPw=="], + "@mtsrc/cache/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "turbo-linux-arm64": ["turbo-linux-arm64@2.8.13", "", { "os": "linux", "cpu": "arm64" }, "sha512-OEl1YocXGZDRDh28doOUn49QwNe82kXljO1HXApjU0LapkDiGpfl3jkAlPKxEkGDSYWc8MH5Ll8S16Rf5tEBYg=="], + "@mtsrc/canonicalize/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "turbo-windows-64": ["turbo-windows-64@2.8.13", "", { "os": "win32", "cpu": "x64" }, "sha512-717bVk1+Pn2Jody7OmWludhEirEe0okoj1NpRbSm5kVZz/yNN/jfjbxWC6ilimXMz7xoMT3IDfQFJsFR3PMANA=="], + "@mtsrc/canonicalize/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "turbo-windows-arm64": ["turbo-windows-arm64@2.8.13", "", { "os": "win32", "cpu": "arm64" }, "sha512-R819HShLIT0Wj6zWVnIsYvSNtRNj1q9VIyaUz0P24SMcLCbQZIm1sV09F4SDbg+KCCumqD2lcaR2UViQ8SnUJA=="], + "@mtsrc/case/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "turndown": ["turndown@7.2.4", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ=="], + "@mtsrc/case/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "tweetnacl": ["tweetnacl@1.0.3", "", {}, "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="], + "@mtsrc/cron/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + "@mtsrc/delay/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "type-detect": ["type-detect@4.1.0", "", {}, "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw=="], + "@mtsrc/delay/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], + "@mtsrc/emitter/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], + "@mtsrc/emitter/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], + "@mtsrc/encryption/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], + "@mtsrc/env/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], + "@mtsrc/error/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], + "@mtsrc/event/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "typeorm": ["typeorm@0.3.22", "", { "dependencies": { "@sqltools/formatter": "^1.2.5", "ansis": "^3.17.0", "app-root-path": "^3.1.0", "buffer": "^6.0.3", "dayjs": "^1.11.13", "debug": "^4.4.0", "dotenv": "^16.4.7", "glob": "^10.4.5", "sha.js": "^2.4.11", "sql-highlight": "^6.0.0", "tslib": "^2.8.1", "uuid": "^11.1.0", "yargs": "^17.7.2" }, "peerDependencies": { "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0", "@sap/hana-client": "^2.12.25", "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", "mongodb": "^5.8.0 || ^6.0.0", "mssql": "^9.1.1 || ^10.0.1 || ^11.0.1", "mysql2": "^2.2.5 || ^3.0.1", "oracledb": "^6.3.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^3.1.1 || ^4.0.0", "reflect-metadata": "^0.1.14 || ^0.2.0", "sql.js": "^1.4.0", "sqlite3": "^5.0.3", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" }, "optionalPeers": ["@google-cloud/spanner", "@sap/hana-client", "better-sqlite3", "hdb-pool", "ioredis", "mongodb", "mssql", "mysql2", "oracledb", "pg", "pg-native", "pg-query-stream", "redis", "sql.js", "sqlite3", "ts-node", "typeorm-aurora-data-api-driver"], "bin": { "typeorm": "cli.js", "typeorm-ts-node-esm": "cli-ts-node-esm.js", "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js" } }, "sha512-P/Tsz3UpJ9+K0oryC0twK5PO27zejLYYwMsE8SISfZc1lVHX+ajigiOyWsKbuXpEFMjD9z7UjLzY3+ElVOMMDA=="], + "@mtsrc/execution-context/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], + "@mtsrc/execution-context/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "ua-parser-js": ["ua-parser-js@1.0.41", "", { "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug=="], + "@mtsrc/flatten/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "uc.micro": ["uc.micro@1.0.6", "", {}, "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="], + "@mtsrc/flatten/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "@mtsrc/forwarded-for/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], + "@mtsrc/hash/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], + "@mtsrc/hash/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], + "@mtsrc/hono/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "undici": ["undici@8.1.0", "", {}, "sha512-E9MkTS4xXLnRPYqxH2e6Hr2/49e7WFDKczKcCaFH4VaZs2iNvHMqeIkyUAD9vM8kujy9TjVrRlQ5KkdEJxB2pw=="], + "@mtsrc/id/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + "@mtsrc/id/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unicode-canonical-property-names-ecmascript": ["unicode-canonical-property-names-ecmascript@2.0.1", "", {}, "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg=="], + "@mtsrc/ip-info/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unicode-match-property-ecmascript": ["unicode-match-property-ecmascript@2.0.0", "", { "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q=="], + "@mtsrc/join-paths/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "unicode-match-property-value-ecmascript": ["unicode-match-property-value-ecmascript@2.2.1", "", {}, "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg=="], + "@mtsrc/join-paths/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.2.0", "", {}, "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ=="], + "@mtsrc/jwt/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], + "@mtsrc/jwt/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unique-filename": ["unique-filename@1.1.1", "", { "dependencies": { "unique-slug": "^2.0.0" } }, "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ=="], + "@mtsrc/lock/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unique-slug": ["unique-slug@2.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w=="], + "@mtsrc/memo/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], + "@mtsrc/memo/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], + "@mtsrc/merge/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + "@mtsrc/merge/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + "@mtsrc/murmur3/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], + "@mtsrc/murmur3/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], + "@mtsrc/normalize-email/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "universal-github-app-jwt": ["universal-github-app-jwt@2.2.2", "", {}, "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw=="], + "@mtsrc/once/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], + "@mtsrc/once/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + "@mtsrc/pagination/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + "@mtsrc/pagination/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "unplugin": ["unplugin@1.0.1", "", { "dependencies": { "acorn": "^8.8.1", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.5.0" } }, "sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA=="], + "@mtsrc/presenter/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "unzipper": ["unzipper@0.12.3", "", { "dependencies": { "bluebird": "~3.7.2", "duplexer2": "~0.1.4", "fs-extra": "^11.2.0", "graceful-fs": "^4.2.2", "node-int64": "^0.4.0" } }, "sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA=="], + "@mtsrc/presenter/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + "@mtsrc/programmable-promise/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + "@mtsrc/programmable-promise/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "url-template": ["url-template@2.0.8", "", {}, "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw=="], + "@mtsrc/proxy/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], + "@mtsrc/proxy/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "use-composed-ref": ["use-composed-ref@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w=="], + "@mtsrc/queue/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "use-delayed": ["use-delayed@0.1.0", "", { "peerDependencies": { "react": ">=16" } }, "sha512-z8whfQV4ZttiOrk73wGwhJ5NXRSB0lroQRGJYEAf5nQ+qdod5hwEY9U3EHaWHp8aVWlEoP1RVbLiQQd+LJB+gQ=="], + "@mtsrc/random-from-array/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "use-interval": ["use-interval@1.4.0", "", { "peerDependencies": { "react": ">=16.8.0 || ^17" } }, "sha512-1betIJun2rXKLxa30AFOBZCeZhsBJoJ/3+gkCeYbJ63lAR//EnAb1NjNeFqzgqeM7zQfR76rrCUaA8DvfgoOpA=="], + "@mtsrc/random-from-array/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "use-isomorphic-layout-effect": ["use-isomorphic-layout-effect@1.2.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA=="], + "@mtsrc/random-number/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "use-latest": ["use-latest@1.3.0", "", { "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ=="], + "@mtsrc/random-number/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], + "@mtsrc/redis/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], + "@mtsrc/rpc-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + "@mtsrc/rpc-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="], + "@mtsrc/rpc-server/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "v8-to-istanbul": ["v8-to-istanbul@9.3.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" } }, "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA=="], + "@mtsrc/rpc-server/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "valibot": ["valibot@1.2.0", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg=="], + "@mtsrc/sentry/@sentry/core": ["@sentry/core@10.45.0", "", {}, "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q=="], - "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], + "@mtsrc/sentry/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "varint": ["varint@6.0.0", "", {}, "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg=="], + "@mtsrc/serialize/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + "@mtsrc/service/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + "@mtsrc/shadow-id/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], + "@mtsrc/shadow-id/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + "@mtsrc/sign/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], + "@mtsrc/slugify/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], + "@mtsrc/snowflake/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vite-plugin-html": ["vite-plugin-html@3.2.2", "", { "dependencies": { "@rollup/pluginutils": "^4.2.0", "colorette": "^2.0.16", "connect-history-api-fallback": "^1.6.0", "consola": "^2.15.3", "dotenv": "^16.0.0", "dotenv-expand": "^8.0.2", "ejs": "^3.1.6", "fast-glob": "^3.2.11", "fs-extra": "^10.0.1", "html-minifier-terser": "^6.1.0", "node-html-parser": "^5.3.3", "pathe": "^0.2.0" }, "peerDependencies": { "vite": ">=2.0.0" } }, "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q=="], + "@mtsrc/telemetry/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "vitest": ["vitest@4.0.17", "", { "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", "@vitest/pretty-format": "4.0.17", "@vitest/runner": "4.0.17", "@vitest/snapshot": "4.0.17", "@vitest/spy": "4.0.17", "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.17", "@vitest/browser-preview": "4.0.17", "@vitest/browser-webdriverio": "4.0.17", "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg=="], + "@mtsrc/telemetry/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vscode": ["vscode@1.1.37", "", { "dependencies": { "glob": "^7.1.2", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "mocha": "^5.2.0", "semver": "^5.4.1", "source-map-support": "^0.5.0", "vscode-test": "^0.4.1" }, "bin": { "vscode-install": "./bin/install" } }, "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg=="], + "@mtsrc/testing-tools/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vscode-oniguruma": ["vscode-oniguruma@2.0.1", "", {}, "sha512-poJU8iHIWnC3vgphJnrLZyI3YdqRlR27xzqDmpPXYzA93R4Gk8z7T6oqDzDoHjoikA2aS82crdXFkjELCdJsjQ=="], + "@mtsrc/timezone/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "vscode-test": ["vscode-test@0.4.3", "", { "dependencies": { "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^2.2.1" } }, "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w=="], + "@mtsrc/timezone/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vscode-textmate": ["vscode-textmate@9.3.2", "", {}, "sha512-n2uGbUcrjhUEBH16uGA0TvUfhWwliFZ1e3+pTjrkim1Mt7ydB41lV08aUvsi70OlzDWp6X7Bx3w/x3fAXIsN0Q=="], + "@mtsrc/tokens/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "vscode-web": ["vscode-web@1.91.1", "", {}, "sha512-kzrbnxxmAmBDBLcTXQBM5Ehucdf35MI4pX1DHMPa6SFFg4IVKd18Qn6TrdG+VT4O4fk6nySovNP22GHky3nD8Q=="], + "@mtsrc/unique/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "w3c-keyname": ["w3c-keyname@2.2.8", "", {}, "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="], + "@mtsrc/unique/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], + "@mtsrc/validation/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "webidl-conversions": ["webidl-conversions@4.0.2", "", {}, "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="], + "@mtsrc/validation/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "webpack-sources": ["webpack-sources@3.3.4", "", {}, "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q=="], + "@mtsrc/websocket-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "webpack-virtual-modules": ["webpack-virtual-modules@0.5.0", "", {}, "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw=="], + "@mtsrc/websocket-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "whatwg-url": ["whatwg-url@7.1.0", "", { "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="], + "@npmcli/fs/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "@npmcli/move-file/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], - "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.57.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-transformer": "0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-GNBJAEYfeiYJQ3O2dvXgiNZ/qjWrBxSb1L1s7iV/jKBRGMN3Nv+miTk2SLeEobF5E5ZK4rVcHKlBZ71bPVIv/g=="], - "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.57.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-logs": "0.57.1", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-EX67y+ukNNfFrOLyjYGw8AMy0JPIlEX1dW60SGUNZWW2hSQyyolX7EqFuHP5LtXLjJHNfzx5SMBVQ3owaQCNDw=="], - "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], - "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], + "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], - "wide-align": ["wide-align@1.1.5", "", { "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg=="], + "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.57.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-transformer": "0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-GNBJAEYfeiYJQ3O2dvXgiNZ/qjWrBxSb1L1s7iV/jKBRGMN3Nv+miTk2SLeEobF5E5ZK4rVcHKlBZ71bPVIv/g=="], - "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.57.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-logs": "0.57.1", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-EX67y+ukNNfFrOLyjYGw8AMy0JPIlEX1dW60SGUNZWW2hSQyyolX7EqFuHP5LtXLjJHNfzx5SMBVQ3owaQCNDw=="], - "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], + "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], - "workerpool": ["workerpool@9.3.4", "", {}, "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg=="], + "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/core": ["@opentelemetry/core@2.5.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ=="], - "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/resources": ["@opentelemetry/resources@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g=="], - "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ=="], - "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + "@opentelemetry/instrumentation-amqplib/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + "@opentelemetry/instrumentation-connect/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], + "@opentelemetry/instrumentation-dataloader/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "xcase": ["xcase@2.0.1", "", {}, "sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw=="], + "@opentelemetry/instrumentation-express/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "xml-crypto": ["xml-crypto@6.1.2", "", { "dependencies": { "@xmldom/is-dom-node": "^1.0.1", "@xmldom/xmldom": "^0.8.10", "xpath": "^0.0.33" } }, "sha512-leBOVQdVi8FvPJrMYoum7Ici9qyxfE4kVi+AkpUoYCSXaQF4IlBm1cneTK9oAxR61LpYxTx7lNcsnBIeRpGW2w=="], + "@opentelemetry/instrumentation-fs/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "xml-encryption": ["xml-encryption@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.5", "escape-html": "^1.0.3", "xpath": "0.0.32" } }, "sha512-PV7qnYpoAMXbf1kvQkqMScLeQpjCMixddAKq9PtqVrho8HnYbBOWNfG0kA4R7zxQDo7w9kiYAyzS/ullAyO55Q=="], + "@opentelemetry/instrumentation-generic-pool/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "xml-naming": ["xml-naming@0.1.0", "", {}, "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw=="], + "@opentelemetry/instrumentation-graphql/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "xml2js": ["xml2js@0.6.2", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA=="], + "@opentelemetry/instrumentation-hapi/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], + "@opentelemetry/instrumentation-http/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "xpath": ["xpath@0.0.33", "", {}, "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA=="], + "@opentelemetry/instrumentation-ioredis/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], + "@opentelemetry/instrumentation-kafkajs/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "y-protocols": ["y-protocols@1.0.7", "", { "dependencies": { "lib0": "^0.2.85" }, "peerDependencies": { "yjs": "^13.0.0" } }, "sha512-YSVsLoXxO67J6eE/nV4AtFtT3QEotZf5sK5BHxFBXso7VDUT3Tx07IfA6hsu5Q5OmBdMkQVmFZ9QOA7fikWvnw=="], + "@opentelemetry/instrumentation-knex/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + "@opentelemetry/instrumentation-koa/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "@opentelemetry/instrumentation-lru-memoizer/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], + "@opentelemetry/instrumentation-mongodb/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "@opentelemetry/instrumentation-mongoose/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "@opentelemetry/instrumentation-mysql/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "yargs-unparser": ["yargs-unparser@2.0.0", "", { "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" } }, "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA=="], + "@opentelemetry/instrumentation-mysql2/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "yjs": ["yjs@13.6.30", "", { "dependencies": { "lib0": "^0.2.99" } }, "sha512-vv/9h42eCMC81ZHDFswuu/MKzkl/vyq1BhaNGfHyOonwlG4CJbQF4oiBBJPvfdeCt/PlVDWh7Nov9D34YY09uQ=="], + "@opentelemetry/instrumentation-pg/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], + "@opentelemetry/instrumentation-pg/@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="], - "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], + "@opentelemetry/instrumentation-redis/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "yup": ["yup@1.7.1", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw=="], + "@opentelemetry/instrumentation-tedious/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "zeptomatch": ["zeptomatch@2.1.0", "", { "dependencies": { "grammex": "^3.1.11", "graphmatch": "^1.1.0" } }, "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA=="], + "@opentelemetry/instrumentation-undici/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], + "@opentelemetry/otlp-exporter-base/@opentelemetry/core": ["@opentelemetry/core@2.5.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ=="], - "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], + "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], - "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.57.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-transformer": "0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-GNBJAEYfeiYJQ3O2dvXgiNZ/qjWrBxSb1L1s7iV/jKBRGMN3Nv+miTk2SLeEobF5E5ZK4rVcHKlBZ71bPVIv/g=="], - "@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.8", "", {}, "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="], + "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.57.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-logs": "0.57.1", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-EX67y+ukNNfFrOLyjYGw8AMy0JPIlEX1dW60SGUNZWW2hSQyyolX7EqFuHP5LtXLjJHNfzx5SMBVQ3owaQCNDw=="], - "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "@opentelemetry/otlp-transformer/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.211.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg=="], - "@aws-crypto/crc32c/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "@opentelemetry/otlp-transformer/@opentelemetry/core": ["@opentelemetry/core@2.5.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ=="], - "@aws-crypto/sha1-browser/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "@opentelemetry/otlp-transformer/@opentelemetry/resources": ["@opentelemetry/resources@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g=="], - "@aws-crypto/sha1-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + "@opentelemetry/otlp-transformer/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-BeJLtU+f5Gf905cJX9vXFQorAr6TAfK3SPvTFqP+scfIpDQEJfRaGJWta7sJgP+m4dNtBf9y3yvBKVAZZtJQVA=="], - "@aws-crypto/sha256-browser/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ=="], - "@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + "@opentelemetry/otlp-transformer/protobufjs": ["protobufjs@8.0.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-jx6+sE9h/UryaCZhsJWbJtTEy47yXoGNYI4z8ZaRncM0zBKeRqjO2JEcOUYwrYGb1WLhXM1FfMzW3annvFv0rw=="], - "@aws-crypto/sha256-js/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "@opentelemetry/sdk-logs/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.211.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg=="], - "@aws-crypto/util/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "@opentelemetry/sdk-logs/@opentelemetry/core": ["@opentelemetry/core@2.5.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ=="], - "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + "@opentelemetry/sdk-logs/@opentelemetry/resources": ["@opentelemetry/resources@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.30", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.25", "@aws-sdk/credential-provider-http": "^3.972.27", "@aws-sdk/credential-provider-ini": "^3.972.29", "@aws-sdk/credential-provider-process": "^3.972.25", "@aws-sdk/credential-provider-sso": "^3.972.29", "@aws-sdk/credential-provider-web-identity": "^3.972.29", "@aws-sdk/types": "^3.973.7", "@smithy/credential-provider-imds": "^4.2.13", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-FMnAnWxc8PG+ZrZ2OBKzY4luCUJhe9CG0B9YwYr4pzrYGLXBS2rl+UoUvjGbAwiptxRL6hyA3lFn03Bv1TLqTw=="], + "@opentelemetry/sdk-metrics/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], - "@aws-sdk/client-codebuild/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-je5vRdNw4SkuTnmRbFZLdye4sQ0faLt8kwka5wnnSU30q1mHO4X+idGEJOOE+Tn1ME7Oryn05xxkDvIb3UaLaQ=="], + "@opentelemetry/sdk-metrics/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], - "@aws-sdk/client-codebuild/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-HsVgDrruhqI28RkaXALm8grJ7Agc1wF6Et0xh6pom8NdO2VdO/SD9U/tPwUjewwK/pVoka+EShBxyCvgsPCtog=="], + "@prisma/adapter-pg/@types/pg": ["@types/pg@8.11.11", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^4.0.1" } }, "sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw=="], - "@aws-sdk/client-codebuild/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-RVQQbq5orQ/GHUnXvqEOj2HHPBJm+mM+ySwZKS5UaLBwra5ugRtiH09PLUoOZRl7a1YzaOzXSuGbn9iD5j60WQ=="], + "@prisma/dev/@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="], - "@aws-sdk/client-codebuild/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@aws-sdk/util-endpoints": "^3.996.6", "@smithy/core": "^3.23.14", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/util-retry": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-f/sIRzuTfEjg6NsbMYvye2VsmnQoNgntntleQyx5uGacUYzszbfIlO3GcI6G6daWUmTm0IDZc11qMHWwF0o0mQ=="], + "@prisma/dev/hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], - "@aws-sdk/client-codebuild/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/config-resolver": "^4.4.14", "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-6Q8B1dcx6BBqUTY1Mc/eROKA0FImEEY5VPSd6AGPEUf0ErjExz4snVqa9kNJSoVDV1rKaNf3qrWojgcKW+SdDg=="], + "@prisma/engines/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], - "@aws-sdk/client-codebuild/@aws-sdk/types": ["@aws-sdk/types@3.973.7", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-reXRwoJ6CfChoqAsBszUYajAF8Z2LRE+CRcKocvFSMpIiLOtYU3aJ9trmn6VVPAzbbY5LXF+FfmUslbXk1SYFg=="], + "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], - "@aws-sdk/client-codebuild/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-endpoints": "^3.3.4", "tslib": "^2.6.2" } }, "sha512-2nUQ+2ih7CShuKHpGSIYvvAIOHy52dOZguYG36zptBukhw6iFwcvGfG0tes0oZFWQqEWvgZe9HLWaNlvXGdOrg=="], + "@prisma/fetch-engine/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], - "@aws-sdk/client-codebuild/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/types": "^4.14.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-sn/LMzTbGjYqCCF24390WxPd6hkpoSptiUn5DzVp4cD71yqw+yGEGm1YCxyEoPXyc8qciM8UzLJcZBFslxo5Uw=="], + "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], - "@aws-sdk/client-codebuild/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.15", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.29", "@aws-sdk/types": "^3.973.7", "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-fYn3s9PtKdgQkczGZCFMgkNEe8aq1JCVbnRqjqN9RSVW43xn2RV9xdcZ3z01a48Jpkuh/xCmBKJxdLOo4Ozg7w=="], + "@prisma/generator-helper/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], - "@aws-sdk/client-codebuild/@smithy/config-resolver": ["@smithy/config-resolver@4.4.15", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.4.0", "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-BJdMBY5YO9iHh+lPLYdHv6LbX+J8IcPCYMl1IJdBt2KDWNHwONHrPVHk3ttYBqJd9wxv84wlbN0f7GlQzcQtNQ=="], + "@prisma/get-platform/@prisma/debug": ["@prisma/debug@7.2.0", "", {}, "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw=="], - "@aws-sdk/client-codebuild/@smithy/core": ["@smithy/core@3.23.14", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.13", "@smithy/util-stream": "^4.5.22", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-vJ0IhpZxZAkFYOegMKSrxw7ujhhT2pass/1UEcZ4kfl5srTAqtPU5I7MdYQoreVas3204ykCiNhY1o7Xlz6Yyg=="], + "@prisma/instrumentation/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.207.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.207.0", "import-in-the-middle": "^2.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-y6eeli9+TLKnznrR8AZlQMSJT7wILpXH+6EYq5Vf/4Ao+huI7EedxQHwRgVUOMLFbe7VFDvHJrX9/f4lcwnJsA=="], - "@aws-sdk/client-codebuild/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.16", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/querystring-builder": "^4.2.13", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-nYDRUIvNd4mFmuXraRWt6w5UsZTNqtj4hXJA/iiOD4tuseIdLP9Lq38teH/SZTcIFCa2f+27o7hYpIsWktJKEQ=="], + "@radix-ui/react-select/@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="], - "@aws-sdk/client-codebuild/@smithy/hash-node": ["@smithy/hash-node@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-4/oy9h0jjmY80a2gOIo75iLl8TOPhmtx4E2Hz+PfMjvx/vLtGY4TMU/35WRyH2JHPfT5CVB38u4JRow7gnmzJA=="], + "@radix-ui/react-tooltip/@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="], - "@aws-sdk/client-codebuild/@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-jvC0RB/8BLj2SMIkY0Npl425IdnxZJxInpZJbu563zIRnVjpDMXevU3VMCRSabaLB0kf/eFIOusdGstrLJ8IDg=="], + "@radix-ui/react-visually-hidden/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], - "@aws-sdk/client-codebuild/@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.13", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-IPMLm/LE4AZwu6qiE8Rr8vJsWhs9AtOdySRXrOM7xnvclp77Tyh7hMs/FRrMf26kgIe67vFJXXOSmVxS7oKeig=="], + "@react-email/markdown/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], - "@aws-sdk/client-codebuild/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.29", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/middleware-serde": "^4.2.17", "@smithy/node-config-provider": "^4.3.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-R9Q/58U+qBiSARGWbAbFLczECg/RmysRksX6Q8BaQEpt75I7LI6WGDZnjuC9GXSGKljEbA7N118LhGaMbfrTXw=="], + "@redis/graph/@redis/client": ["@redis/client@1.6.0", "", { "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", "yallist": "4.0.0" } }, "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg=="], - "@aws-sdk/client-codebuild/@smithy/middleware-retry": ["@smithy/middleware-retry@4.5.1", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/node-config-provider": "^4.3.13", "@smithy/protocol-http": "^5.3.13", "@smithy/service-error-classification": "^4.2.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/util-middleware": "^4.2.13", "@smithy/util-retry": "^4.3.1", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-/zY+Gp7Qj2D2hVm3irkCyONER7E9MiX3cUUm/k2ZmhkzZkrPgwVS4aJ5NriZUEN/M0D1hhjrgjUmX04HhRwdWA=="], + "@rollup/plugin-alias/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], - "@aws-sdk/client-codebuild/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.17", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-0T2mcaM6v9W1xku86Dk0bEW7aEseG6KenFkPK98XNw0ZhOqOiD1MrMsdnQw9QsL3/Oa85T53iSMlm0SZdSuIEQ=="], + "@rollup/plugin-babel/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], - "@aws-sdk/client-codebuild/@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-g72jN/sGDLyTanrCLH9fhg3oysO3f7tQa6eWWsMyn2BiYNCgjF24n4/I9wff/5XidFvjj9ilipAoQrurTUrLvw=="], + "@rollup/plugin-babel/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], - "@aws-sdk/client-codebuild/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.13", "", { "dependencies": { "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-iGxQ04DsKXLckbgnX4ipElrOTk+IHgTyu0q0WssZfYhDm9CQWHmu6cOeI5wmWRxpXbBDhIIfXMWz5tPEtcVqbw=="], + "@rollup/plugin-commonjs/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], - "@aws-sdk/client-codebuild/@smithy/node-http-handler": ["@smithy/node-http-handler@4.5.2", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/querystring-builder": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-/oD7u8M0oj2ZTFw7GkuuHWpIxtWdLlnyNkbrWcyVYhd5RJNDuczdkb0wfnQICyNFrVPlr8YHOhamjNy3zidhmA=="], + "@rollup/plugin-commonjs/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], - "@aws-sdk/client-codebuild/@smithy/protocol-http": ["@smithy/protocol-http@5.3.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-+HsmuJUF4u8POo6s8/a2Yb/AQ5t/YgLovCuHF9oxbocqv+SZ6gd8lC2duBFiCA/vFHoHQhoq7QjqJqZC6xOxxg=="], + "@rollup/plugin-commonjs/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], - "@aws-sdk/client-codebuild/@smithy/smithy-client": ["@smithy/smithy-client@4.12.9", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/middleware-endpoint": "^4.4.29", "@smithy/middleware-stack": "^4.2.13", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" } }, "sha512-ovaLEcTU5olSeHcRXcxV6viaKtpkHZumn6Ps0yn7dRf2rRSfy794vpjOtrWDO0d1auDSvAqxO+lyhERSXQ03EQ=="], + "@rollup/plugin-json/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], - "@aws-sdk/client-codebuild/@smithy/types": ["@smithy/types@4.14.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-OWgntFLW88kx2qvf/c/67Vno1yuXm/f9M7QFAtVkkO29IJXGBIg0ycEaBTH0kvCtwmvZxRujrgP5a86RvsXJAQ=="], + "@rollup/plugin-json/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], - "@aws-sdk/client-codebuild/@smithy/url-parser": ["@smithy/url-parser@4.2.13", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-2G03yoboIRZlZze2+PT4GZEjgwQsJjUgn6iTsvxA02bVceHR6vp4Cuk7TUnPFWKF+ffNUk3kj4COwkENS2K3vw=="], + "@rollup/plugin-node-resolve/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], - "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.45", "", { "dependencies": { "@smithy/property-provider": "^4.2.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-ag9sWc6/nWZAuK3Wm9KlFJUnRkXLrXn33RFjIAmCTFThqLHY+7wCst10BGq56FxslsDrjhSie46c8OULS+BiIw=="], + "@rollup/plugin-node-resolve/deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], - "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.50", "", { "dependencies": { "@smithy/config-resolver": "^4.4.15", "@smithy/credential-provider-imds": "^4.2.13", "@smithy/node-config-provider": "^4.3.13", "@smithy/property-provider": "^4.2.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-xpjncL5XozFA3No7WypTsPU1du0fFS8flIyO+Wh2nhCy7bpEapvU7BR55Bg+wrfw+1cRA+8G8UsTjaxgzrMzXg=="], + "@rollup/plugin-node-resolve/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], - "@aws-sdk/client-codebuild/@smithy/util-endpoints": ["@smithy/util-endpoints@3.4.0", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-QQHGPKkw6NPcU6TJ1rNEEa201srPtZiX4k61xL163vvs9sTqW/XKz+UEuJ00uvPqoN+5Rs4Ka1UJ7+Mp03IXJw=="], + "@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@aws-sdk/client-codebuild/@smithy/util-middleware": ["@smithy/util-middleware@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-GTooyrlmRTqvUen4eK7/K1p6kryF7bnDfq6XsAbIsf2mo51B/utaH+XThY6dKgNCWzMAaH/+OLmqaBuLhLWRow=="], + "@selderee/plugin-htmlparser2/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - "@aws-sdk/client-codebuild/@smithy/util-retry": ["@smithy/util-retry@4.3.1", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-FwmicpgWOkP5kZUjN3y+3JIom8NLGqSAJBeoIgK0rIToI817TEBHCrd0A2qGeKQlgDeP+Jzn4i0H/NLAXGy9uQ=="], + "@sentry/bun/@sentry/core": ["@sentry/core@10.45.0", "", {}, "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.42", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-ini": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ=="], + "@sentry/bundler-plugin-core/@sentry/cli": ["@sentry/cli@2.58.5", "", { "dependencies": { "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.7", "progress": "^2.0.3", "proxy-from-env": "^1.1.0", "which": "^2.0.2" }, "optionalDependencies": { "@sentry/cli-darwin": "2.58.5", "@sentry/cli-linux-arm": "2.58.5", "@sentry/cli-linux-arm64": "2.58.5", "@sentry/cli-linux-i686": "2.58.5", "@sentry/cli-linux-x64": "2.58.5", "@sentry/cli-win32-arm64": "2.58.5", "@sentry/cli-win32-i686": "2.58.5", "@sentry/cli-win32-x64": "2.58.5" }, "bin": { "sentry-cli": "bin/sentry-cli" } }, "sha512-tavJ7yGUZV+z3Ct2/ZB6mg339i08sAk6HDkgqmSRuQEu2iLS5sl9HIvuXfM6xjv8fwlgFOSy++WNABNAcGHUbg=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], + "@sentry/bundler-plugin-core/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], - "@aws-sdk/client-cognito-identity/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "@sentry/bundler-plugin-core/glob": ["glob@9.3.5", "", { "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" } }, "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q=="], - "@aws-sdk/client-cognito-identity/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], + "@sentry/bundler-plugin-core/magic-string": ["magic-string@0.30.8", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ=="], - "@aws-sdk/client-cognito-identity/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], + "@sentry/cli/undici": ["undici@6.24.1", "", {}, "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA=="], - "@aws-sdk/client-cognito-identity/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], + "@sentry/node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], - "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.42", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-ini": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ=="], + "@sentry/node/@sentry/core": ["@sentry/core@10.45.0", "", {}, "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q=="], - "@aws-sdk/client-dynamodb/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], + "@sentry/node/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], - "@aws-sdk/client-dynamodb/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "@sentry/node-core/@sentry/core": ["@sentry/core@10.45.0", "", {}, "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q=="], - "@aws-sdk/client-dynamodb/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], + "@sentry/node-core/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], - "@aws-sdk/client-dynamodb/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], + "@sentry/opentelemetry/@sentry/core": ["@sentry/core@10.45.0", "", {}, "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q=="], - "@aws-sdk/client-dynamodb/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], + "@slates/proto/@lowerdeck/error": ["@lowerdeck/error@1.2.3", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.10" } }, "sha512-LAMJ9wsUQQ7xkIqbK457vE5ZPlhaijLjKYDKyLLBYFv6BWr9heGkb/4vuU0TEKyCkF2ReZFiAI7fRWJwm9aqbw=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.37", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.32", "@aws-sdk/credential-provider-http": "^3.972.34", "@aws-sdk/credential-provider-ini": "^3.972.36", "@aws-sdk/credential-provider-process": "^3.972.32", "@aws-sdk/credential-provider-sso": "^3.972.36", "@aws-sdk/credential-provider-web-identity": "^3.972.36", "@aws-sdk/types": "^3.973.8", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-/WFixFAAiw8WpmjZcI0l4t3DerXLmVinOIfuotmRZnu2qmsFPoqqmstASz0z8bi1pGdFXzeLzf6bwucM3mZcUQ=="], + "@slates/proto/zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], - "@aws-sdk/client-kms/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg=="], + "@smithy/chunked-blob-reader-native/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], - "@aws-sdk/client-kms/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ=="], + "@smithy/hash-blob-browser/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "@aws-sdk/client-kms/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ=="], + "@smithy/hash-stream-node/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "@aws-sdk/client-kms/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@smithy/core": "^3.23.17", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-retry": "^4.3.5", "tslib": "^2.6.2" } }, "sha512-O2beToxguBvrZFFZ+fFgPbbae8MvyIBjQ6lImee4APHEXXNAD5ZJ2ayLF1mb7rsKw86TM81y5czg82bZncjSjg=="], + "@smithy/hash-stream-node/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], - "@aws-sdk/client-kms/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.13", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/config-resolver": "^4.4.17", "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A=="], + "@smithy/md5-js/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "@aws-sdk/client-kms/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], + "@smithy/md5-js/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], - "@aws-sdk/client-kms/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-endpoints": "^3.4.2", "tslib": "^2.6.2" } }, "sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g=="], + "@smithy/signature-v4/@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="], - "@aws-sdk/client-kms/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g=="], + "@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="], - "@aws-sdk/client-kms/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.22", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/types": "^3.973.8", "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-YTYqTmOUrwbm1h99Ee4y/mVYpFRl0oSO/amtP5cc1BZZWdaAVWs9zj3TkyRHWvR9aI/ZS8m3mS6awXtYUlWyaw=="], + "@surma/rollup-plugin-off-main-thread/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], - "@aws-sdk/client-kms/@smithy/config-resolver": ["@smithy/config-resolver@4.4.17", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ=="], + "@tiptap/extension-blockquote/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/core": ["@smithy/core@3.23.17", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-stream": "^4.5.25", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-x7BlLbUFL8NWCGjMF9C+1N5cVCxcPa7g6Tv9B4A2luWx3be3oU8hQ96wIwxe/s7OhIzvoJH73HAUSg5JXVlEtQ=="], + "@tiptap/extension-bold/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.17", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/querystring-builder": "^4.2.14", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw=="], + "@tiptap/extension-bubble-menu/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/hash-node": ["@smithy/hash-node@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g=="], + "@tiptap/extension-code/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw=="], + "@tiptap/extension-code-block/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.14", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw=="], + "@tiptap/extension-document/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.32", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/middleware-serde": "^4.2.20", "@smithy/node-config-provider": "^4.3.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-ZZkgyjnJppiZbIm6Qbx92pbXYi1uzenIvGhBSCDlc7NwuAkiqSgS75j1czAD25ZLs2FjMjYy1q7gyRVWG6JA0Q=="], + "@tiptap/extension-floating-menu/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/middleware-retry": ["@smithy/middleware-retry@4.5.7", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/node-config-provider": "^4.3.14", "@smithy/protocol-http": "^5.3.14", "@smithy/service-error-classification": "^4.3.1", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.6", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-bRt6ZImqVSeTk39Nm81K20ObIiAZ3WefY7G6+iz/0tZjs4dgRRjvRX2sgsH+zi6iDCRR/aQvQofLKxxz4rPBZg=="], + "@tiptap/extension-hard-break/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.20", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-Lx9JMO9vArPtiChE3wbEZ5akMIDQpWQtlu90lhACQmNOXcGXRbaDywMHDzuDZ2OkZzP+9wQfZi3YJT9F67zTQQ=="], + "@tiptap/extension-highlight/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA=="], + "@tiptap/extension-horizontal-rule/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.14", "", { "dependencies": { "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg=="], + "@tiptap/extension-image/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/node-http-handler": ["@smithy/node-http-handler@4.6.1", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/querystring-builder": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-iB+orM4x3xrr57X3YaXazfKnntl0LHlZB1kcXSGzMV1Tt0+YwEjGlbjk/44qEGtBzXAz6yFDzkYTKSV6Pj2HUg=="], + "@tiptap/extension-italic/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/protocol-http": ["@smithy/protocol-http@5.3.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ=="], + "@tiptap/extension-link/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/smithy-client": ["@smithy/smithy-client@4.12.13", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-stack": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" } }, "sha512-y/Pcj1V9+qG98gyu1gvftHB7rDpdh+7kIBIggs55yGm3JdtBV8GT8IFF3a1qxZ79QnaJHX9GXzvBG6tAd+czJA=="], + "@tiptap/extension-list/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], + "@tiptap/extension-paragraph/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/url-parser": ["@smithy/url-parser@4.2.14", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ=="], + "@tiptap/extension-strike/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.49", "", { "dependencies": { "@smithy/property-provider": "^4.2.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw=="], + "@tiptap/extension-subscript/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.54", "", { "dependencies": { "@smithy/config-resolver": "^4.4.17", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw=="], + "@tiptap/extension-superscript/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/util-endpoints": ["@smithy/util-endpoints@3.4.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg=="], + "@tiptap/extension-text/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/util-middleware": ["@smithy/util-middleware@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw=="], + "@tiptap/extension-text-align/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-kms/@smithy/util-retry": ["@smithy/util-retry@4.3.6", "", { "dependencies": { "@smithy/service-error-classification": "^4.3.1", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-p6/FO1n2KxMeQyna067i0uJ6TSbb165ZhnRtCpWh4Foxqbfc6oW+XITaL8QkFJj3KFnDe2URt4gOhgU06EP9ew=="], + "@tiptap/extension-text-style/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.15", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.14", "@aws-sdk/credential-provider-http": "^3.972.16", "@aws-sdk/credential-provider-ini": "^3.972.14", "@aws-sdk/credential-provider-process": "^3.972.14", "@aws-sdk/credential-provider-sso": "^3.972.14", "@aws-sdk/credential-provider-web-identity": "^3.972.14", "@aws-sdk/types": "^3.973.4", "@smithy/credential-provider-imds": "^4.2.10", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-59NBJgTcQ2FC94T+SWkN5UQgViFtrLnkswSKhG5xbjPAotOXnkEF2Bf0bfUV1F3VaXzqAPZJoZ3bpg4rr8XD5Q=="], + "@tiptap/extension-typography/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-s3/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5XHwjPH1lHB+1q4bfC7T8Z5zZrZXfaLcjSMwTd1HPSPrCmPFMbg3UQ5vgNWcVj0xoX4HWqTGkSf2byrjlnRg5w=="], + "@tiptap/extension-underline/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-s3/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-iFnaMFMQdljAPrvsCVKYltPt2j40LQqukAbXvW7v0aL5I+1GO7bZ/W8m12WxW3gwyK5p5u1WlHg8TSAizC5cZw=="], + "@tiptap/extensions/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-s3/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-dY4v3of5EEMvik6+UDwQ96KfUFDk8m1oZDdkSc5lwi4o7rFrjnv0A+yTV+gu230iybQZnKgDLg/rt2P3H+Vscw=="], + "@tiptap/react/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-s3/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.16", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-endpoints": "^3.996.3", "@smithy/core": "^3.23.7", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-AmVxtxn8ZkNJbuPu3KKfW9IkJgTgcEtgSwbo0NVcAb31iGvLgHXj2nbbyrUDfh2fx8otXmqL+qw1lRaTi+V3vA=="], + "@tiptap/starter-kit/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@aws-sdk/client-s3/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/config-resolver": "^4.4.9", "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-Aa5PusHLXAqLTX1UKDvI3pHQJtIsF7Q+3turCHqfz/1F61/zDMWfbTC8evjhrrYVAtz9Vsv3SJ/waSUeu7B6gw=="], + "@tiptap/starter-kit/@tiptap/extension-heading": ["@tiptap/extension-heading@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-JgJhurnCe3eN6a0lEsNQM/46R1bcwzwWWZEFDSb1P9dR8+t1/5v7cMZWsSInpD7R4/74iJn0+M5hcXLwCmBmYA=="], - "@aws-sdk/client-s3/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "@types/chai-subset/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], - "@aws-sdk/client-s3/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.3", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-endpoints": "^3.3.1", "tslib": "^2.6.2" } }, "sha512-yWIQSNiCjykLL+ezN5A+DfBb1gfXTytBxm57e64lYmwxDHNmInYHRJYYRAGWG1o77vKEiWaw4ui28e3yb1k5aQ=="], + "@types/node-fetch/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@aws-sdk/client-s3/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.4", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-Fwr/llD6GOrFgQnKaI2glhohdGuBDfHfora6iG9qsBBBR8xv1SdCSwbtf5CWlUdCw5X7g76G/9Hf0Inh0EmoxA=="], + "@types/nodemailer/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@aws-sdk/client-s3/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.1", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.16", "@aws-sdk/types": "^3.973.4", "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-kmgbDqT7aCBEVrqESM2JUjbf0zhDUQ7wnt3q1RuVS+3mglrcfVb2bwkbmf38npOyyPGtQPV5dWN3m+sSFAVAgQ=="], + "@types/pg/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@aws-sdk/client-s3/@smithy/config-resolver": ["@smithy/config-resolver@4.4.9", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.1", "@smithy/util-endpoints": "^3.3.1", "@smithy/util-middleware": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-ejQvXqlcU30h7liR9fXtj7PIAau1t/sFbJpgWPfiYDs7zd16jpH0IsSXKcba2jF6ChTXvIjACs27kNMc5xxE2Q=="], + "@types/pg-pool/@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="], - "@aws-sdk/client-s3/@smithy/core": ["@smithy/core@3.23.7", "", { "dependencies": { "@smithy/middleware-serde": "^4.2.11", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "@smithy/uuid": "^1.1.1", "tslib": "^2.6.2" } }, "sha512-/+ldRdtiO5Cb26afAZOG1FZM0x7D4AYdjpyOv2OScJw+4C7X+OLdRnNKF5UyUE0VpPgSKr3rnF/kvprRA4h2kg=="], + "@types/readable-stream/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@aws-sdk/client-s3/@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.10", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-0xupsu9yj9oDVuQ50YCTS9nuSYhGlrwqdaKQel9y2Fz7LU9fNErVlw9N0o4pm4qqvWEGbSTI4HKc6XJfB30MVw=="], + "@types/resolve/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@aws-sdk/client-s3/@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-8kn6sinrduk0yaYHMJDsNuiFpXwQwibR7n/4CDUqn4UgaG+SeBHu5jHGFdU9BLFAM7Q4/gvr9RYxBHz9/jKrhA=="], + "@types/tar-stream/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@aws-sdk/client-s3/@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.10", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-uUrxPGgIffnYfvIOUmBM5i+USdEBRTdh7mLPttjphgtooxQ8CtdO1p6K5+Q4BBAZvKlvtJ9jWyrWpBJYzBKsyQ=="], + "@types/unzipper/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@aws-sdk/client-s3/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-muS5tFw+A/uo+U+yig06vk1776UFM+aAp9hFM8efI4ZcHhTcgv6NTeK4x7ltHeMPBwnhEjcf0MULTyxNkSNxDw=="], + "@typescript-eslint/typescript-estree/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@aws-sdk/client-s3/@smithy/hash-node": ["@smithy/hash-node@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-1VzIOI5CcsvMDvP3iv1vG/RfLJVVVc67dCRyLSB2Hn9SWCZrDO3zvcIzj3BfEtqRW5kcMg5KAeVf1K3dR6nD3w=="], + "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], - "@aws-sdk/client-s3/@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-vy9KPNSFUU0ajFYk0sDZIYiUlAWGEAhRfehIr5ZkdFrRFTAuXEPUd41USuqHU6vvLX4r6Q9X7MKBco5+Il0Org=="], + "@typespec/ts-http-runtime/http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], - "@aws-sdk/client-s3/@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.10", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-TQZ9kX5c6XbjhaEBpvhSvMEZ0klBs1CFtOdPFwATZSbC9UeQfKHPLPN9Y+I6wZGMOavlYTOlHEPDrt42PMSH9w=="], + "@typespec/ts-http-runtime/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "@aws-sdk/client-s3/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.21", "", { "dependencies": { "@smithy/core": "^3.23.7", "@smithy/middleware-serde": "^4.2.11", "@smithy/node-config-provider": "^4.3.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-middleware": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-CoVGZaqIC0tEjz0ga3ciwCMA5fd/4lIOwO2wx0fH+cTi1zxSFZnMJbIiIF9G1d4vRSDyTupDrpS3FKBBJGkRZg=="], + "@vitest/coverage-v8/@vitest/utils": ["@vitest/utils@4.1.2", "", { "dependencies": { "@vitest/pretty-format": "4.1.2", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ=="], - "@aws-sdk/client-s3/@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.38", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/protocol-http": "^5.3.10", "@smithy/service-error-classification": "^4.2.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/util-middleware": "^4.2.10", "@smithy/util-retry": "^4.2.10", "@smithy/uuid": "^1.1.1", "tslib": "^2.6.2" } }, "sha512-WdHvdhjE6Fj78vxFwDKFDwlqGOGRUWrwGeuENUbTVE46Su9mnQM+dXHtbnCaQvwuSYrRsjpe8zUsFpwUp/azlA=="], + "@vitest/coverage-v8/std-env": ["std-env@4.0.0", "", {}, "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ=="], - "@aws-sdk/client-s3/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg=="], + "@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - "@aws-sdk/client-s3/@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA=="], + "@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/client-s3/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.10", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w=="], + "@vitest/mocker/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], - "@aws-sdk/client-s3/@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.13", "", { "dependencies": { "@smithy/abort-controller": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-o8CP8w6tlUA0lk+Qfwm6Ed0jCWk3bEY6iBOJjdBaowbXKCSClk8zIHQvUL6RUZMvuNafF27cbRCMYqw6O1v4aA=="], + "@vitest/ui/@vitest/utils": ["@vitest/utils@4.1.2", "", { "dependencies": { "@vitest/pretty-format": "4.1.2", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ=="], - "@aws-sdk/client-s3/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], + "@vscode/test-cli/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "@aws-sdk/client-s3/@smithy/smithy-client": ["@smithy/smithy-client@4.12.1", "", { "dependencies": { "@smithy/core": "^3.23.7", "@smithy/middleware-endpoint": "^4.4.21", "@smithy/middleware-stack": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.16", "tslib": "^2.6.2" } }, "sha512-Xf9UFHlAihewfkmLNZ6I/Ek6kcYBKoU3cbRS9Z4q++9GWoW0YFbAHs7wMbuXm+nGuKHZ5OKheZMuDdaWPv8DJw=="], + "@vscode/test-cli/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], - "@aws-sdk/client-s3/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@vscode/test-cli/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], - "@aws-sdk/client-s3/@smithy/url-parser": ["@smithy/url-parser@4.2.10", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A=="], + "@vscode/test-cli/mocha": ["mocha@11.7.5", "", { "dependencies": { "browser-stdout": "^1.3.1", "chokidar": "^4.0.1", "debug": "^4.3.5", "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^9.0.5", "ms": "^2.1.3", "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", "workerpool": "^9.2.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" }, "bin": { "mocha": "bin/mocha.js", "_mocha": "bin/_mocha" } }, "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig=="], - "@aws-sdk/client-s3/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], + "@vscode/test-cli/supports-color": ["supports-color@9.4.0", "", {}, "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw=="], - "@aws-sdk/client-s3/@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g=="], + "@vscode/test-electron/http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], - "@aws-sdk/client-s3/@smithy/util-body-length-node": ["@smithy/util-body-length-node@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-4rHqBvxtJEBvsZcFQSPQqXP2b/yy/YlB66KlcEgcH2WNoOKCKB03DSLzXmOsXjbl8dJ4OEYTn31knhdznwk7zw=="], + "@vscode/test-electron/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "@aws-sdk/client-s3/@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.37", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-JlPZhV1kQCGNJgofRTU6E8kHrjCKsb6cps8gco8QDVaFl7biFYzHg0p1x89ytIWyVyCkY3nOpO8tJPM47Vqlww=="], + "@vscode/test-electron/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@aws-sdk/client-s3/@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.40", "", { "dependencies": { "@smithy/config-resolver": "^4.4.9", "@smithy/credential-provider-imds": "^4.2.10", "@smithy/node-config-provider": "^4.3.10", "@smithy/property-provider": "^4.2.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-BM5cPEsyxHdYYO4Da77E94lenhaVPNUzBTyCGDkcw/n/mE8Q1cfHwr+n/w2bNPuUsPC30WaW5/hGKWOTKqw8kw=="], + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@aws-sdk/client-s3/@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-xyctc4klmjmieQiF9I1wssBWleRV0RhJ2DpO8+8yzi2LO1Z+4IWOZNGZGNj4+hq9kdo+nyfrRLmQTzc16Op2Vg=="], + "are-we-there-yet/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "@aws-sdk/client-s3/@smithy/util-middleware": ["@smithy/util-middleware@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA=="], + "ast-v8-to-istanbul/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "@aws-sdk/client-s3/@smithy/util-retry": ["@smithy/util-retry@4.2.10", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-HrBzistfpyE5uqTwiyLsFHscgnwB0kgv8vySp7q5kZ0Eltn/tjosaSGGDj/jJ9ys7pWzIP/icE2d+7vMKXLv7A=="], + "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@aws-sdk/client-s3/@smithy/util-stream": ["@smithy/util-stream@4.5.16", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.12", "@smithy/node-http-handler": "^4.4.13", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-c7awZV6cxY0czgDDSr+Bz0XfRtg8AwW2BWhrHhLJISrpmwv8QzA2qzTllWyMVNdy1+UJr9vCm29hzuh3l8TTFw=="], + "babel-plugin-styled-components/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@aws-sdk/client-s3/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], + "bl/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], - "@aws-sdk/client-s3/@smithy/util-waiter": ["@smithy/util-waiter@4.2.10", "", { "dependencies": { "@smithy/abort-controller": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-4eTWph/Lkg1wZEDAyObwme0kmhEb7J/JjibY2znJdrYRgKbKqB7YoEhhJVJ4R1g/SYih4zuwX7LpJaM8RsnTVg=="], + "bullmq/ioredis": ["ioredis@5.9.3", "", { "dependencies": { "@ioredis/commands": "1.5.0", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA=="], - "@aws-sdk/client-ses/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.44", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.39", "@aws-sdk/credential-provider-http": "^3.972.41", "@aws-sdk/credential-provider-ini": "^3.972.43", "@aws-sdk/credential-provider-process": "^3.972.39", "@aws-sdk/credential-provider-sso": "^3.972.43", "@aws-sdk/credential-provider-web-identity": "^3.972.43", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-sDaBIT0yrNNIPfvlsiTCmANm07zKju+ipWODjEXgZlsjMeIJR3LVp7RDyAOzUoAsTbDfYKDWp+i5WrFiQP6rmQ=="], + "bullmq/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@aws-sdk/client-ses/@aws-sdk/types": ["@aws-sdk/types@3.973.9", "", { "dependencies": { "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-kuBfgQVdcz5Bmapc4A13YbpVw/pXkesfhetcFYwbntqas8sF41OHyd4o28+/TG2ZQdHBsv90Lsu5y6oitvYCdg=="], + "bullmq/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - "@aws-sdk/client-ses/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "bun-types/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@aws-sdk/client-ses/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], + "c12/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], - "@aws-sdk/client-ses/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], + "c12/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], - "@aws-sdk/client-ses/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "c8/@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], - "@aws-sdk/core/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], + "cacache/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "@aws-sdk/core/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "cacache/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@aws-sdk/core/@smithy/signature-v4": ["@smithy/signature-v4@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-53+75QuPl6DL+ct6vVEB51FDO5oulXr20TPV46VvJZg76lIlXNWfxi8j+G2V/t0I2qxCBOa3vX/8bmjrpFVo9g=="], + "cacache/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - "@aws-sdk/core/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], + "chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "@aws-sdk/crc64-nvme/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], - "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], + "chevrotain/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], - "@aws-sdk/credential-provider-cognito-identity/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "chevrotain/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "@aws-sdk/credential-provider-cognito-identity/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "@aws-sdk/credential-provider-ini/@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.24", "@aws-sdk/nested-clients": "^3.996.14", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-sIk8oa6AzDoUhxsR11svZESqvzGuXesw62Rl2oW6wguZx8i9cdGCvkFg+h5K7iucUZP8wyWibUbJMc+J66cu5g=="], + "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@aws-sdk/credential-provider-login/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], + "concat-with-sourcemaps/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "@aws-sdk/credential-provider-login/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "cosmiconfig/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], - "@aws-sdk/credential-provider-login/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "cosmiconfig/yaml": ["yaml@1.10.3", "", {}, "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q=="], + "css-tree/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg=="], + "cssnano/lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-login": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w=="], + "cssnano/yaml": ["yaml@1.10.3", "", {}, "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.42", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-ini": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ=="], + "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg=="], + "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/token-providers": "3.1048.0", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ=="], + "d3-dsv/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A=="], + "d3-sankey/d3-array": ["d3-array@2.12.1", "", { "dependencies": { "internmap": "^1.0.0" } }, "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ=="], - "@aws-sdk/credential-providers/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], + "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], - "@aws-sdk/credential-providers/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "dir-glob/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], - "@aws-sdk/credential-providers/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.3.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w=="], + "dom-serializer/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - "@aws-sdk/credential-providers/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], + "domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], - "@aws-sdk/dynamodb-codec/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "dprint-node/detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], - "@aws-sdk/dynamodb-codec/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "dts-bundle-generator/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "@aws-sdk/middleware-bucket-endpoint/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], - "@aws-sdk/middleware-bucket-endpoint/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.10", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w=="], + "eslint/ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], - "@aws-sdk/middleware-bucket-endpoint/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], + "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "@aws-sdk/middleware-bucket-endpoint/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@aws-sdk/middleware-bucket-endpoint/@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A=="], + "eslint/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "@aws-sdk/middleware-endpoint-discovery/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], + "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - "@aws-sdk/middleware-endpoint-discovery/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "@aws-sdk/middleware-endpoint-discovery/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "@aws-sdk/middleware-expect-continue/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "filelist/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], - "@aws-sdk/middleware-expect-continue/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], + "find-cache-dir/make-dir": ["make-dir@3.1.0", "", { "dependencies": { "semver": "^6.0.0" } }, "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="], - "@aws-sdk/middleware-expect-continue/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "flat-cache/flatted": ["flatted@3.3.4", "", {}, "sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA=="], - "@aws-sdk/middleware-flexible-checksums/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.10", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w=="], + "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], + "formik/react-fast-compare": ["react-fast-compare@2.0.4", "", {}, "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-middleware": ["@smithy/util-middleware@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA=="], + "function-bay/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream": ["@smithy/util-stream@4.5.16", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.12", "@smithy/node-http-handler": "^4.4.13", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-c7awZV6cxY0czgDDSr+Bz0XfRtg8AwW2BWhrHhLJISrpmwv8QzA2qzTllWyMVNdy1+UJr9vCm29hzuh3l8TTFw=="], + "function-bay/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], + "gauge/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@aws-sdk/middleware-location-constraint/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "gaxios/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "@aws-sdk/middleware-location-constraint/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - "@aws-sdk/middleware-sdk-s3/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "@aws-sdk/middleware-sdk-s3/@smithy/core": ["@smithy/core@3.23.7", "", { "dependencies": { "@smithy/middleware-serde": "^4.2.11", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-stream": "^4.5.16", "@smithy/util-utf8": "^4.2.1", "@smithy/uuid": "^1.1.1", "tslib": "^2.6.2" } }, "sha512-/+ldRdtiO5Cb26afAZOG1FZM0x7D4AYdjpyOv2OScJw+4C7X+OLdRnNKF5UyUE0VpPgSKr3rnF/kvprRA4h2kg=="], + "globby/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.10", "", { "dependencies": { "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w=="], + "googleapis-common/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - "@aws-sdk/middleware-sdk-s3/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], + "gzip-size/duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="], - "@aws-sdk/middleware-sdk-s3/@smithy/signature-v4": ["@smithy/signature-v4@5.3.10", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-uri-escape": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA=="], + "handlebars/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client": ["@smithy/smithy-client@4.12.1", "", { "dependencies": { "@smithy/core": "^3.23.7", "@smithy/middleware-endpoint": "^4.4.21", "@smithy/middleware-stack": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.16", "tslib": "^2.6.2" } }, "sha512-Xf9UFHlAihewfkmLNZ6I/Ek6kcYBKoU3cbRS9Z4q++9GWoW0YFbAHs7wMbuXm+nGuKHZ5OKheZMuDdaWPv8DJw=="], + "has-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], - "@aws-sdk/middleware-sdk-s3/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "html-to-text/deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A=="], + "htmlparser2/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-middleware": ["@smithy/util-middleware@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA=="], + "htmlparser2/domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream": ["@smithy/util-stream@4.5.16", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.12", "@smithy/node-http-handler": "^4.4.13", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-c7awZV6cxY0czgDDSr+Bz0XfRtg8AwW2BWhrHhLJISrpmwv8QzA2qzTllWyMVNdy1+UJr9vCm29hzuh3l8TTFw=="], + "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], + "is-inside-container/is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], - "@aws-sdk/middleware-ssec/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "@aws-sdk/middleware-ssec/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "jest-worker/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@aws-sdk/nested-clients/@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.27", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/signature-v4": "^5.4.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-0Phbz4t6HI3D3skxvG2uI+VWU034/nSIw1T8d+FPzzQG9EQTrw94o9mOKO2Gv3n3Oc8P7JD7RAUxkoneLWv5Eg=="], + "jest-worker/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "@aws-sdk/nested-clients/@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], + "jsonwebtoken/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@aws-sdk/nested-clients/@smithy/core": ["@smithy/core@3.24.3", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg=="], + "just-bash/diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], - "@aws-sdk/nested-clients/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], + "load-json-file/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], - "@aws-sdk/nested-clients/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], + "load-json-file/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], - "@aws-sdk/nested-clients/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], + "log-symbols/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "@aws-sdk/signature-v4-multi-region/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], + "log-symbols/is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], - "@aws-sdk/signature-v4-multi-region/@smithy/protocol-http": ["@smithy/protocol-http@5.3.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A=="], + "loose-envify/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4": ["@smithy/signature-v4@5.3.10", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.1", "@smithy/util-middleware": "^4.2.10", "@smithy/util-uri-escape": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA=="], + "make-dir/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@aws-sdk/signature-v4-multi-region/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "make-fetch-happen/http-proxy-agent": ["http-proxy-agent@4.0.1", "", { "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } }, "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="], - "@aws-sdk/xml-builder/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "make-fetch-happen/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], - "@aws-sdk/xml-builder/fast-xml-parser": ["fast-xml-parser@5.7.3", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.1.7", "path-expression-matcher": "^1.5.0", "strnum": "^2.2.3" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg=="], + "make-fetch-happen/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "@azure/identity/open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], + "make-fetch-happen/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@azure/msal-node/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + "make-fetch-happen/negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], - "@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "markdown-it/linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], - "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "markdown-it/uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], - "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + "maxmin/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="], - "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "maxmin/gzip-size": ["gzip-size@3.0.0", "", { "dependencies": { "duplexer": "^0.1.1" } }, "sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w=="], - "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "maxmin/pretty-bytes": ["pretty-bytes@3.0.1", "", { "dependencies": { "number-is-nan": "^1.0.0" } }, "sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow=="], - "@babel/helper-create-regexp-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - "@babel/plugin-transform-runtime/babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.13.0", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A=="], + "mdast-util-frontmatter/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - "@babel/plugin-transform-runtime/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "memfs/@types/node": ["@types/node@20.19.39", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw=="], - "@babel/preset-env/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "memfs/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], - "@boxyhq/metrics/@grpc/grpc-js": ["@grpc/grpc-js@1.12.6", "", { "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q=="], + "memfs/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "@boxyhq/metrics/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], + "mermaid/marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], - "@boxyhq/metrics/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.29.0", "", {}, "sha512-KZ1JsXcP2pqunfsJBNk+py6AJ5R6ZJ3yvM5Lhhf93rHPHvdDzgfMYPS4F7GNO3j/MVDCtfbttrkcpu7sl0Wu/Q=="], + "microbundle/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], - "@boxyhq/saml-jackson/axios": ["axios@1.9.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg=="], + "microbundle/typescript": ["typescript@4.9.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="], - "@boxyhq/saml-jackson/ipaddr.js": ["ipaddr.js@2.2.0", "", {}, "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="], + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@boxyhq/saml-jackson/jose": ["jose@6.0.11", "", {}, "sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg=="], + "minipass-collect/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@boxyhq/saml-jackson/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "minipass-fetch/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@boxyhq/saml-jackson/mysql2": ["mysql2@3.14.1", "", { "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.6.3", "long": "^5.2.1", "lru.min": "^1.0.0", "named-placeholders": "^1.1.3", "seq-queue": "^0.0.5", "sqlstring": "^2.3.2" } }, "sha512-7ytuPQJjQB8TNAYX/H2yhL+iQOnIBjAMam361R7UAL0lOVXWjtdrmoL9HYKqKoLp/8UUTRcvo1QPvK9KL7wA8w=="], + "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@boxyhq/saml-jackson/pg": ["pg@8.16.0", "", { "dependencies": { "pg-connection-string": "^2.9.0", "pg-pool": "^3.10.0", "pg-protocol": "^1.10.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.2.5" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg=="], + "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@boxyhq/saml-jackson/redis": ["redis@4.7.0", "", { "dependencies": { "@redis/bloom": "1.2.0", "@redis/client": "1.6.0", "@redis/graph": "1.1.1", "@redis/json": "1.0.7", "@redis/search": "1.2.0", "@redis/time-series": "1.1.0" } }, "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ=="], + "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@chevrotain/cst-dts-gen/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], + "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@chevrotain/cst-dts-gen/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "mixpanel/https-proxy-agent": ["https-proxy-agent@5.0.0", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA=="], - "@chevrotain/gast/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], + "mkdirp/minimist": ["minimist@0.0.8", "", {}, "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q=="], - "@chevrotain/gast/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "mocha/commander": ["commander@2.15.1", "", {}, "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="], - "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "mocha/debug": ["debug@3.1.0", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g=="], - "@eslint/config-array/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "mocha/diff": ["diff@3.5.0", "", {}, "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="], - "@eslint/eslintrc/ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], + "mocha/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "@eslint/eslintrc/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "mocha/glob": ["glob@7.1.2", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ=="], - "@eslint/eslintrc/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "mocha/he": ["he@1.1.1", "", { "bin": { "he": "bin/he" } }, "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA=="], - "@function-bay/build/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "mocha/minimatch": ["minimatch@3.0.4", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="], - "@function-bay/nodejs/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "mocha/supports-color": ["supports-color@5.4.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w=="], - "@function-bay/nodejs/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "mongodb-connection-string-url/whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], - "@function-bay/types/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "mongoose/mongodb": ["mongodb@7.1.1", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^7.1.1", "mongodb-connection-string-url": "^7.0.0" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.806.0", "@mongodb-js/zstd": "^7.0.0", "gcp-metadata": "^7.0.1", "kerberos": "^7.0.0", "mongodb-client-encryption": ">=7.0.0 <7.1.0", "snappy": "^7.3.2", "socks": "^2.8.6" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-067DXiMjcpYQl6bGjWQoTUEE9UoRViTtKFcoqX7z08I+iDZv/emH1g8XEFiO3qiDfXAheT5ozl1VffDTKhIW/w=="], - "@function-bay/types/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "mssql/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], - "@function-bay/utils/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "node-abi/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@function-bay/utils/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - "@inquirer/core/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "node-gyp/nopt": ["nopt@5.0.0", "", { "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="], - "@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "node-gyp/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + "node-liblzma/node-addon-api": ["node-addon-api@8.7.0", "", {}, "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA=="], - "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + "normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "@lowerdeck/api-mux/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], + "npm-run-all/cross-spawn": ["cross-spawn@6.0.6", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw=="], - "@lowerdeck/id/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], + "npm-run-all/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "@lowerdeck/lock/@types/bun": ["@types/bun@1.3.12", "", { "dependencies": { "bun-types": "1.3.12" } }, "sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A=="], + "nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], - "@lowerdeck/sentry/@sentry/core": ["@sentry/core@10.42.0", "", {}, "sha512-L4rMrXMqUKBanpjpMT+TuAVk6xAijz6AWM6RiEYpohAr7SGcCEc1/T0+Ep1eLV8+pwWacfU27OvELIyNeOnGzA=="], + "openid-client/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], - "@lowerdeck/telemetry/@lowerdeck/execution-context": ["@lowerdeck/execution-context@1.1.0", "", { "dependencies": { "@lowerdeck/id": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "@opentelemetry/api": "^1.9.0" } }, "sha512-3aAgx6fiUF7Tduq1WR+GqGXZYaHhoM502/uwqQKtTOXsB6nyOp1NhOLHoU+ZZvZZflQ9ddpMwTCicjvQnmhXeA=="], + "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "@lowerdeck/tokens/@lowerdeck/memo": ["@lowerdeck/memo@1.0.0", "", {}, "sha512-c6CX2t9VcbGxBi5fi4iyL+eJx6FwmMYklpvnKbMS0GywtzJNnXPQorc8R05dl/WqXSH1oEwSl8Hbe4jG0iruJg=="], + "ora/log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], - "@mapbox/node-pre-gyp/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "ora/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "@mapbox/node-pre-gyp/tar": ["tar@7.5.13", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng=="], + "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - "@metorial-cargo/service/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - "@metorial-io/data-hooks/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], + "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], - "@metorial-io/data-hooks/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "@metorial-io/layout/react-router-dom": ["react-router-dom@7.13.2", "", { "dependencies": { "react-router": "7.13.2" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-aR7SUORwTqAW0JDeiWF07e9SBE9qGpByR9I8kJT5h/FrBKxPMS6TiC7rmVO+gC0q52Bx7JnjWe8Z1sR9faN4YA=="], + "path-type/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], - "@metorial-io/ui-product/react-router-dom": ["react-router-dom@7.13.2", "", { "dependencies": { "react-router": "7.13.2" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-aR7SUORwTqAW0JDeiWF07e9SBE9qGpByR9I8kJT5h/FrBKxPMS6TiC7rmVO+gC0q52Bx7JnjWe8Z1sR9faN4YA=="], + "pg-types/postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], - "@metorial-platform-systems/ares-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "pkg-dir/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], - "@metorial-platform-systems/ares-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - "@metorial-platform-systems/cargo-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "@metorial-platform-systems/cargo-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "postcss-calc/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - "@metorial-platform-systems/forge-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "postcss-merge-rules/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - "@metorial-platform-systems/forge-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "postcss-minify-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - "@metorial-platform-systems/function-bay-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "postcss-unique-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - "@metorial-platform-systems/function-bay-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], - "@metorial-platform-systems/object-storage-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], - "@metorial-platform-systems/object-storage-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "prisma-json-types-generator/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@metorial-platform-systems/origin-client/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "prosemirror-markdown/@types/markdown-it": ["@types/markdown-it@14.1.2", "", { "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" } }, "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog=="], - "@metorial-platform-systems/origin-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "protobufjs/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@metorial-platform-systems/origin-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - "@metorial-platform-systems/relay-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "randombytes/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "@metorial-platform-systems/relay-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "rc/ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], - "@metorial-platform-systems/shuttle-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], - "@metorial-platform-systems/shuttle-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "@metorial-platform-systems/signal-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], - "@metorial-platform-systems/signal-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "@metorial-platform-systems/slates-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "rollup-plugin-bundle-size/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="], - "@metorial-platform-systems/slates-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "rollup-plugin-postcss/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "@metorial-platform-systems/subspace-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "rollup-plugin-postcss/p-queue": ["p-queue@6.6.2", "", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], - "@metorial-platform-systems/subspace-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "rollup-plugin-postcss/postcss-load-config": ["postcss-load-config@3.1.4", "", { "dependencies": { "lilconfig": "^2.0.5", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg=="], - "@metorial-platform-systems/synthesis-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "rollup-plugin-terser/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], - "@metorial-platform-systems/synthesis-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "rollup-plugin-typescript2/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], - "@metorial-platform-systems/voyager-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "rollup-pluginutils/estree-walker": ["estree-walker@0.6.1", "", {}, "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="], - "@metorial-platform-systems/voyager-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "safe-array-concat/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "@metorial-services/registry-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], + "safe-push-apply/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "@metorial-services/registry-client/@lowerdeck/rpc-server": ["@lowerdeck/rpc-server@1.0.10", "", { "dependencies": { "@lowerdeck/error": "^1.2.2", "@lowerdeck/execution-context": "^1.0.4", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/sentry": "^1.0.2", "@lowerdeck/serialize": "^1.0.4", "@lowerdeck/telemetry": "^1.0.1", "@lowerdeck/validation": "^1.0.8", "cookie": "^1.1.1" } }, "sha512-nitrDjYoYOal/W1djpaQ7EiDsvFokyUGPBXPyHzLqSrKDAqi22Tpb/nPAgGnEokxMbu6Fl9KhLlhIXABkYYvUg=="], + "seek-bzip/commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], - "@metorial-services/registry-client/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + "short-uuid/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - "@metorial-services/scout-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], + "socks-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], - "@metorial-services/slates-registry-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "@metorial-services/slates-registry-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "ssri/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "@metorial-services/slates-registry-internal-client/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "stacktrace-gps/source-map": ["source-map@0.5.6", "", {}, "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA=="], - "@metorial-services/slates-registry-internal-client/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@metorial-subspace/app-controller/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], + "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@metorial-subspace/conduit/vitest": ["vitest@2.1.9", "", { "dependencies": { "@vitest/expect": "2.1.9", "@vitest/mocker": "2.1.9", "@vitest/pretty-format": "^2.1.9", "@vitest/runner": "2.1.9", "@vitest/snapshot": "2.1.9", "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", "vite-node": "2.1.9", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "2.1.9", "@vitest/ui": "2.1.9", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q=="], + "string_decoder/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "@metorial-subspace/list-utils/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@metorial-subspace/module-agent/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "styled-components/postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="], - "@metorial-subspace/module-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "stylehacks/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - "@metorial-subspace/module-callback/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], - "@metorial-subspace/module-catalog/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "svgo/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - "@metorial-subspace/module-connection/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], - "@metorial-subspace/module-custom-provider/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "tar/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - "@metorial-subspace/module-deployment/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], - "@metorial-subspace/module-identity/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "tar-fs/tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], - "@metorial-subspace/module-integration/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "tedious/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@metorial-subspace/module-provider-internal/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "tedious/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], - "@metorial-subspace/module-session/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - "@metorial-subspace/module-session/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "test-exclude/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "@metorial-subspace/module-skills/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "to-buffer/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "@metorial-subspace/module-tenant/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "tsup/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - "@metorial/api-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "tsup/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/api-core/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "typeorm/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], - "@metorial/api-custom-portal/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "typeorm/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], - "@metorial/api-files/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "typeorm/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - "@metorial/api-keys/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "unplugin/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "@metorial/api-oauth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], - "@metorial/app-api/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "vite-plugin-html/consola": ["consola@2.15.3", "", {}, "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw=="], - "@metorial/app-dashboard/@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.1", "", { "dependencies": { "@babel/core": "^7.24.5", "@babel/plugin-transform-react-jsx-self": "^7.24.5", "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0" } }, "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg=="], + "vite-plugin-html/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], - "@metorial/app-dashboard/date-fns": ["date-fns@3.6.0", "", {}, "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="], + "vite-plugin-html/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], - "@metorial/app-dashboard/framer-motion": ["framer-motion@11.18.2", "", { "dependencies": { "motion-dom": "^11.18.1", "motion-utils": "^11.18.1", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w=="], + "vite-plugin-html/pathe": ["pathe@0.2.0", "", {}, "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw=="], - "@metorial/app-dashboard/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], - "@metorial/ares/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "vscode/http-proxy-agent": ["http-proxy-agent@4.0.1", "", { "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } }, "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="], - "@metorial/ares/@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.1", "", { "dependencies": { "@babel/core": "^7.24.5", "@babel/plugin-transform-react-jsx-self": "^7.24.5", "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0" } }, "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg=="], + "vscode/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], - "@metorial/auth/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "vscode/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "@metorial/auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "vscode-test/http-proxy-agent": ["http-proxy-agent@2.1.0", "", { "dependencies": { "agent-base": "4", "debug": "3.1.0" } }, "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg=="], - "@metorial/bearer/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "vscode-test/https-proxy-agent": ["https-proxy-agent@2.2.4", "", { "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" } }, "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg=="], - "@metorial/cache/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "@metorial/chart/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "@metorial/code/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@metorial/code-editor/tsup": ["tsup@7.3.0", "", { "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", "esbuild": "^0.19.2", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^4.0.1", "resolve-from": "^5.0.0", "rollup": "^4.0.2", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ=="], + "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "@metorial/code-editor/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@metorial/code-editor/vitest": ["vitest@0.34.6", "", { "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", "@vitest/expect": "0.34.6", "@vitest/runner": "0.34.6", "@vitest/snapshot": "0.34.6", "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", "jsdom": "*", "playwright": "*", "safaridriver": "*", "webdriverio": "*" }, "optionalPeers": ["@edge-runtime/vm", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom", "playwright", "safaridriver", "webdriverio"], "bin": { "vitest": "vitest.mjs" } }, "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q=="], + "wsl-utils/is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], - "@metorial/code-workspace/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "xml-crypto/@xmldom/xmldom": ["@xmldom/xmldom@0.8.12", "", {}, "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg=="], - "@metorial/code-workspace/typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + "xml-encryption/@xmldom/xmldom": ["@xmldom/xmldom@0.8.12", "", {}, "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg=="], - "@metorial/config/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "xml-encryption/xpath": ["xpath@0.0.32", "", {}, "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw=="], - "@metorial/config/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "xml2js/xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], - "@metorial/consumer-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "yargs-unparser/is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], - "@metorial/consumer-sdk/tsup": ["tsup@7.3.0", "", { "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", "esbuild": "^0.19.2", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^4.0.1", "resolve-from": "^5.0.0", "rollup": "^4.0.2", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ=="], + "@aws-crypto/crc32/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "@metorial/consumer-sdk/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-crypto/crc32c/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "@metorial/consumer-sdk/vitest": ["vitest@0.34.6", "", { "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", "@vitest/expect": "0.34.6", "@vitest/runner": "0.34.6", "@vitest/snapshot": "0.34.6", "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", "jsdom": "*", "playwright": "*", "safaridriver": "*", "webdriverio": "*" }, "optionalPeers": ["@edge-runtime/vm", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom", "playwright", "safaridriver", "webdriverio"], "bin": { "vitest": "vitest.mjs" } }, "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q=="], + "@aws-crypto/sha1-browser/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "@metorial/context/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - "@metorial/cron/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-crypto/sha256-browser/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "@metorial/dashboard-sdk/tsup": ["tsup@7.3.0", "", { "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", "esbuild": "^0.19.2", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^4.0.1", "resolve-from": "^5.0.0", "rollup": "^4.0.2", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ=="], + "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - "@metorial/dashboard-sdk/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-crypto/sha256-js/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "@metorial/dashboard-sdk/vitest": ["vitest@0.34.6", "", { "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", "@vitest/expect": "0.34.6", "@vitest/runner": "0.34.6", "@vitest/snapshot": "0.34.6", "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", "jsdom": "*", "playwright": "*", "safaridriver": "*", "webdriverio": "*" }, "optionalPeers": ["@edge-runtime/vm", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom", "playwright", "safaridriver", "webdriverio"], "bin": { "vitest": "vitest.mjs" } }, "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q=="], + "@aws-crypto/util/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], - "@metorial/data-hooks/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - "@metorial/db/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.25", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-6QfI0wv4jpG5CrdO/AO0JfZ2ux+tKwJPrUwmvxXF50vI5KIypKVGNF6b4vlkYEnKumDTI1NX2zUBi8JoU5QU3A=="], - "@metorial/db/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.27", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@smithy/fetch-http-handler": "^5.3.16", "@smithy/node-http-handler": "^4.5.2", "@smithy/property-provider": "^4.2.13", "@smithy/protocol-http": "^5.3.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" } }, "sha512-3V3Usj9Gs93h865DqN4M2NWJhC5kXU9BvZskfN3+69omuYlE3TZxOEcVQtBGLOloJB7BVfJKXVLqeNhOzHqSlQ=="], - "@metorial/db/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/credential-provider-env": "^3.972.25", "@aws-sdk/credential-provider-http": "^3.972.27", "@aws-sdk/credential-provider-login": "^3.972.29", "@aws-sdk/credential-provider-process": "^3.972.25", "@aws-sdk/credential-provider-sso": "^3.972.29", "@aws-sdk/credential-provider-web-identity": "^3.972.29", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/types": "^3.973.7", "@smithy/credential-provider-imds": "^4.2.13", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-SiBuAnXecCbT/OpAf3vqyI/AVE3mTaYr9ShXLybxZiPLBiPCCOIWSGAtYYGQWMRvobBTiqOewaB+wcgMMZI2Aw=="], - "@metorial/debug/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.25", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-HR7ynNRdNhNsdVCOCegy1HsfsRzozCOPtD3RzzT1JouuaHobWyRfJzCBue/3jP7gECHt+kQyZUvwg/cYLWurNQ=="], - "@metorial/debug/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/token-providers": "3.1026.0", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-HWv4SEq3jZDYPlwryZVef97+U8CxxRos5mK8sgGO1dQaFZpV5giZLzqGE5hkDmh2csYcBO2uf5XHjPTpZcJlig=="], - "@metorial/dynamic-component/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-PdMBza1WEKEUPFEmMGCfnU2RYCz9MskU2e8JxjyUOsMKku7j9YaDKvbDi2dzC0ihFoM6ods2SbhfAAro+Gwlew=="], - "@metorial/dynamic-component/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.13", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/property-provider": "^4.2.13", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-wboCPijzf6RJKLOvnjDAiBxGSmSnGXj35o5ZAWKDaHa/cvQ5U3ZJ13D4tMCE8JG4dxVAZFy/P0x/V9CwwdfULQ=="], - "@metorial/event/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@smithy/property-provider": ["@smithy/property-provider@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ=="], - "@metorial/event/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.8", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw=="], - "@metorial/explorer/@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.1", "", { "dependencies": { "@babel/core": "^7.24.5", "@babel/plugin-transform-react-jsx-self": "^7.24.5", "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0" } }, "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg=="], + "@aws-sdk/client-codebuild/@smithy/core/@smithy/util-stream": ["@smithy/util-stream@4.5.22", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.16", "@smithy/node-http-handler": "^4.5.2", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-3H8iq/0BfQjUs2/4fbHZ9aG9yNzcuZs24LPkcX1Q7Z+qpqaGM8+qbGmE8zo9m2nCRgamyvS98cHdcWvR6YUsew=="], - "@metorial/explorer/react": ["react@19.1.1", "", {}, "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ=="], + "@aws-sdk/client-codebuild/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-tG4aOYFCZdPMjbgfhnIQ322H//ojujldp1SrHPHpBSb3NqgUp3dwiUGRJzie87hS1DYwWGqDuPaowoDF+rYCbQ=="], - "@metorial/explorer/react-dom": ["react-dom@19.1.1", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.1" } }, "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw=="], + "@aws-sdk/client-codebuild/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.8", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw=="], - "@metorial/explorer/react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], + "@aws-sdk/client-codebuild/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0" } }, "sha512-a0s8XZMfOC/qpqq7RCPvJlk93rWFrElH6O++8WJKz0FqnA4Y7fkNi/0mnGgSH1C4x6MFsuBA8VKu4zxFrMe5Vw=="], - "@metorial/explorer/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-sdk/client-codebuild/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ=="], - "@metorial/fabric/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-codebuild/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.8", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw=="], - "@metorial/frontend-config/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-codebuild/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-tG4aOYFCZdPMjbgfhnIQ322H//ojujldp1SrHPHpBSb3NqgUp3dwiUGRJzie87hS1DYwWGqDuPaowoDF+rYCbQ=="], - "@metorial/function-bay/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "@aws-sdk/client-codebuild/@smithy/smithy-client/@smithy/util-stream": ["@smithy/util-stream@4.5.22", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.16", "@smithy/node-http-handler": "^4.5.2", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-3H8iq/0BfQjUs2/4fbHZ9aG9yNzcuZs24LPkcX1Q7Z+qpqaGM8+qbGmE8zo9m2nCRgamyvS98cHdcWvR6YUsew=="], - "@metorial/generated/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], + "@aws-sdk/client-codebuild/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-hqW3Q4P+CDzUyQ87GrboGMeD7XYNMOF+CuTwu936UQRB/zeYn3jys8C3w+wMkDfY7CyyyVwZQ5cNFoG0x1pYmA=="], - "@metorial/id/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-browser/@smithy/property-provider": ["@smithy/property-provider@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ=="], - "@metorial/id/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.13", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/property-provider": "^4.2.13", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-wboCPijzf6RJKLOvnjDAiBxGSmSnGXj35o5ZAWKDaHa/cvQ5U3ZJ13D4tMCE8JG4dxVAZFy/P0x/V9CwwdfULQ=="], - "@metorial/internal-clients/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-node/@smithy/property-provider": ["@smithy/property-provider@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ=="], - "@metorial/layout/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-codebuild/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0" } }, "sha512-a0s8XZMfOC/qpqq7RCPvJlk93rWFrElH6O++8WJKz0FqnA4Y7fkNi/0mnGgSH1C4x6MFsuBA8VKu4zxFrMe5Vw=="], - "@metorial/lock/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q=="], - "@metorial/logging/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg=="], - "@metorial/markdown/react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-login": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w=="], - "@metorial/markdown/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg=="], - "@metorial/mcp/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/token-providers": "3.1048.0", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ=="], - "@metorial/mcp/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A=="], - "@metorial/mcp-server/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.3.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w=="], - "@metorial/mcp-server/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@metorial/mcp-transport-memory/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-sdk/client-cognito-identity/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@metorial/mcp-transport-memory/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-cognito-identity/@smithy/fetch-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@metorial/mcp-utils/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-cognito-identity/@smithy/node-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@metorial/microfrontend/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q=="], - "@metorial/microfrontend/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg=="], - "@metorial/module-access/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-login": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w=="], - "@metorial/module-assistant/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg=="], - "@metorial/module-community/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/token-providers": "3.1048.0", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ=="], - "@metorial/module-consumer/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A=="], - "@metorial/module-email/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.3.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w=="], - "@metorial/module-event/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@metorial/module-file/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@metorial/module-flags/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@smithy/fetch-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@metorial/module-machine-access/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-dynamodb/@smithy/node-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@metorial/module-magic/mongoose": ["mongoose@8.23.0", "", { "dependencies": { "bson": "^6.10.4", "kareem": "2.6.3", "mongodb": "~6.20.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.32", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-7vA4GHg8NSmQxquJHSBcSM3RgB4ZaaRi6u4+zGFKOmOH6aqlgr2Sda46clkZDYzlirgfY96w15Zj0jh6PT48ng=="], - "@metorial/module-magic/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.34", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.6.1", "@smithy/property-provider": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" } }, "sha512-vBrhWujFCLp1u8ptJRWYlipMutzPptb8pDQ00rKVH9q67T7rGd3VTWIj63aKrlLuY6qSsw1Rt5F/D/7wnNgryA=="], - "@metorial/module-markdown/mongoose": ["mongoose@8.23.0", "", { "dependencies": { "bson": "^6.10.4", "kareem": "2.6.3", "mongodb": "~6.20.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-env": "^3.972.32", "@aws-sdk/credential-provider-http": "^3.972.34", "@aws-sdk/credential-provider-login": "^3.972.36", "@aws-sdk/credential-provider-process": "^3.972.32", "@aws-sdk/credential-provider-sso": "^3.972.36", "@aws-sdk/credential-provider-web-identity": "^3.972.36", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-FBHyCmV8EB0gUvh1d+CZm87zt2PrdC7OyWexLRoH3I5zWSOUGa+9t58Y5jbxRfwUp3AWpHAFvKY6YzgR845sVA=="], - "@metorial/module-markdown/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.32", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-uZp4tlGbpczV8QxmtIwOpSkcyGtBRR8/T4BAumRKfAt1nwCig3FSCZvrKl6ARDIDVRYn5p2oRcAsfFR01EgMGA=="], - "@metorial/module-organization/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/token-providers": "3.1038.0", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-DsLr0UHMyKzRJKe2bjlwU8q1cfoXg8TIJKV/xwvnalAemiZLOZunFzj/whGnFDZIBVLdnbLiwv5SvRf1+CSwkg=="], - "@metorial/module-protect/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-uzrURO7frJhHQVVNR5zBJcCYeMYflmXcWBK1+MiBym2Dfjh6nXATrMixrmGZi+97Q7ETZ+y/4lUwAy0Nfnznjw=="], - "@metorial/module-search/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.14", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg=="], - "@metorial/module-subspace/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@smithy/property-provider": ["@smithy/property-provider@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ=="], - "@metorial/module-usage/mongoose": ["mongoose@8.23.0", "", { "dependencies": { "bson": "^6.10.4", "kareem": "2.6.3", "mongodb": "~6.20.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "17.1.3" } }, "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug=="], + "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.9", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ=="], - "@metorial/module-usage/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@smithy/core/@smithy/util-stream": ["@smithy/util-stream@4.5.25", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.6.1", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA=="], - "@metorial/module-user/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A=="], - "@metorial/multi-region/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], + "@aws-sdk/client-kms/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.9", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ=="], - "@metorial/multi-region/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-sdk/client-kms/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.3.1", "", { "dependencies": { "@smithy/types": "^4.14.1" } }, "sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw=="], - "@metorial/origin/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@aws-sdk/client-kms/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ=="], - "@metorial/pages/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.9", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ=="], - "@metorial/presenter/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A=="], - "@metorial/queue/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@smithy/smithy-client/@smithy/util-stream": ["@smithy/util-stream@4.5.25", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.6.1", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA=="], - "@metorial/redis/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@aws-sdk/client-kms/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw=="], - "@metorial/redis/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@smithy/util-defaults-mode-browser/@smithy/property-provider": ["@smithy/property-provider@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ=="], - "@metorial/relay/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@aws-sdk/client-kms/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.14", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg=="], - "@metorial/rest/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@smithy/util-defaults-mode-node/@smithy/property-provider": ["@smithy/property-provider@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ=="], - "@metorial/rpc/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-kms/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.3.1", "", { "dependencies": { "@smithy/types": "^4.14.1" } }, "sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw=="], - "@metorial/scene-assistant/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-PvnBY9rwBuLh9MEsAng28DG+WKl+txerKgf4BU9IPAqYI7FBIo1x6q/utLf4KLyQYgSy1TLQnbQuXx5xfBGASg=="], - "@metorial/scene-docs/@tiptap/extension-highlight": ["@tiptap/extension-highlight@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-sNzwL0OZRpxAef9LE4SS3AbNyMBsxyGw3MJF34+Bdcu2VpaqoM3XFn664cD7iAsyTJI9eY0eLhZTMcKsdAlBaw=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.16", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@smithy/fetch-http-handler": "^5.3.12", "@smithy/node-http-handler": "^4.4.13", "@smithy/property-provider": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.16", "tslib": "^2.6.2" } }, "sha512-m/QAcvw5OahqGPjeAnKtgfWgjLxeWOYj7JSmxKK6PLyKp2S/t2TAHI6EELEzXnIz28RMgbQLukJkVAqPASVAGQ=="], - "@metorial/scene-docs/@tiptap/extension-image": ["@tiptap/extension-image@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-3ze2Et/p9YwQ34RkX8cIuClNiGup0/OfTy22GtjGPMpRPTSt8LTwz9vUEmENCdwfFYidyNSoh2rXA1gXKRfNFQ=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/credential-provider-env": "^3.972.14", "@aws-sdk/credential-provider-http": "^3.972.16", "@aws-sdk/credential-provider-login": "^3.972.14", "@aws-sdk/credential-provider-process": "^3.972.14", "@aws-sdk/credential-provider-sso": "^3.972.14", "@aws-sdk/credential-provider-web-identity": "^3.972.14", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@smithy/credential-provider-imds": "^4.2.10", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-EGA7ufqNpZKZcD0RwM6gRDEQgwAf19wQ99R1ptdWYDJAnpcMcWiFyT0RIrgiZFLD28CwJmYjnra75hChnEveWA=="], - "@metorial/scene-docs/@tiptap/extension-placeholder": ["@tiptap/extension-placeholder@3.6.1", "", { "peerDependencies": { "@tiptap/extensions": "^3.6.1" } }, "sha512-AhNI+75OqoJKtt5SChzacbPco9jnfV9rkHCF4yVenlK0Z3IQ/iOgAjLUbYqveXzNmLdhyt7lZn3yaCPXwCldJA=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-KAF5LBkJInUPaR9dJDw8LqmbPDRTLyXyRoWVGcJQ+DcN9rxVKBRzAK+O4dTIvQtQ7xaIDZ2kY7zUmDlz6CCXdw=="], - "@metorial/scene-docs/@tiptap/extension-subscript": ["@tiptap/extension-subscript@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-GxJB9+JQq+x1Z+ykn1pm3G3M73gXZfhqzraI47jYinqOftv/DHZ6sPxgQJFVInlAseMD5KdqWmJ7YlXWVJisRQ=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/token-providers": "3.1001.0", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LQzIYrNABnZzkyuIguFa3VVOox9UxPpRW6PL+QYtRHaGl1Ux/+Zi54tAVK31VdeBKPKU3cxqeu8dbOgNqy+naw=="], - "@metorial/scene-docs/@tiptap/extension-superscript": ["@tiptap/extension-superscript@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-Zwpr+5alDail0GAe+u1TWVbprpJcRLbHpDZq1fro3ea3KdtQjr8TcXPBVRvJ+66URahAT2BxKTQ5esruKj2cBQ=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-rOwB3vXHHHnGvAOjTgQETxVAsWjgF61XlbGd/ulvYo7EpdXs8cbIHE3PGih9tTj/65ZOegSqZGFqLaKntaI9Kw=="], - "@metorial/scene-docs/@tiptap/extension-text-align": ["@tiptap/extension-text-align@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-zegYnbKAPGV5FcPWefucBWfirbROSLl52qkl6+5okHDyeGOKBmo1FPZieikopK+kTmwgzRQZUyCejybQQuW2ZA=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.10", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/property-provider": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-3bsMLJJLTZGZqVGGeBVFfLzuRulVsGTj12BzRKODTHqUABpIr0jMN1vN3+u6r2OfyhAQ2pXaMZWX/swBK5I6PQ=="], - "@metorial/scene-docs/@tiptap/extension-typography": ["@tiptap/extension-typography@3.6.1", "", { "peerDependencies": { "@tiptap/core": "^3.6.1" } }, "sha512-zAL3uO5A2/3raoApI0YYHE+HbK1cx92gfakUREDfzWG45M6C+D7TCIX320qvqUhzjVWK+qrFaWQddAX5w8VQJA=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], - "@metorial/scene-docs/@tiptap/pm": ["@tiptap/pm@3.6.1", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.24.1", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-4F3qKhLQYlHGfayO0dQD3hiX3VeSCkdoKQQ+gIegNhwX5IWboQleVMueo7rcKN8WarTkysbYnILcWgx5OYcKew=="], + "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], - "@metorial/scene-docs/@tiptap/react": ["@tiptap/react@3.6.1", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "fast-deep-equal": "^3.1.3", "use-sync-external-store": "^1.4.0" }, "optionalDependencies": { "@tiptap/extension-bubble-menu": "^3.6.1", "@tiptap/extension-floating-menu": "^3.6.1" }, "peerDependencies": { "@tiptap/core": "^3.6.1", "@tiptap/pm": "^3.6.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-5J1a1JNxhuMYrrAb2NZfs7AX/Pc6xBvVQJnNJ6vR9QZWlBgSe67iJK/bh8KPB7jxrzbItKQ2Brp3v46QLZXPDw=="], + "@aws-sdk/client-s3/@smithy/config-resolver/@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A=="], - "@metorial/scene-docs/@tiptap/starter-kit": ["@tiptap/starter-kit@3.6.1", "", { "dependencies": { "@tiptap/core": "^3.6.1", "@tiptap/extension-blockquote": "^3.6.1", "@tiptap/extension-bold": "^3.6.1", "@tiptap/extension-bullet-list": "^3.6.1", "@tiptap/extension-code": "^3.6.1", "@tiptap/extension-code-block": "^3.6.1", "@tiptap/extension-document": "^3.6.1", "@tiptap/extension-dropcursor": "^3.6.1", "@tiptap/extension-gapcursor": "^3.6.1", "@tiptap/extension-hard-break": "^3.6.1", "@tiptap/extension-heading": "^3.6.1", "@tiptap/extension-horizontal-rule": "^3.6.1", "@tiptap/extension-italic": "^3.6.1", "@tiptap/extension-link": "^3.6.1", "@tiptap/extension-list": "^3.6.1", "@tiptap/extension-list-item": "^3.6.1", "@tiptap/extension-list-keymap": "^3.6.1", "@tiptap/extension-ordered-list": "^3.6.1", "@tiptap/extension-paragraph": "^3.6.1", "@tiptap/extension-strike": "^3.6.1", "@tiptap/extension-text": "^3.6.1", "@tiptap/extension-underline": "^3.6.1", "@tiptap/extensions": "^3.6.1", "@tiptap/pm": "^3.6.1" } }, "sha512-gmQCHEcZxjnVqTInhNx3z7Vuvz+mmIVcXiCSLd5cA9/8PkHo3ttxijfc3lXe4V2ed6RPBWU/FUHFxcUmxqc5Vg=="], + "@aws-sdk/client-s3/@smithy/core/@smithy/uuid": ["@smithy/uuid@1.1.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw=="], - "@metorial/scene-docs/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-s3/@smithy/eventstream-serde-browser/@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.10", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aArqzOEvcs2dK+xQVCgLbpJQGfZihw8SD4ymhkwNTtwKbnrzdhJsFDKuMQnam2kF69WzgJYOU5eJlCx+CA32bw=="], - "@metorial/scene-skills/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-s3/@smithy/eventstream-serde-node/@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.10", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aArqzOEvcs2dK+xQVCgLbpJQGfZihw8SD4ymhkwNTtwKbnrzdhJsFDKuMQnam2kF69WzgJYOU5eJlCx+CA32bw=="], - "@metorial/shuttle/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@aws-sdk/client-s3/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], - "@metorial/signal/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@aws-sdk/client-s3/@smithy/hash-node/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], - "@metorial/slates/@metorial-services/slates-registry-client": ["@metorial-services/slates-registry-client@1.0.1", "", { "dependencies": { "@lowerdeck/rpc-client": "^1.0.2" } }, "sha512-u2KNK4QdScDl3wGWup31jlUk13KvH1NoPl1EGa21J7p/PLjjvX+PdObOuHq/34X8d2MIX+WsDmWGiZuMp4T+rg=="], + "@aws-sdk/client-s3/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], - "@metorial/slates/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], + "@aws-sdk/client-s3/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0" } }, "sha512-0R/+/Il5y8nB/By90o8hy/bWVYptbIfvoTYad0igYQO5RefhNCDmNzqxaMx7K1t/QWo0d6UynqpqN5cCQt1MCg=="], - "@metorial/slates/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "@aws-sdk/client-s3/@smithy/middleware-retry/@smithy/uuid": ["@smithy/uuid@1.1.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw=="], - "@metorial/slates/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@aws-sdk/client-s3/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], - "@metorial/slates/sonner": ["sonner@1.7.4", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw=="], + "@aws-sdk/client-s3/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], - "@metorial/slates-registry/@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], + "@aws-sdk/client-s3/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], - "@metorial/slates-registry/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@aws-sdk/client-s3/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], - "@metorial/state/@metorial/generated": ["@metorial/generated@3.0.0", "", { "dependencies": { "@metorial/util-endpoint": "^3.0.0", "@metorial/util-resource-mapper": "^3.0.0", "jose": "^5.9.6" } }, "sha512-1vJpqLgB8SLw6/Pr+xgnq9mGI4Xpays6JNzJGjB1hK7ZBuTGl5ebgI/Th67TCohdAg347FTv/tj3lK2kPHS3bw=="], + "@aws-sdk/client-s3/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q=="], - "@metorial/state/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-s3/@smithy/util-base64/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], - "@metorial/storage/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-s3/@smithy/util-defaults-mode-browser/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], - "@metorial/synthesis/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@aws-sdk/client-s3/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.10", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/property-provider": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-3bsMLJJLTZGZqVGGeBVFfLzuRulVsGTj12BzRKODTHqUABpIr0jMN1vN3+u6r2OfyhAQ2pXaMZWX/swBK5I6PQ=="], - "@metorial/ui/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@aws-sdk/client-s3/@smithy/util-defaults-mode-node/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], - "@metorial/ui-product/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-s3/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0" } }, "sha512-0R/+/Il5y8nB/By90o8hy/bWVYptbIfvoTYad0igYQO5RefhNCDmNzqxaMx7K1t/QWo0d6UynqpqN5cCQt1MCg=="], - "@metorial/unified-id/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@aws-sdk/client-s3/@smithy/util-stream/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], - "@metorial/voyager/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@aws-sdk/client-s3/@smithy/util-stream/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], - "@modelcontextprotocol/sdk/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], + "@aws-sdk/client-s3/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], - "@modelcontextprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "@aws-sdk/client-s3/@smithy/util-waiter/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], - "@mongodb-js/zstd/node-addon-api": ["node-addon-api@8.7.0", "", {}, "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-29wX9zpAvEt1vcj0psha+y6ygBHy2V/S72mp6e7q0KARLWXq+pwE/lR6qGkwknQvruh52lXvlqZIga8Hdxkucw=="], - "@mrleebo/prisma-ast/lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/fetch-http-handler": "^5.4.3", "@smithy/node-http-handler": "^4.7.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-IA3CQTjtJkb6u1H4mE4936c8OPBMa9Jggtwe8U2Mqw/vvb/tZ5Ebd0mcZcX0uKWQhOyYo/+qNIwkV5Xh+FeJJA=="], - "@npmcli/move-file/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/credential-provider-env": "^3.972.39", "@aws-sdk/credential-provider-http": "^3.972.41", "@aws-sdk/credential-provider-login": "^3.972.43", "@aws-sdk/credential-provider-process": "^3.972.39", "@aws-sdk/credential-provider-sso": "^3.972.43", "@aws-sdk/credential-provider-web-identity": "^3.972.43", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-4mzII+3mZEVXXE1xzrLQrCJL7/r62A63bA6SVzZoNL5rqCJghpf+xgGltVrIBBs0n+mOZBKrQl2tRREtvZ5l6A=="], - "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-2k/amBifLd75eXNwgvPw/2lKYSQ3NhvHQgkVKVjfUq13/eJ3JRtHmznuFenn74OK3sSfp4SMy1YB2w+UVXoKqA=="], - "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.57.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-transformer": "0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-GNBJAEYfeiYJQ3O2dvXgiNZ/qjWrBxSb1L1s7iV/jKBRGMN3Nv+miTk2SLeEobF5E5ZK4rVcHKlBZ71bPVIv/g=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/token-providers": "3.1052.0", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-LPc3+Y4vhH1T4x6CMqwCM6hk5+SRf/Lwmgm8INm95wxTtIRHcMwQUVkDzWu4Iw/RSncxYM2BC01OrYbxOPZvyg=="], - "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.57.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-logs": "0.57.1", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-EX67y+ukNNfFrOLyjYGw8AMy0JPIlEX1dW60SGUNZWW2hSQyyolX7EqFuHP5LtXLjJHNfzx5SMBVQ3owaQCNDw=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-wQtL34lUD/09VXjwAUo2T+I3aEXRDxMB3DKmTJL/Zj0Gi6sLDTrVhae1XVt01yzkquOWajI/sZW72JGDZ1ciTw=="], - "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], + "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.3.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w=="], - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], + "@aws-sdk/core/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.57.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-transformer": "0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-GNBJAEYfeiYJQ3O2dvXgiNZ/qjWrBxSb1L1s7iV/jKBRGMN3Nv+miTk2SLeEobF5E5ZK4rVcHKlBZ71bPVIv/g=="], + "@aws-sdk/core/@smithy/signature-v4/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.57.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-logs": "0.57.1", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-EX67y+ukNNfFrOLyjYGw8AMy0JPIlEX1dW60SGUNZWW2hSQyyolX7EqFuHP5LtXLjJHNfzx5SMBVQ3owaQCNDw=="], + "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/types/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], + "@aws-sdk/credential-provider-login/@aws-sdk/types/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], - "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/core": ["@opentelemetry/core@2.5.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-env/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/resources": ["@opentelemetry/resources@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-http/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], - "@opentelemetry/exporter-trace-otlp-http/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-http/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], - "@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@2.0.6", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-http/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/instrumentation-amqplib/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-ini/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/instrumentation-connect/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-node/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/instrumentation-dataloader/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-process/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/instrumentation-express/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1048.0", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA=="], - "@opentelemetry/instrumentation-fs/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-sso/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/instrumentation-generic-pool/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/credential-providers/@aws-sdk/credential-provider-web-identity/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/instrumentation-graphql/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/credential-providers/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/instrumentation-hapi/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/credential-providers/@smithy/credential-provider-imds/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/instrumentation-http/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-bucket-endpoint/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], - "@opentelemetry/instrumentation-ioredis/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-bucket-endpoint/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], - "@opentelemetry/instrumentation-kafkajs/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-endpoint-discovery/@aws-sdk/types/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], - "@opentelemetry/instrumentation-knex/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], - "@opentelemetry/instrumentation-koa/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], - "@opentelemetry/instrumentation-lru-memoizer/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-muS5tFw+A/uo+U+yig06vk1776UFM+aAp9hFM8efI4ZcHhTcgv6NTeK4x7ltHeMPBwnhEjcf0MULTyxNkSNxDw=="], - "@opentelemetry/instrumentation-mongodb/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.13", "", { "dependencies": { "@smithy/abort-controller": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-o8CP8w6tlUA0lk+Qfwm6Ed0jCWk3bEY6iBOJjdBaowbXKCSClk8zIHQvUL6RUZMvuNafF27cbRCMYqw6O1v4aA=="], - "@opentelemetry/instrumentation-mongoose/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], - "@opentelemetry/instrumentation-mysql/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], - "@opentelemetry/instrumentation-mysql2/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], - "@opentelemetry/instrumentation-pg/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-flexible-checksums/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], - "@opentelemetry/instrumentation-pg/@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg=="], - "@opentelemetry/instrumentation-redis/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], - "@opentelemetry/instrumentation-tedious/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g=="], - "@opentelemetry/instrumentation-undici/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/uuid": ["@smithy/uuid@1.1.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw=="], - "@opentelemetry/otlp-exporter-base/@opentelemetry/core": ["@opentelemetry/core@2.5.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.57.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/otlp-transformer": "0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-GNBJAEYfeiYJQ3O2dvXgiNZ/qjWrBxSb1L1s7iV/jKBRGMN3Nv+miTk2SLeEobF5E5ZK4rVcHKlBZ71bPVIv/g=="], + "@aws-sdk/middleware-sdk-s3/@smithy/signature-v4/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.57.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.1", "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-logs": "0.57.1", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-EX67y+ukNNfFrOLyjYGw8AMy0JPIlEX1dW60SGUNZWW2hSQyyolX7EqFuHP5LtXLjJHNfzx5SMBVQ3owaQCNDw=="], + "@aws-sdk/middleware-sdk-s3/@smithy/signature-v4/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], - "@opentelemetry/otlp-transformer/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.211.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg=="], + "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.21", "", { "dependencies": { "@smithy/core": "^3.23.7", "@smithy/middleware-serde": "^4.2.11", "@smithy/node-config-provider": "^4.3.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-middleware": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-CoVGZaqIC0tEjz0ga3ciwCMA5fd/4lIOwO2wx0fH+cTi1zxSFZnMJbIiIF9G1d4vRSDyTupDrpS3FKBBJGkRZg=="], - "@opentelemetry/otlp-transformer/@opentelemetry/core": ["@opentelemetry/core@2.5.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA=="], - "@opentelemetry/otlp-transformer/@opentelemetry/resources": ["@opentelemetry/resources@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-muS5tFw+A/uo+U+yig06vk1776UFM+aAp9hFM8efI4ZcHhTcgv6NTeK4x7ltHeMPBwnhEjcf0MULTyxNkSNxDw=="], - "@opentelemetry/otlp-transformer/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-BeJLtU+f5Gf905cJX9vXFQorAr6TAfK3SPvTFqP+scfIpDQEJfRaGJWta7sJgP+m4dNtBf9y3yvBKVAZZtJQVA=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.13", "", { "dependencies": { "@smithy/abort-controller": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-o8CP8w6tlUA0lk+Qfwm6Ed0jCWk3bEY6iBOJjdBaowbXKCSClk8zIHQvUL6RUZMvuNafF27cbRCMYqw6O1v4aA=="], - "@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/resources": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], - "@opentelemetry/otlp-transformer/protobufjs": ["protobufjs@8.0.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-jx6+sE9h/UryaCZhsJWbJtTEy47yXoGNYI4z8ZaRncM0zBKeRqjO2JEcOUYwrYGb1WLhXM1FfMzW3annvFv0rw=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], - "@opentelemetry/sdk-logs/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.211.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], - "@opentelemetry/sdk-logs/@opentelemetry/core": ["@opentelemetry/core@2.5.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ=="], + "@aws-sdk/middleware-sdk-s3/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], - "@opentelemetry/sdk-logs/@opentelemetry/resources": ["@opentelemetry/resources@2.5.0", "", { "dependencies": { "@opentelemetry/core": "2.5.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g=="], + "@aws-sdk/nested-clients/@aws-sdk/signature-v4-multi-region/@smithy/signature-v4": ["@smithy/signature-v4@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-53+75QuPl6DL+ct6vVEB51FDO5oulXr20TPV46VvJZg76lIlXNWfxi8j+G2V/t0I2qxCBOa3vX/8bmjrpFVo9g=="], - "@opentelemetry/sdk-metrics/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], + "@aws-sdk/nested-clients/@aws-sdk/signature-v4-multi-region/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@opentelemetry/sdk-metrics/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], + "@aws-sdk/nested-clients/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@prisma/adapter-pg/@types/pg": ["@types/pg@8.11.11", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^4.0.1" } }, "sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw=="], + "@aws-sdk/nested-clients/@smithy/fetch-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@prisma/dev/@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="], + "@aws-sdk/nested-clients/@smithy/node-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], - "@prisma/dev/hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], + "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], - "@prisma/engines/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], + "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-middleware": ["@smithy/util-middleware@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA=="], - "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], + "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], - "@prisma/fetch-engine/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], + "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], - "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], + "@azure/identity/open/define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], - "@prisma/generator-helper/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], + "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - "@prisma/get-platform/@prisma/debug": ["@prisma/debug@7.2.0", "", {}, "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw=="], + "@boxyhq/metrics/@grpc/grpc-js/@grpc/proto-loader": ["@grpc/proto-loader@0.7.15", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.2.5", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ=="], - "@prisma/instrumentation/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.207.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.207.0", "import-in-the-middle": "^2.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-y6eeli9+TLKnznrR8AZlQMSJT7wILpXH+6EYq5Vf/4Ao+huI7EedxQHwRgVUOMLFbe7VFDvHJrX9/f4lcwnJsA=="], + "@boxyhq/metrics/@opentelemetry/resources/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], - "@radix-ui/react-select/@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="], + "@boxyhq/metrics/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@radix-ui/react-tooltip/@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="], + "@boxyhq/saml-jackson/mysql2/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], - "@radix-ui/react-visually-hidden/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], + "@boxyhq/saml-jackson/redis/@redis/bloom": ["@redis/bloom@1.2.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="], - "@react-email/markdown/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], + "@boxyhq/saml-jackson/redis/@redis/client": ["@redis/client@1.6.0", "", { "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", "yallist": "4.0.0" } }, "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg=="], - "@redis/graph/@redis/client": ["@redis/client@1.6.0", "", { "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", "yallist": "4.0.0" } }, "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg=="], + "@boxyhq/saml-jackson/redis/@redis/json": ["@redis/json@1.0.7", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ=="], - "@rollup/plugin-alias/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + "@boxyhq/saml-jackson/redis/@redis/search": ["@redis/search@1.2.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw=="], - "@rollup/plugin-babel/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + "@boxyhq/saml-jackson/redis/@redis/time-series": ["@redis/time-series@1.1.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g=="], - "@rollup/plugin-babel/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + "@eslint/config-array/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "@rollup/plugin-commonjs/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + "@eslint/eslintrc/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - "@rollup/plugin-commonjs/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], + "@eslint/eslintrc/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "@rollup/plugin-commonjs/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + "@function-bay/nodejs/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@rollup/plugin-json/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + "@function-bay/nodejs/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@rollup/plugin-json/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + "@function-bay/nodejs/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@rollup/plugin-node-resolve/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + "@function-bay/nodejs/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@rollup/plugin-node-resolve/deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + "@function-bay/nodejs/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@rollup/plugin-node-resolve/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + "@function-bay/nodejs/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@function-bay/nodejs/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@selderee/plugin-htmlparser2/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + "@function-bay/nodejs/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@sentry/bun/@sentry/core": ["@sentry/core@10.45.0", "", {}, "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q=="], + "@function-bay/nodejs/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@sentry/bundler-plugin-core/@sentry/cli": ["@sentry/cli@2.58.5", "", { "dependencies": { "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.7", "progress": "^2.0.3", "proxy-from-env": "^1.1.0", "which": "^2.0.2" }, "optionalDependencies": { "@sentry/cli-darwin": "2.58.5", "@sentry/cli-linux-arm": "2.58.5", "@sentry/cli-linux-arm64": "2.58.5", "@sentry/cli-linux-i686": "2.58.5", "@sentry/cli-linux-x64": "2.58.5", "@sentry/cli-win32-arm64": "2.58.5", "@sentry/cli-win32-i686": "2.58.5", "@sentry/cli-win32-x64": "2.58.5" }, "bin": { "sentry-cli": "bin/sentry-cli" } }, "sha512-tavJ7yGUZV+z3Ct2/ZB6mg339i08sAk6HDkgqmSRuQEu2iLS5sl9HIvuXfM6xjv8fwlgFOSy++WNABNAcGHUbg=="], + "@function-bay/types/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@sentry/bundler-plugin-core/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "@function-bay/types/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@sentry/bundler-plugin-core/glob": ["glob@9.3.5", "", { "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" } }, "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q=="], + "@function-bay/types/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@sentry/bundler-plugin-core/magic-string": ["magic-string@0.30.8", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ=="], + "@function-bay/types/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@sentry/cli/undici": ["undici@6.24.1", "", {}, "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA=="], + "@function-bay/types/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@sentry/node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], + "@function-bay/types/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@sentry/node/@sentry/core": ["@sentry/core@10.45.0", "", {}, "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q=="], + "@function-bay/types/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@sentry/node-core/@sentry/core": ["@sentry/core@10.45.0", "", {}, "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q=="], + "@function-bay/types/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@sentry/opentelemetry/@sentry/core": ["@sentry/core@10.45.0", "", {}, "sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q=="], + "@function-bay/types/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@slates/proto/zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], + "@function-bay/utils/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@smithy/chunked-blob-reader-native/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], + "@function-bay/utils/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@smithy/hash-blob-browser/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@function-bay/utils/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@smithy/hash-stream-node/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@function-bay/utils/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@smithy/hash-stream-node/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], + "@function-bay/utils/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@smithy/md5-js/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@function-bay/utils/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@smithy/md5-js/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], + "@function-bay/utils/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@smithy/signature-v4/@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="], + "@function-bay/utils/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="], + "@function-bay/utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@surma/rollup-plugin-off-main-thread/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], + "@inquirer/core/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "@tiptap/extension-blockquote/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@inquirer/core/wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@tiptap/extension-bold/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "@tiptap/extension-bubble-menu/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - "@tiptap/extension-code/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@mapbox/node-pre-gyp/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - "@tiptap/extension-code-block/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@mapbox/node-pre-gyp/tar/chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], - "@tiptap/extension-document/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@mapbox/node-pre-gyp/tar/minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], - "@tiptap/extension-floating-menu/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@mapbox/node-pre-gyp/tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], - "@tiptap/extension-hard-break/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-cargo/service/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@tiptap/extension-highlight/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-io/layout/react-router-dom/react-router": ["react-router@7.13.2", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-tX1Aee+ArlKQP+NIUd7SE6Li+CiGKwQtbS+FfRxPX6Pe4vHOo6nr9d++u5cwg+Z8K/x8tP+7qLmujDtfrAoUJA=="], - "@tiptap/extension-horizontal-rule/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-io/ui-product/react-router-dom/react-router": ["react-router@7.13.2", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-tX1Aee+ArlKQP+NIUd7SE6Li+CiGKwQtbS+FfRxPX6Pe4vHOo6nr9d++u5cwg+Z8K/x8tP+7qLmujDtfrAoUJA=="], - "@tiptap/extension-image/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@tiptap/extension-italic/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@tiptap/extension-link/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@tiptap/extension-list/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@tiptap/extension-paragraph/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@tiptap/extension-strike/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@tiptap/extension-subscript/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/ares-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@tiptap/extension-superscript/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/ares-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@tiptap/extension-text/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/ares-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@tiptap/extension-text-align/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@tiptap/extension-text-style/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@tiptap/extension-typography/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@tiptap/extension-underline/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@tiptap/extensions/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@tiptap/react/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@tiptap/starter-kit/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@metorial-platform-systems/cargo-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@tiptap/starter-kit/@tiptap/extension-heading": ["@tiptap/extension-heading@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-JgJhurnCe3eN6a0lEsNQM/46R1bcwzwWWZEFDSb1P9dR8+t1/5v7cMZWsSInpD7R4/74iJn0+M5hcXLwCmBmYA=="], + "@metorial-platform-systems/cargo-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@types/chai-subset/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + "@metorial-platform-systems/cargo-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@types/node-fetch/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@types/nodemailer/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@types/pg/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@types/pg-pool/@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@types/readable-stream/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@types/resolve/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@types/tar-stream/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-platform-systems/forge-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@types/unzipper/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-platform-systems/forge-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + "@metorial-platform-systems/forge-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@typespec/ts-http-runtime/http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@typespec/ts-http-runtime/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@vitest/coverage-v8/@vitest/utils": ["@vitest/utils@4.1.2", "", { "dependencies": { "@vitest/pretty-format": "4.1.2", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@vitest/coverage-v8/std-env": ["std-env@4.0.0", "", {}, "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@vitest/mocker/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial-platform-systems/function-bay-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@vitest/ui/@vitest/utils": ["@vitest/utils@4.1.2", "", { "dependencies": { "@vitest/pretty-format": "4.1.2", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ=="], + "@metorial-platform-systems/function-bay-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@vscode/test-cli/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@metorial-platform-systems/function-bay-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@vscode/test-cli/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@vscode/test-cli/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@vscode/test-cli/mocha": ["mocha@11.7.5", "", { "dependencies": { "browser-stdout": "^1.3.1", "chokidar": "^4.0.1", "debug": "^4.3.5", "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^9.0.5", "ms": "^2.1.3", "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", "workerpool": "^9.2.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" }, "bin": { "mocha": "bin/mocha.js", "_mocha": "bin/_mocha" } }, "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@vscode/test-cli/supports-color": ["supports-color@9.4.0", "", {}, "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@vscode/test-electron/http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@vscode/test-electron/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@metorial-platform-systems/object-storage-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "are-we-there-yet/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "@metorial-platform-systems/object-storage-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "ast-v8-to-istanbul/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "@metorial-platform-systems/object-storage-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "@metorial-platform-systems/origin-client/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "babel-plugin-styled-components/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "bl/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "bullmq/ioredis": ["ioredis@5.9.3", "", { "dependencies": { "@ioredis/commands": "1.5.0", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "bullmq/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "bun-types/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "c12/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "c12/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "@metorial-platform-systems/origin-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "c8/@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], + "@metorial-platform-systems/origin-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "cacache/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "@metorial-platform-systems/origin-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "cacache/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "cacache/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "chevrotain/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "chevrotain/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@metorial-platform-systems/relay-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@metorial-platform-systems/relay-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "concat-with-sourcemaps/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@metorial-platform-systems/relay-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "cosmiconfig/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "cosmiconfig/yaml": ["yaml@1.10.3", "", {}, "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "css-tree/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "cssnano/lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "cssnano/yaml": ["yaml@1.10.3", "", {}, "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + "@metorial-platform-systems/shuttle-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "d3-dsv/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "@metorial-platform-systems/shuttle-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "d3-sankey/d3-array": ["d3-array@2.12.1", "", { "dependencies": { "internmap": "^1.0.0" } }, "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ=="], + "@metorial-platform-systems/shuttle-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "dir-glob/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "dom-serializer/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "dprint-node/detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "dts-bundle-generator/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "@metorial-platform-systems/signal-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "eslint/ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], + "@metorial-platform-systems/signal-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@metorial-platform-systems/signal-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "eslint/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "filelist/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "find-cache-dir/make-dir": ["make-dir@3.1.0", "", { "dependencies": { "semver": "^6.0.0" } }, "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="], + "@metorial-platform-systems/slates-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "flat-cache/flatted": ["flatted@3.3.4", "", {}, "sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA=="], + "@metorial-platform-systems/slates-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "@metorial-platform-systems/slates-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "formik/react-fast-compare": ["react-fast-compare@2.0.4", "", {}, "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "function-bay/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "function-bay/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "gauge/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "gaxios/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "@metorial-platform-systems/subspace-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "@metorial-platform-systems/subspace-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "@metorial-platform-systems/subspace-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "globby/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "googleapis-common/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "gzip-size/duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "handlebars/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "has-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "html-to-text/deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "htmlparser2/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + "@metorial-platform-systems/synthesis-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "htmlparser2/domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + "@metorial-platform-systems/synthesis-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + "@metorial-platform-systems/synthesis-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "is-inside-container/is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "jest-worker/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "jest-worker/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "just-bash/diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "load-json-file/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "load-json-file/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], + "@metorial-platform-systems/voyager-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "log-symbols/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@metorial-platform-systems/voyager-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "log-symbols/is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], + "@metorial-platform-systems/voyager-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "loose-envify/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "@metorial-services/forge-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.3", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.10" } }, "sha512-LAMJ9wsUQQ7xkIqbK457vE5ZPlhaijLjKYDKyLLBYFv6BWr9heGkb/4vuU0TEKyCkF2ReZFiAI7fRWJwm9aqbw=="], - "make-fetch-happen/http-proxy-agent": ["http-proxy-agent@4.0.1", "", { "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } }, "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="], + "@metorial-services/slates-registry-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "make-fetch-happen/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + "@metorial-services/slates-registry-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "make-fetch-happen/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "@metorial-services/slates-registry-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "make-fetch-happen/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-services/slates-registry-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "make-fetch-happen/negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], + "@metorial-services/slates-registry-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "markdown-it/linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], + "@metorial-services/slates-registry-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "markdown-it/uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], + "@metorial-services/slates-registry-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "maxmin/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="], + "@metorial-services/slates-registry-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "maxmin/gzip-size": ["gzip-size@3.0.0", "", { "dependencies": { "duplexer": "^0.1.1" } }, "sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w=="], + "@metorial-services/slates-registry-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "maxmin/pretty-bytes": ["pretty-bytes@3.0.1", "", { "dependencies": { "number-is-nan": "^1.0.0" } }, "sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow=="], + "@metorial-services/slates-registry-internal-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "@metorial-services/slates-registry-internal-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "mdast-util-frontmatter/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "@metorial-services/slates-registry-internal-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "memfs/@types/node": ["@types/node@20.19.39", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw=="], + "@metorial-services/slates-registry-internal-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "memfs/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "@metorial-services/slates-registry-internal-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "memfs/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@metorial-services/slates-registry-internal-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "mermaid/marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], + "@metorial-services/slates-registry-internal-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "microbundle/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + "@metorial-services/slates-registry-internal-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "microbundle/typescript": ["typescript@4.9.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="], + "@metorial-services/slates-registry-internal-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@metorial-subspace/conduit/vitest/@vitest/expect": ["@vitest/expect@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw=="], - "minipass-collect/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-subspace/conduit/vitest/@vitest/mocker": ["@vitest/mocker@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg=="], - "minipass-fetch/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-subspace/conduit/vitest/@vitest/pretty-format": ["@vitest/pretty-format@2.1.9", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ=="], - "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-subspace/conduit/vitest/@vitest/runner": ["@vitest/runner@2.1.9", "", { "dependencies": { "@vitest/utils": "2.1.9", "pathe": "^1.1.2" } }, "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g=="], - "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-subspace/conduit/vitest/@vitest/snapshot": ["@vitest/snapshot@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "magic-string": "^0.30.12", "pathe": "^1.1.2" } }, "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ=="], - "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-subspace/conduit/vitest/@vitest/spy": ["@vitest/spy@2.1.9", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ=="], - "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-subspace/conduit/vitest/@vitest/utils": ["@vitest/utils@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ=="], - "mixpanel/https-proxy-agent": ["https-proxy-agent@5.0.0", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA=="], + "@metorial-subspace/conduit/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - "mkdirp/minimist": ["minimist@0.0.8", "", {}, "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q=="], + "@metorial-subspace/conduit/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "mocha/commander": ["commander@2.15.1", "", {}, "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="], + "@metorial-subspace/conduit/vitest/tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], - "mocha/debug": ["debug@3.1.0", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g=="], + "@metorial-subspace/conduit/vitest/vite-node": ["vite-node@2.1.9", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA=="], - "mocha/diff": ["diff@3.5.0", "", {}, "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="], + "@metorial-subspace/list-utils/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "mocha/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "@metorial-subspace/list-utils/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "mocha/glob": ["glob@7.1.2", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ=="], + "@metorial-subspace/list-utils/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "mocha/he": ["he@1.1.1", "", { "bin": { "he": "bin/he" } }, "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA=="], + "@metorial-subspace/list-utils/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "mocha/minimatch": ["minimatch@3.0.4", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="], + "@metorial-subspace/list-utils/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "mocha/supports-color": ["supports-color@5.4.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w=="], + "@metorial-subspace/list-utils/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "mongodb-connection-string-url/whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], + "@metorial-subspace/list-utils/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "mongoose/mongodb": ["mongodb@7.1.1", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^7.1.1", "mongodb-connection-string-url": "^7.0.0" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.806.0", "@mongodb-js/zstd": "^7.0.0", "gcp-metadata": "^7.0.1", "kerberos": "^7.0.0", "mongodb-client-encryption": ">=7.0.0 <7.1.0", "snappy": "^7.3.2", "socks": "^2.8.6" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-067DXiMjcpYQl6bGjWQoTUEE9UoRViTtKFcoqX7z08I+iDZv/emH1g8XEFiO3qiDfXAheT5ozl1VffDTKhIW/w=="], + "@metorial-subspace/list-utils/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "mssql/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + "@metorial-subspace/list-utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "@metorial-subspace/module-agent/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "node-gyp/nopt": ["nopt@5.0.0", "", { "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="], + "@metorial-subspace/module-agent/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "node-liblzma/node-addon-api": ["node-addon-api@8.7.0", "", {}, "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA=="], + "@metorial-subspace/module-agent/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + "@metorial-subspace/module-agent/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "npm-run-all/cross-spawn": ["cross-spawn@6.0.6", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw=="], + "@metorial-subspace/module-agent/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "npm-run-all/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "@metorial-subspace/module-agent/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], + "@metorial-subspace/module-agent/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "openid-client/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], + "@metorial-subspace/module-agent/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "@metorial-subspace/module-agent/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "ora/log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], + "@metorial-subspace/module-auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "ora/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "@metorial-subspace/module-auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + "@metorial-subspace/module-auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + "@metorial-subspace/module-auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + "@metorial-subspace/module-auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "@metorial-subspace/module-auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "path-type/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], + "@metorial-subspace/module-auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "pg-types/postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], + "@metorial-subspace/module-auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "pkg-dir/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + "@metorial-subspace/module-auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + "@metorial-subspace/module-callback/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "@metorial-subspace/module-callback/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "postcss-calc/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + "@metorial-subspace/module-callback/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "postcss-merge-rules/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + "@metorial-subspace/module-callback/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "postcss-minify-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + "@metorial-subspace/module-callback/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "postcss-unique-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + "@metorial-subspace/module-callback/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + "@metorial-subspace/module-callback/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + "@metorial-subspace/module-callback/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "prosemirror-markdown/@types/markdown-it": ["@types/markdown-it@14.1.2", "", { "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" } }, "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog=="], + "@metorial-subspace/module-callback/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "protobufjs/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-subspace/module-catalog/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + "@metorial-subspace/module-catalog/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "randombytes/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + "@metorial-subspace/module-catalog/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "rc/ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + "@metorial-subspace/module-catalog/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + "@metorial-subspace/module-catalog/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + "@metorial-subspace/module-catalog/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], + "@metorial-subspace/module-catalog/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "@metorial-subspace/module-catalog/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "rollup-plugin-bundle-size/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="], + "@metorial-subspace/module-catalog/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "rollup-plugin-postcss/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@metorial-subspace/module-connection/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "rollup-plugin-postcss/p-queue": ["p-queue@6.6.2", "", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], + "@metorial-subspace/module-connection/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "rollup-plugin-postcss/postcss-load-config": ["postcss-load-config@3.1.4", "", { "dependencies": { "lilconfig": "^2.0.5", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg=="], + "@metorial-subspace/module-connection/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "rollup-plugin-terser/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + "@metorial-subspace/module-connection/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "rollup-plugin-typescript2/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + "@metorial-subspace/module-connection/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "rollup-pluginutils/estree-walker": ["estree-walker@0.6.1", "", {}, "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="], + "@metorial-subspace/module-connection/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "safe-array-concat/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "@metorial-subspace/module-connection/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "safe-push-apply/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "@metorial-subspace/module-connection/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "seek-bzip/commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], + "@metorial-subspace/module-connection/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "short-uuid/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "@metorial-subspace/module-custom-provider/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "socks-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + "@metorial-subspace/module-custom-provider/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@metorial-subspace/module-custom-provider/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "ssri/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "@metorial-subspace/module-custom-provider/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "stacktrace-gps/source-map": ["source-map@0.5.6", "", {}, "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA=="], + "@metorial-subspace/module-custom-provider/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@metorial-subspace/module-custom-provider/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@metorial-subspace/module-custom-provider/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "string_decoder/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + "@metorial-subspace/module-custom-provider/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@metorial-subspace/module-custom-provider/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "styled-components/postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="], + "@metorial-subspace/module-deployment/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "stylehacks/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + "@metorial-subspace/module-deployment/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + "@metorial-subspace/module-deployment/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "svgo/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + "@metorial-subspace/module-deployment/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], + "@metorial-subspace/module-deployment/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "tar/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + "@metorial-subspace/module-deployment/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], + "@metorial-subspace/module-deployment/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "tar-fs/tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], + "@metorial-subspace/module-deployment/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "tedious/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial-subspace/module-deployment/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "tedious/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "@metorial-subspace/module-identity/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + "@metorial-subspace/module-identity/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "test-exclude/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "@metorial-subspace/module-identity/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "to-buffer/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "@metorial-subspace/module-identity/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "tsup/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], + "@metorial-subspace/module-identity/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "tsup/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial-subspace/module-identity/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "typeorm/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "@metorial-subspace/module-identity/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "typeorm/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], + "@metorial-subspace/module-identity/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "typeorm/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + "@metorial-subspace/module-identity/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "unplugin/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@metorial-subspace/module-integration/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], + "@metorial-subspace/module-integration/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "vite-plugin-html/consola": ["consola@2.15.3", "", {}, "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw=="], + "@metorial-subspace/module-integration/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "vite-plugin-html/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "@metorial-subspace/module-integration/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "vite-plugin-html/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + "@metorial-subspace/module-integration/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "vite-plugin-html/pathe": ["pathe@0.2.0", "", {}, "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw=="], + "@metorial-subspace/module-integration/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "@metorial-subspace/module-integration/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "vscode/http-proxy-agent": ["http-proxy-agent@4.0.1", "", { "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } }, "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="], + "@metorial-subspace/module-integration/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "vscode/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + "@metorial-subspace/module-integration/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "vscode/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "vscode-test/http-proxy-agent": ["http-proxy-agent@2.1.0", "", { "dependencies": { "agent-base": "4", "debug": "3.1.0" } }, "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "vscode-test/https-proxy-agent": ["https-proxy-agent@2.2.4", "", { "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" } }, "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@metorial-subspace/module-provider-internal/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@metorial-subspace/module-provider-internal/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "wsl-utils/is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], + "@metorial-subspace/module-provider-internal/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "xml-crypto/@xmldom/xmldom": ["@xmldom/xmldom@0.8.12", "", {}, "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg=="], + "@metorial-subspace/module-session/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], - "xml-encryption/@xmldom/xmldom": ["@xmldom/xmldom@0.8.12", "", {}, "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg=="], + "@metorial-subspace/module-session/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "xml-encryption/xpath": ["xpath@0.0.32", "", {}, "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw=="], + "@metorial-subspace/module-session/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "xml2js/xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], + "@metorial-subspace/module-session/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "yargs-unparser/is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], + "@metorial-subspace/module-session/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-crypto/crc32/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@metorial-subspace/module-session/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-crypto/crc32c/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@metorial-subspace/module-session/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-crypto/sha1-browser/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@metorial-subspace/module-session/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], + "@metorial-subspace/module-session/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-crypto/sha256-browser/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@metorial-subspace/module-session/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], + "@metorial-subspace/module-skills/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-crypto/sha256-js/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@metorial-subspace/module-skills/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-crypto/util/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + "@metorial-subspace/module-skills/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], + "@metorial-subspace/module-skills/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.25", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-6QfI0wv4jpG5CrdO/AO0JfZ2ux+tKwJPrUwmvxXF50vI5KIypKVGNF6b4vlkYEnKumDTI1NX2zUBi8JoU5QU3A=="], + "@metorial-subspace/module-skills/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.27", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@smithy/fetch-http-handler": "^5.3.16", "@smithy/node-http-handler": "^4.5.2", "@smithy/property-provider": "^4.2.13", "@smithy/protocol-http": "^5.3.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" } }, "sha512-3V3Usj9Gs93h865DqN4M2NWJhC5kXU9BvZskfN3+69omuYlE3TZxOEcVQtBGLOloJB7BVfJKXVLqeNhOzHqSlQ=="], + "@metorial-subspace/module-skills/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/credential-provider-env": "^3.972.25", "@aws-sdk/credential-provider-http": "^3.972.27", "@aws-sdk/credential-provider-login": "^3.972.29", "@aws-sdk/credential-provider-process": "^3.972.25", "@aws-sdk/credential-provider-sso": "^3.972.29", "@aws-sdk/credential-provider-web-identity": "^3.972.29", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/types": "^3.973.7", "@smithy/credential-provider-imds": "^4.2.13", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-SiBuAnXecCbT/OpAf3vqyI/AVE3mTaYr9ShXLybxZiPLBiPCCOIWSGAtYYGQWMRvobBTiqOewaB+wcgMMZI2Aw=="], + "@metorial-subspace/module-skills/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.25", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-HR7ynNRdNhNsdVCOCegy1HsfsRzozCOPtD3RzzT1JouuaHobWyRfJzCBue/3jP7gECHt+kQyZUvwg/cYLWurNQ=="], + "@metorial-subspace/module-skills/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/token-providers": "3.1026.0", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-HWv4SEq3jZDYPlwryZVef97+U8CxxRos5mK8sgGO1dQaFZpV5giZLzqGE5hkDmh2csYcBO2uf5XHjPTpZcJlig=="], + "@metorial-subspace/module-skills/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-PdMBza1WEKEUPFEmMGCfnU2RYCz9MskU2e8JxjyUOsMKku7j9YaDKvbDi2dzC0ihFoM6ods2SbhfAAro+Gwlew=="], + "@metorial-subspace/module-tenant/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.13", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/property-provider": "^4.2.13", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-wboCPijzf6RJKLOvnjDAiBxGSmSnGXj35o5ZAWKDaHa/cvQ5U3ZJ13D4tMCE8JG4dxVAZFy/P0x/V9CwwdfULQ=="], + "@metorial-subspace/module-tenant/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@smithy/property-provider": ["@smithy/property-provider@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ=="], + "@metorial-subspace/module-tenant/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-codebuild/@aws-sdk/credential-provider-node/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.8", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw=="], + "@metorial-subspace/module-tenant/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-codebuild/@smithy/core/@smithy/util-stream": ["@smithy/util-stream@4.5.22", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.16", "@smithy/node-http-handler": "^4.5.2", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-3H8iq/0BfQjUs2/4fbHZ9aG9yNzcuZs24LPkcX1Q7Z+qpqaGM8+qbGmE8zo9m2nCRgamyvS98cHdcWvR6YUsew=="], + "@metorial-subspace/module-tenant/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-codebuild/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-tG4aOYFCZdPMjbgfhnIQ322H//ojujldp1SrHPHpBSb3NqgUp3dwiUGRJzie87hS1DYwWGqDuPaowoDF+rYCbQ=="], + "@metorial-subspace/module-tenant/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-codebuild/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.8", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw=="], + "@metorial-subspace/module-tenant/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-codebuild/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0" } }, "sha512-a0s8XZMfOC/qpqq7RCPvJlk93rWFrElH6O++8WJKz0FqnA4Y7fkNi/0mnGgSH1C4x6MFsuBA8VKu4zxFrMe5Vw=="], + "@metorial-subspace/module-tenant/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-codebuild/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ=="], + "@metorial-subspace/module-tenant/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-codebuild/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.8", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw=="], + "@metorial/api-auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-codebuild/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-tG4aOYFCZdPMjbgfhnIQ322H//ojujldp1SrHPHpBSb3NqgUp3dwiUGRJzie87hS1DYwWGqDuPaowoDF+rYCbQ=="], + "@metorial/api-auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-codebuild/@smithy/smithy-client/@smithy/util-stream": ["@smithy/util-stream@4.5.22", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.16", "@smithy/node-http-handler": "^4.5.2", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-3H8iq/0BfQjUs2/4fbHZ9aG9yNzcuZs24LPkcX1Q7Z+qpqaGM8+qbGmE8zo9m2nCRgamyvS98cHdcWvR6YUsew=="], + "@metorial/api-auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-codebuild/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-hqW3Q4P+CDzUyQ87GrboGMeD7XYNMOF+CuTwu936UQRB/zeYn3jys8C3w+wMkDfY7CyyyVwZQ5cNFoG0x1pYmA=="], + "@metorial/api-auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-browser/@smithy/property-provider": ["@smithy/property-provider@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ=="], + "@metorial/api-auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.13", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/property-provider": "^4.2.13", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-wboCPijzf6RJKLOvnjDAiBxGSmSnGXj35o5ZAWKDaHa/cvQ5U3ZJ13D4tMCE8JG4dxVAZFy/P0x/V9CwwdfULQ=="], + "@metorial/api-auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-codebuild/@smithy/util-defaults-mode-node/@smithy/property-provider": ["@smithy/property-provider@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ=="], + "@metorial/api-auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-codebuild/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0" } }, "sha512-a0s8XZMfOC/qpqq7RCPvJlk93rWFrElH6O++8WJKz0FqnA4Y7fkNi/0mnGgSH1C4x6MFsuBA8VKu4zxFrMe5Vw=="], + "@metorial/api-auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q=="], + "@metorial/api-auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg=="], + "@metorial/api-core/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-login": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w=="], + "@metorial/api-core/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg=="], + "@metorial/api-core/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/token-providers": "3.1048.0", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ=="], + "@metorial/api-core/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A=="], + "@metorial/api-core/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.3.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w=="], + "@metorial/api-core/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/api-core/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-cognito-identity/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/api-core/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-cognito-identity/@smithy/fetch-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/api-core/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-cognito-identity/@smithy/node-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/api-custom-portal/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q=="], + "@metorial/api-custom-portal/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/fetch-http-handler": "^5.4.2", "@smithy/node-http-handler": "^4.7.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg=="], + "@metorial/api-custom-portal/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/credential-provider-env": "^3.972.37", "@aws-sdk/credential-provider-http": "^3.972.39", "@aws-sdk/credential-provider-login": "^3.972.41", "@aws-sdk/credential-provider-process": "^3.972.37", "@aws-sdk/credential-provider-sso": "^3.972.41", "@aws-sdk/credential-provider-web-identity": "^3.972.41", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w=="], + "@metorial/api-custom-portal/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.37", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg=="], + "@metorial/api-custom-portal/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/token-providers": "3.1048.0", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ=="], + "@metorial/api-custom-portal/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A=="], + "@metorial/api-custom-portal/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.3.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w=="], + "@metorial/api-custom-portal/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-dynamodb/@aws-sdk/credential-provider-node/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/api-custom-portal/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-dynamodb/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/api-files/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-dynamodb/@smithy/fetch-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/api-files/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-dynamodb/@smithy/node-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/api-files/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.32", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-7vA4GHg8NSmQxquJHSBcSM3RgB4ZaaRi6u4+zGFKOmOH6aqlgr2Sda46clkZDYzlirgfY96w15Zj0jh6PT48ng=="], + "@metorial/api-files/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.34", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.6.1", "@smithy/property-provider": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" } }, "sha512-vBrhWujFCLp1u8ptJRWYlipMutzPptb8pDQ00rKVH9q67T7rGd3VTWIj63aKrlLuY6qSsw1Rt5F/D/7wnNgryA=="], + "@metorial/api-files/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-env": "^3.972.32", "@aws-sdk/credential-provider-http": "^3.972.34", "@aws-sdk/credential-provider-login": "^3.972.36", "@aws-sdk/credential-provider-process": "^3.972.32", "@aws-sdk/credential-provider-sso": "^3.972.36", "@aws-sdk/credential-provider-web-identity": "^3.972.36", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-FBHyCmV8EB0gUvh1d+CZm87zt2PrdC7OyWexLRoH3I5zWSOUGa+9t58Y5jbxRfwUp3AWpHAFvKY6YzgR845sVA=="], + "@metorial/api-files/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.32", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-uZp4tlGbpczV8QxmtIwOpSkcyGtBRR8/T4BAumRKfAt1nwCig3FSCZvrKl6ARDIDVRYn5p2oRcAsfFR01EgMGA=="], + "@metorial/api-files/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/token-providers": "3.1038.0", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-DsLr0UHMyKzRJKe2bjlwU8q1cfoXg8TIJKV/xwvnalAemiZLOZunFzj/whGnFDZIBVLdnbLiwv5SvRf1+CSwkg=="], + "@metorial/api-files/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-uzrURO7frJhHQVVNR5zBJcCYeMYflmXcWBK1+MiBym2Dfjh6nXATrMixrmGZi+97Q7ETZ+y/4lUwAy0Nfnznjw=="], + "@metorial/api-files/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.14", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg=="], + "@metorial/api-keys/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@smithy/property-provider": ["@smithy/property-provider@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ=="], + "@metorial/api-keys/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-kms/@aws-sdk/credential-provider-node/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.9", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ=="], + "@metorial/api-keys/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-kms/@smithy/core/@smithy/util-stream": ["@smithy/util-stream@4.5.25", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.6.1", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA=="], + "@metorial/api-keys/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-kms/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A=="], + "@metorial/api-keys/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-kms/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.9", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ=="], + "@metorial/api-keys/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-kms/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.3.1", "", { "dependencies": { "@smithy/types": "^4.14.1" } }, "sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw=="], + "@metorial/api-keys/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-kms/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ=="], + "@metorial/api-keys/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-kms/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.9", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ=="], + "@metorial/api-keys/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-kms/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A=="], + "@metorial/api-oauth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-kms/@smithy/smithy-client/@smithy/util-stream": ["@smithy/util-stream@4.5.25", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.6.1", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA=="], + "@metorial/api-oauth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-kms/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw=="], + "@metorial/api-oauth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-kms/@smithy/util-defaults-mode-browser/@smithy/property-provider": ["@smithy/property-provider@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ=="], + "@metorial/api-oauth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-kms/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.14", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg=="], + "@metorial/api-oauth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-kms/@smithy/util-defaults-mode-node/@smithy/property-provider": ["@smithy/property-provider@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ=="], + "@metorial/api-oauth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-kms/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.3.1", "", { "dependencies": { "@smithy/types": "^4.14.1" } }, "sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw=="], + "@metorial/api-oauth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-PvnBY9rwBuLh9MEsAng28DG+WKl+txerKgf4BU9IPAqYI7FBIo1x6q/utLf4KLyQYgSy1TLQnbQuXx5xfBGASg=="], + "@metorial/api-oauth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.16", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@smithy/fetch-http-handler": "^5.3.12", "@smithy/node-http-handler": "^4.4.13", "@smithy/property-provider": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/smithy-client": "^4.12.1", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.16", "tslib": "^2.6.2" } }, "sha512-m/QAcvw5OahqGPjeAnKtgfWgjLxeWOYj7JSmxKK6PLyKp2S/t2TAHI6EELEzXnIz28RMgbQLukJkVAqPASVAGQ=="], + "@metorial/api-oauth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/credential-provider-env": "^3.972.14", "@aws-sdk/credential-provider-http": "^3.972.16", "@aws-sdk/credential-provider-login": "^3.972.14", "@aws-sdk/credential-provider-process": "^3.972.14", "@aws-sdk/credential-provider-sso": "^3.972.14", "@aws-sdk/credential-provider-web-identity": "^3.972.14", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@smithy/credential-provider-imds": "^4.2.10", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-EGA7ufqNpZKZcD0RwM6gRDEQgwAf19wQ99R1ptdWYDJAnpcMcWiFyT0RIrgiZFLD28CwJmYjnra75hChnEveWA=="], + "@metorial/app-api/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-KAF5LBkJInUPaR9dJDw8LqmbPDRTLyXyRoWVGcJQ+DcN9rxVKBRzAK+O4dTIvQtQ7xaIDZ2kY7zUmDlz6CCXdw=="], + "@metorial/app-api/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/token-providers": "3.1001.0", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LQzIYrNABnZzkyuIguFa3VVOox9UxPpRW6PL+QYtRHaGl1Ux/+Zi54tAVK31VdeBKPKU3cxqeu8dbOgNqy+naw=="], + "@metorial/app-api/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.14", "", { "dependencies": { "@aws-sdk/core": "^3.973.16", "@aws-sdk/nested-clients": "^3.996.4", "@aws-sdk/types": "^3.973.4", "@smithy/property-provider": "^4.2.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-rOwB3vXHHHnGvAOjTgQETxVAsWjgF61XlbGd/ulvYo7EpdXs8cbIHE3PGih9tTj/65ZOegSqZGFqLaKntaI9Kw=="], + "@metorial/app-api/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.10", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/property-provider": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-3bsMLJJLTZGZqVGGeBVFfLzuRulVsGTj12BzRKODTHqUABpIr0jMN1vN3+u6r2OfyhAQ2pXaMZWX/swBK5I6PQ=="], + "@metorial/app-api/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], + "@metorial/app-api/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-s3/@aws-sdk/credential-provider-node/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], + "@metorial/app-api/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-s3/@smithy/config-resolver/@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A=="], + "@metorial/app-api/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-s3/@smithy/core/@smithy/uuid": ["@smithy/uuid@1.1.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw=="], + "@metorial/app-api/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-s3/@smithy/eventstream-serde-browser/@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.10", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aArqzOEvcs2dK+xQVCgLbpJQGfZihw8SD4ymhkwNTtwKbnrzdhJsFDKuMQnam2kF69WzgJYOU5eJlCx+CA32bw=="], + "@metorial/app-dashboard/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], - "@aws-sdk/client-s3/@smithy/eventstream-serde-node/@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.10", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aArqzOEvcs2dK+xQVCgLbpJQGfZihw8SD4ymhkwNTtwKbnrzdhJsFDKuMQnam2kF69WzgJYOU5eJlCx+CA32bw=="], + "@metorial/app-dashboard/framer-motion/motion-dom": ["motion-dom@11.18.1", "", { "dependencies": { "motion-utils": "^11.18.1" } }, "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw=="], - "@aws-sdk/client-s3/@smithy/fetch-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + "@metorial/app-dashboard/framer-motion/motion-utils": ["motion-utils@11.18.1", "", {}, "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA=="], - "@aws-sdk/client-s3/@smithy/hash-node/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial/ares/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@aws-sdk/client-s3/@smithy/middleware-endpoint/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], + "@metorial/ares/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], - "@aws-sdk/client-s3/@smithy/middleware-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0" } }, "sha512-0R/+/Il5y8nB/By90o8hy/bWVYptbIfvoTYad0igYQO5RefhNCDmNzqxaMx7K1t/QWo0d6UynqpqN5cCQt1MCg=="], + "@metorial/auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-s3/@smithy/middleware-retry/@smithy/uuid": ["@smithy/uuid@1.1.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw=="], + "@metorial/auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-s3/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], + "@metorial/auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-s3/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], + "@metorial/auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-s3/@smithy/node-http-handler/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], + "@metorial/auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-s3/@smithy/node-http-handler/@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA=="], + "@metorial/auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-s3/@smithy/url-parser/@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q=="], + "@metorial/auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-s3/@smithy/util-base64/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial/auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-s3/@smithy/util-defaults-mode-browser/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], + "@metorial/auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-s3/@smithy/util-defaults-mode-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.10", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.10", "@smithy/property-provider": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-3bsMLJJLTZGZqVGGeBVFfLzuRulVsGTj12BzRKODTHqUABpIr0jMN1vN3+u6r2OfyhAQ2pXaMZWX/swBK5I6PQ=="], + "@metorial/bearer/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-s3/@smithy/util-defaults-mode-node/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], + "@metorial/bearer/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-s3/@smithy/util-retry/@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0" } }, "sha512-0R/+/Il5y8nB/By90o8hy/bWVYptbIfvoTYad0igYQO5RefhNCDmNzqxaMx7K1t/QWo0d6UynqpqN5cCQt1MCg=="], + "@metorial/bearer/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-s3/@smithy/util-stream/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial/bearer/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-s3/@smithy/util-stream/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], + "@metorial/bearer/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/client-s3/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial/bearer/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/client-s3/@smithy/util-waiter/@smithy/abort-controller": ["@smithy/abort-controller@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g=="], + "@metorial/bearer/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-29wX9zpAvEt1vcj0psha+y6ygBHy2V/S72mp6e7q0KARLWXq+pwE/lR6qGkwknQvruh52lXvlqZIga8Hdxkucw=="], + "@metorial/bearer/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.41", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/fetch-http-handler": "^5.4.3", "@smithy/node-http-handler": "^4.7.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-IA3CQTjtJkb6u1H4mE4936c8OPBMa9Jggtwe8U2Mqw/vvb/tZ5Ebd0mcZcX0uKWQhOyYo/+qNIwkV5Xh+FeJJA=="], + "@metorial/bearer/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/credential-provider-env": "^3.972.39", "@aws-sdk/credential-provider-http": "^3.972.41", "@aws-sdk/credential-provider-login": "^3.972.43", "@aws-sdk/credential-provider-process": "^3.972.39", "@aws-sdk/credential-provider-sso": "^3.972.43", "@aws-sdk/credential-provider-web-identity": "^3.972.43", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/credential-provider-imds": "^4.3.2", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-4mzII+3mZEVXXE1xzrLQrCJL7/r62A63bA6SVzZoNL5rqCJghpf+xgGltVrIBBs0n+mOZBKrQl2tRREtvZ5l6A=="], + "@metorial/cache/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.39", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-2k/amBifLd75eXNwgvPw/2lKYSQ3NhvHQgkVKVjfUq13/eJ3JRtHmznuFenn74OK3sSfp4SMy1YB2w+UVXoKqA=="], + "@metorial/cache/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/token-providers": "3.1052.0", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-LPc3+Y4vhH1T4x6CMqwCM6hk5+SRf/Lwmgm8INm95wxTtIRHcMwQUVkDzWu4Iw/RSncxYM2BC01OrYbxOPZvyg=="], + "@metorial/cache/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.43", "", { "dependencies": { "@aws-sdk/core": "^3.974.13", "@aws-sdk/nested-clients": "^3.997.11", "@aws-sdk/types": "^3.973.9", "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-wQtL34lUD/09VXjwAUo2T+I3aEXRDxMB3DKmTJL/Zj0Gi6sLDTrVhae1XVt01yzkquOWajI/sZW72JGDZ1ciTw=="], + "@metorial/cache/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/client-ses/@aws-sdk/credential-provider-node/@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.3.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w=="], + "@metorial/cache/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/core/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/cache/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/core/@smithy/signature-v4/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/cache/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/types/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], + "@metorial/cache/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/credential-provider-login/@aws-sdk/types/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], + "@metorial/cache/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-env/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/chart/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-http/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A=="], + "@metorial/chart/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-http/@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="], + "@metorial/chart/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-http/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/chart/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-ini/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/chart/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-node/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/chart/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-process/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/chart/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1048.0", "", { "dependencies": { "@aws-sdk/core": "^3.974.11", "@aws-sdk/nested-clients": "^3.997.9", "@aws-sdk/types": "^3.973.8", "@smithy/core": "^3.24.2", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA=="], + "@metorial/chart/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-sso/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/chart/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/credential-providers/@aws-sdk/credential-provider-web-identity/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/code-editor/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], - "@aws-sdk/credential-providers/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/code-editor/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "@aws-sdk/credential-providers/@smithy/credential-provider-imds/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/code-editor/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], - "@aws-sdk/middleware-bucket-endpoint/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], + "@metorial/code-editor/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], - "@aws-sdk/middleware-bucket-endpoint/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], + "@metorial/code-editor/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], - "@aws-sdk/middleware-endpoint-discovery/@aws-sdk/types/@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], + "@metorial/code-editor/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], + "@metorial/code-editor/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], + "@metorial/code-editor/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-muS5tFw+A/uo+U+yig06vk1776UFM+aAp9hFM8efI4ZcHhTcgv6NTeK4x7ltHeMPBwnhEjcf0MULTyxNkSNxDw=="], + "@metorial/code-editor/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.13", "", { "dependencies": { "@smithy/abort-controller": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-o8CP8w6tlUA0lk+Qfwm6Ed0jCWk3bEY6iBOJjdBaowbXKCSClk8zIHQvUL6RUZMvuNafF27cbRCMYqw6O1v4aA=="], + "@metorial/code-editor/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], + "@metorial/code-editor/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial/code-editor/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-stream/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], + "@metorial/code-editor/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - "@aws-sdk/middleware-flexible-checksums/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial/code-editor/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], - "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg=="], + "@metorial/code-editor/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], - "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], + "@metorial/code-workspace/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g=="], + "@metorial/code/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/middleware-sdk-s3/@smithy/core/@smithy/uuid": ["@smithy/uuid@1.1.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw=="], + "@metorial/code/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider/@smithy/property-provider": ["@smithy/property-provider@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw=="], + "@metorial/code/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/middleware-sdk-s3/@smithy/node-config-provider/@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug=="], + "@metorial/code/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/middleware-sdk-s3/@smithy/signature-v4/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], + "@metorial/code/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/middleware-sdk-s3/@smithy/signature-v4/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + "@metorial/code/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.21", "", { "dependencies": { "@smithy/core": "^3.23.7", "@smithy/middleware-serde": "^4.2.11", "@smithy/node-config-provider": "^4.3.10", "@smithy/shared-ini-file-loader": "^4.4.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.10", "@smithy/util-middleware": "^4.2.10", "tslib": "^2.6.2" } }, "sha512-CoVGZaqIC0tEjz0ga3ciwCMA5fd/4lIOwO2wx0fH+cTi1zxSFZnMJbIiIF9G1d4vRSDyTupDrpS3FKBBJGkRZg=="], + "@metorial/code/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/middleware-sdk-s3/@smithy/smithy-client/@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA=="], + "@metorial/code/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-muS5tFw+A/uo+U+yig06vk1776UFM+aAp9hFM8efI4ZcHhTcgv6NTeK4x7ltHeMPBwnhEjcf0MULTyxNkSNxDw=="], + "@metorial/code/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.13", "", { "dependencies": { "@smithy/abort-controller": "^4.2.10", "@smithy/protocol-http": "^5.3.10", "@smithy/querystring-builder": "^4.2.10", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-o8CP8w6tlUA0lk+Qfwm6Ed0jCWk3bEY6iBOJjdBaowbXKCSClk8zIHQvUL6RUZMvuNafF27cbRCMYqw6O1v4aA=="], + "@metorial/config/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], + "@metorial/config/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial/config/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-stream/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], + "@metorial/config/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/middleware-sdk-s3/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], + "@metorial/config/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@aws-sdk/nested-clients/@aws-sdk/signature-v4-multi-region/@smithy/signature-v4": ["@smithy/signature-v4@5.4.3", "", { "dependencies": { "@smithy/core": "^3.24.3", "@smithy/types": "^4.14.2", "tslib": "^2.6.2" } }, "sha512-53+75QuPl6DL+ct6vVEB51FDO5oulXr20TPV46VvJZg76lIlXNWfxi8j+G2V/t0I2qxCBOa3vX/8bmjrpFVo9g=="], + "@metorial/config/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@aws-sdk/nested-clients/@aws-sdk/signature-v4-multi-region/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/config/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@aws-sdk/nested-clients/@smithy/core/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/config/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@aws-sdk/nested-clients/@smithy/fetch-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/config/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@aws-sdk/nested-clients/@smithy/node-http-handler/@smithy/types": ["@smithy/types@4.14.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw=="], + "@metorial/consumer-auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], + "@metorial/consumer-auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-middleware": ["@smithy/util-middleware@4.2.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA=="], + "@metorial/consumer-auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q=="], + "@metorial/consumer-auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@aws-sdk/signature-v4-multi-region/@smithy/signature-v4/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], + "@metorial/consumer-auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@azure/identity/open/define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], + "@metorial/consumer-auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "@metorial/consumer-auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@boxyhq/metrics/@grpc/grpc-js/@grpc/proto-loader": ["@grpc/proto-loader@0.7.15", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.2.5", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ=="], + "@metorial/consumer-auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@boxyhq/metrics/@opentelemetry/resources/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], + "@metorial/consumer-auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@boxyhq/metrics/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@metorial/consumer-sdk/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], - "@boxyhq/saml-jackson/mysql2/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "@metorial/consumer-sdk/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "@boxyhq/saml-jackson/redis/@redis/bloom": ["@redis/bloom@1.2.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="], + "@metorial/consumer-sdk/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], - "@boxyhq/saml-jackson/redis/@redis/client": ["@redis/client@1.6.0", "", { "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", "yallist": "4.0.0" } }, "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg=="], + "@metorial/consumer-sdk/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], - "@boxyhq/saml-jackson/redis/@redis/json": ["@redis/json@1.0.7", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ=="], + "@metorial/consumer-sdk/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], - "@boxyhq/saml-jackson/redis/@redis/search": ["@redis/search@1.2.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw=="], + "@metorial/consumer-sdk/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], - "@boxyhq/saml-jackson/redis/@redis/time-series": ["@redis/time-series@1.1.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g=="], + "@metorial/consumer-sdk/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], - "@eslint/config-array/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "@metorial/consumer-sdk/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], - "@eslint/eslintrc/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + "@metorial/consumer-sdk/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], - "@eslint/eslintrc/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "@metorial/consumer-sdk/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], - "@function-bay/nodejs/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/consumer-sdk/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], - "@function-bay/nodejs/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/consumer-sdk/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], - "@function-bay/nodejs/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/consumer-sdk/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - "@function-bay/nodejs/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/consumer-sdk/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], - "@function-bay/nodejs/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/consumer-sdk/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], - "@function-bay/nodejs/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/context/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@function-bay/nodejs/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/context/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@function-bay/nodejs/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/context/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@function-bay/nodejs/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/context/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@function-bay/types/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/context/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@function-bay/types/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/context/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@function-bay/types/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/context/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@function-bay/types/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/context/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@function-bay/types/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/context/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@function-bay/types/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/cron/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@function-bay/types/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/cron/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@function-bay/types/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/cron/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@function-bay/types/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/cron/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@function-bay/utils/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/cron/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@function-bay/utils/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/cron/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@function-bay/utils/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/cron/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@function-bay/utils/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/cron/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@function-bay/utils/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/cron/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@function-bay/utils/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/dashboard-sdk/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], - "@function-bay/utils/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/dashboard-sdk/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "@function-bay/utils/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/dashboard-sdk/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], - "@function-bay/utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/dashboard-sdk/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], - "@inquirer/core/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@metorial/dashboard-sdk/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], - "@inquirer/core/wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@metorial/dashboard-sdk/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], - "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + "@metorial/dashboard-sdk/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], - "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "@metorial/dashboard-sdk/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], - "@lowerdeck/api-mux/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + "@metorial/dashboard-sdk/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], - "@lowerdeck/id/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], + "@metorial/dashboard-sdk/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], - "@lowerdeck/lock/@types/bun/bun-types": ["bun-types@1.3.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA=="], + "@metorial/dashboard-sdk/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], - "@mapbox/node-pre-gyp/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + "@metorial/dashboard-sdk/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], - "@mapbox/node-pre-gyp/tar/chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + "@metorial/dashboard-sdk/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - "@mapbox/node-pre-gyp/tar/minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], + "@metorial/dashboard-sdk/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], - "@mapbox/node-pre-gyp/tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], + "@metorial/dashboard-sdk/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], - "@metorial-cargo/service/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/data-hooks/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-io/layout/react-router-dom/react-router": ["react-router@7.13.2", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-tX1Aee+ArlKQP+NIUd7SE6Li+CiGKwQtbS+FfRxPX6Pe4vHOo6nr9d++u5cwg+Z8K/x8tP+7qLmujDtfrAoUJA=="], + "@metorial/data-hooks/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-io/ui-product/react-router-dom/react-router": ["react-router@7.13.2", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-tX1Aee+ArlKQP+NIUd7SE6Li+CiGKwQtbS+FfRxPX6Pe4vHOo6nr9d++u5cwg+Z8K/x8tP+7qLmujDtfrAoUJA=="], + "@metorial/data-hooks/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/data-hooks/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/data-hooks/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/data-hooks/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/data-hooks/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/data-hooks/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/data-hooks/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], - "@metorial-platform-systems/ares-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/db/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], - "@metorial-platform-systems/ares-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/db/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/cargo-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/db/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/cargo-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/db/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/cargo-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/db/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/cargo-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/db/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/cargo-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/db/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/cargo-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/db/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/cargo-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/db/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/cargo-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/db/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/cargo-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/debug/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/forge-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/debug/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/forge-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/debug/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/forge-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/debug/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/forge-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/debug/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/forge-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/debug/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/forge-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/debug/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/forge-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/debug/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/forge-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/debug/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/forge-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/dynamic-component/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], - "@metorial-platform-systems/function-bay-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/dynamic-component/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/function-bay-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/dynamic-component/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/function-bay-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/dynamic-component/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/function-bay-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/dynamic-component/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/function-bay-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/dynamic-component/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/function-bay-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/dynamic-component/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/function-bay-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/dynamic-component/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/function-bay-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/dynamic-component/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/function-bay-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/dynamic-component/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/object-storage-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/event/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], - "@metorial-platform-systems/object-storage-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/event/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/object-storage-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/event/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/object-storage-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/event/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/object-storage-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/event/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/object-storage-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/event/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/object-storage-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/event/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/object-storage-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/event/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/object-storage-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/event/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/origin-client/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/event/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/origin-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/explorer/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], - "@metorial-platform-systems/origin-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/explorer/react-dom/scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], - "@metorial-platform-systems/origin-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/fabric/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/origin-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/fabric/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/origin-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/fabric/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/origin-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/fabric/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/origin-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/fabric/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/origin-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/fabric/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/origin-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/fabric/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/relay-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/fabric/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/relay-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/fabric/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/relay-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/frontend-config/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/relay-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/frontend-config/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/relay-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/frontend-config/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/relay-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/frontend-config/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/relay-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/frontend-config/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/relay-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/frontend-config/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/relay-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/frontend-config/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/shuttle-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/frontend-config/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/shuttle-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/frontend-config/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/shuttle-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/id/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/shuttle-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/id/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/shuttle-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/id/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/shuttle-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/id/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/shuttle-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/id/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/shuttle-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/id/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/shuttle-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/id/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/signal-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/id/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/signal-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/id/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/signal-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/internal-clients/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/signal-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/internal-clients/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/signal-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/internal-clients/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/signal-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/internal-clients/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/signal-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/internal-clients/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/signal-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/internal-clients/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/signal-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/internal-clients/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/slates-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/internal-clients/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/slates-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/internal-clients/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/slates-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/layout/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/slates-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/layout/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/slates-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/layout/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/slates-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/layout/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/slates-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/layout/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/slates-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/layout/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/slates-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/layout/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/subspace-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/layout/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/subspace-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/layout/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/subspace-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/lock/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/subspace-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/lock/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/subspace-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/lock/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/subspace-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/lock/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/subspace-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/lock/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/subspace-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/lock/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/subspace-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/lock/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/synthesis-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/lock/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/synthesis-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/lock/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/synthesis-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/logging/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/synthesis-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/logging/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/synthesis-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/logging/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/synthesis-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/logging/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/synthesis-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/logging/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/synthesis-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/logging/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/synthesis-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/logging/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-platform-systems/voyager-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/logging/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-platform-systems/voyager-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/logging/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-platform-systems/voyager-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/markdown/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-platform-systems/voyager-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/markdown/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-platform-systems/voyager-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/markdown/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-platform-systems/voyager-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/markdown/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-platform-systems/voyager-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/markdown/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-platform-systems/voyager-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/markdown/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-platform-systems/voyager-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/markdown/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-services/registry-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], + "@metorial/markdown/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-services/registry-client/@lowerdeck/rpc-server/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], + "@metorial/markdown/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-services/registry-client/@lowerdeck/rpc-server/@lowerdeck/execution-context": ["@lowerdeck/execution-context@1.1.0", "", { "dependencies": { "@lowerdeck/id": "^1.0.6", "@lowerdeck/sentry": "^1.0.2", "@opentelemetry/api": "^1.9.0" } }, "sha512-3aAgx6fiUF7Tduq1WR+GqGXZYaHhoM502/uwqQKtTOXsB6nyOp1NhOLHoU+ZZvZZflQ9ddpMwTCicjvQnmhXeA=="], + "@metorial/mcp-server/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-services/scout-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], + "@metorial/mcp-server/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-services/slates-registry-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/mcp-server/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-services/slates-registry-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/mcp-server/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-services/slates-registry-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/mcp-server/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-services/slates-registry-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/mcp-server/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-services/slates-registry-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/mcp-server/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-services/slates-registry-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/mcp-server/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-services/slates-registry-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/mcp-server/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-services/slates-registry-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/mcp-transport-memory/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-services/slates-registry-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/mcp-transport-memory/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-services/slates-registry-internal-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/mcp-transport-memory/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-services/slates-registry-internal-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/mcp-transport-memory/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-services/slates-registry-internal-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/mcp-transport-memory/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-services/slates-registry-internal-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/mcp-transport-memory/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-services/slates-registry-internal-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/mcp-transport-memory/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-services/slates-registry-internal-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/mcp-transport-memory/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-services/slates-registry-internal-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/mcp-transport-memory/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-services/slates-registry-internal-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/mcp-utils/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-services/slates-registry-internal-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/mcp-utils/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/conduit/vitest/@vitest/expect": ["@vitest/expect@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw=="], + "@metorial/mcp-utils/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/conduit/vitest/@vitest/mocker": ["@vitest/mocker@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg=="], + "@metorial/mcp-utils/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/conduit/vitest/@vitest/pretty-format": ["@vitest/pretty-format@2.1.9", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ=="], + "@metorial/mcp-utils/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/conduit/vitest/@vitest/runner": ["@vitest/runner@2.1.9", "", { "dependencies": { "@vitest/utils": "2.1.9", "pathe": "^1.1.2" } }, "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g=="], + "@metorial/mcp-utils/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/conduit/vitest/@vitest/snapshot": ["@vitest/snapshot@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "magic-string": "^0.30.12", "pathe": "^1.1.2" } }, "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ=="], + "@metorial/mcp-utils/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/conduit/vitest/@vitest/spy": ["@vitest/spy@2.1.9", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ=="], + "@metorial/mcp-utils/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/conduit/vitest/@vitest/utils": ["@vitest/utils@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ=="], + "@metorial/mcp-utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/conduit/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "@metorial/mcp/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/conduit/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/mcp/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/conduit/vitest/tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], + "@metorial/mcp/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/conduit/vitest/vite-node": ["vite-node@2.1.9", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA=="], + "@metorial/mcp/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/list-utils/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/mcp/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/list-utils/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/mcp/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/list-utils/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/mcp/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/list-utils/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/mcp/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/list-utils/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/mcp/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/list-utils/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/microfrontend/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], - "@metorial-subspace/list-utils/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/microfrontend/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/list-utils/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/microfrontend/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/list-utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/microfrontend/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-agent/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/microfrontend/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-agent/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/microfrontend/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-agent/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/microfrontend/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-agent/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/microfrontend/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-agent/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/microfrontend/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-agent/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/microfrontend/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-agent/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-access/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-agent/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-access/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-agent/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-access/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-access/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-access/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-access/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-access/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-access/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-access/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-assistant/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-assistant/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-assistant/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-callback/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-assistant/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-callback/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-assistant/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-callback/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-assistant/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-callback/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-assistant/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-callback/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-assistant/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-callback/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-assistant/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-callback/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-community/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-callback/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-community/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-callback/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-community/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-catalog/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-community/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-catalog/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-community/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-catalog/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-community/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-catalog/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-community/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-catalog/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-community/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-catalog/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-community/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-catalog/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-consumer/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-catalog/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-consumer/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-catalog/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-consumer/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-connection/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-consumer/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-connection/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-consumer/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-connection/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-consumer/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-connection/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-consumer/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-connection/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-consumer/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-connection/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-consumer/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-connection/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-email/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-connection/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-email/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-connection/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-email/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-custom-provider/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-email/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-custom-provider/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-email/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-custom-provider/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-email/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-custom-provider/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-email/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-custom-provider/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-email/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-custom-provider/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-email/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-custom-provider/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-event/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-custom-provider/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-event/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-custom-provider/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-event/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-deployment/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-event/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-deployment/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-event/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-deployment/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-event/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-deployment/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-event/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-deployment/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-event/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-deployment/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-event/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-deployment/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-file/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-deployment/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-file/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-deployment/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-file/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-identity/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-file/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-identity/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-file/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-identity/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-file/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-identity/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-file/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-identity/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-file/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-identity/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-file/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-identity/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-flags/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-identity/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-flags/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-identity/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-flags/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-integration/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-flags/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-integration/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-flags/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-integration/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-flags/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-integration/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-flags/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-integration/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-flags/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-integration/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-flags/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-integration/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-machine-access/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-integration/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-machine-access/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-integration/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-machine-access/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-provider-internal/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-machine-access/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-provider-internal/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-machine-access/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-provider-internal/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-machine-access/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-provider-internal/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-machine-access/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-provider-internal/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-machine-access/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-provider-internal/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-machine-access/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-provider-internal/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-magic/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], - "@metorial-subspace/module-provider-internal/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-magic/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], - "@metorial-subspace/module-provider-internal/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-magic/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], - "@metorial-subspace/module-session/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@metorial/module-magic/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-session/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-magic/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-session/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-magic/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-session/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-magic/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-session/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-magic/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-session/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-magic/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-session/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-magic/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-session/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-magic/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-session/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-magic/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-session/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-markdown/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], - "@metorial-subspace/module-skills/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-markdown/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], - "@metorial-subspace/module-skills/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-markdown/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], - "@metorial-subspace/module-skills/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-markdown/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-skills/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-markdown/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-skills/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-markdown/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-skills/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-markdown/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-skills/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-markdown/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-skills/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-markdown/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-skills/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-markdown/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial-subspace/module-tenant/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-markdown/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial-subspace/module-tenant/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-markdown/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial-subspace/module-tenant/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-organization/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial-subspace/module-tenant/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-organization/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial-subspace/module-tenant/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-organization/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial-subspace/module-tenant/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-organization/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial-subspace/module-tenant/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-organization/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial-subspace/module-tenant/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-organization/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial-subspace/module-tenant/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-organization/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/api-auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-organization/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/api-auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-organization/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/api-auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-protect/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/api-auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-protect/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/api-auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-protect/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/api-auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-protect/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/api-auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-protect/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/api-auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-protect/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/api-auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-protect/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/api-core/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-protect/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/api-core/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-protect/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/api-core/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-search/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/api-core/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-search/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/api-core/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-search/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/api-core/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-search/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/api-core/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-search/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/api-core/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-search/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/api-core/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-search/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/api-custom-portal/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-search/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/api-custom-portal/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-search/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/api-custom-portal/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-subspace/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/api-custom-portal/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-subspace/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/api-custom-portal/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-subspace/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/api-custom-portal/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-subspace/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/api-custom-portal/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-subspace/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/api-custom-portal/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-subspace/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/api-custom-portal/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-subspace/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/api-files/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-subspace/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/api-files/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-subspace/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/api-files/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-usage/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], - "@metorial/api-files/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-usage/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], - "@metorial/api-files/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-usage/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], - "@metorial/api-files/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-usage/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/api-files/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-usage/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/api-files/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-usage/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/api-files/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-usage/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/api-keys/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-usage/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/api-keys/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-usage/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/api-keys/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-usage/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/api-keys/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-usage/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/api-keys/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-usage/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/api-keys/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/module-user/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/api-keys/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/module-user/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/api-keys/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/module-user/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/api-keys/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/module-user/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/api-oauth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/module-user/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/api-oauth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/module-user/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/api-oauth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/module-user/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/api-oauth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/module-user/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/api-oauth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/module-user/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/api-oauth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], - "@metorial/api-oauth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/origin/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/api-oauth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/pages/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/api-oauth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/pages/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/app-api/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/pages/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/app-api/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/pages/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/app-api/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/pages/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/app-api/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/pages/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/app-api/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/pages/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/app-api/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/pages/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/app-api/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/pages/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/app-api/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/presenter/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/app-api/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/presenter/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/app-dashboard/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + "@metorial/presenter/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/app-dashboard/framer-motion/motion-dom": ["motion-dom@11.18.1", "", { "dependencies": { "motion-utils": "^11.18.1" } }, "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw=="], + "@metorial/presenter/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/app-dashboard/framer-motion/motion-utils": ["motion-utils@11.18.1", "", {}, "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA=="], + "@metorial/presenter/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/ares/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/presenter/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/ares/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + "@metorial/presenter/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/presenter/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/presenter/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/queue/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/queue/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/queue/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/queue/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/queue/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/queue/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/queue/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/bearer/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/queue/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/bearer/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/queue/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/bearer/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/redis/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], - "@metorial/bearer/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/redis/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/bearer/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/redis/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/bearer/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/redis/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/bearer/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/redis/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/bearer/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/redis/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/bearer/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/redis/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/cache/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/redis/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/cache/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/redis/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/cache/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/redis/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/cache/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/relay/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/cache/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/rest/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/cache/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/rest/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/cache/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/rest/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/cache/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/rest/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/cache/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/rest/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/chart/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/rest/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/chart/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/rest/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/chart/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/rest/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/chart/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/rest/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/chart/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/rpc/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/chart/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/rpc/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/chart/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/rpc/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/chart/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/rpc/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/chart/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/rpc/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/code-editor/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], + "@metorial/rpc/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/code-editor/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@metorial/rpc/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/code-editor/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + "@metorial/rpc/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/code-editor/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + "@metorial/rpc/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/code-editor/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + "@metorial/scene-assistant/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/code-editor/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + "@metorial/scene-assistant/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/code-editor/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], + "@metorial/scene-assistant/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/code-editor/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], + "@metorial/scene-assistant/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/code-editor/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], + "@metorial/scene-assistant/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/code-editor/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], + "@metorial/scene-assistant/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/code-editor/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], + "@metorial/scene-assistant/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/code-editor/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], + "@metorial/scene-assistant/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/code-editor/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "@metorial/scene-assistant/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/code-editor/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], + "@metorial/scene-docs/@tiptap/starter-kit/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], - "@metorial/code-editor/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], + "@metorial/scene-docs/@tiptap/starter-kit/@tiptap/extension-heading": ["@tiptap/extension-heading@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-JgJhurnCe3eN6a0lEsNQM/46R1bcwzwWWZEFDSb1P9dR8+t1/5v7cMZWsSInpD7R4/74iJn0+M5hcXLwCmBmYA=="], - "@metorial/code-workspace/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/scene-docs/@tiptap/starter-kit/@tiptap/pm": ["@tiptap/pm@3.20.0", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.24.1", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-jn+2KnQZn+b+VXr8EFOJKsnjVNaA4diAEr6FOazupMt8W8ro1hfpYtZ25JL87Kao/WbMze55sd8M8BDXLUKu1A=="], - "@metorial/code/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/scene-docs/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/code/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/scene-docs/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/code/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/scene-docs/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/code/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/scene-docs/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/code/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/scene-docs/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/code/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/scene-docs/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/code/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/scene-docs/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/code/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/scene-docs/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/code/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/scene-docs/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/config/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/scene-skills/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/config/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/scene-skills/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/config/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/scene-skills/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/config/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/scene-skills/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/config/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/scene-skills/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/config/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/scene-skills/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/config/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/scene-skills/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/config/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/scene-skills/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/config/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/scene-skills/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/consumer-auth/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/shuttle/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/consumer-auth/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/signal/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/consumer-auth/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/state/@metorial/generated/@metorial/util-endpoint": ["@metorial/util-endpoint@3.0.0", "", { "dependencies": { "@metorial/util-async-iterator": "^3.0.0", "@types/qs": "^6.14.0", "cross-fetch": "^4.1.0", "qs": "^6.13.1" } }, "sha512-uw+yw1xwa56jzG0H6iERK/FcuHhhz4n3sEWqyCG9bXhCGeMZSygls39mZB4qU+/Kb69N8deYnP0wSqoqvsO98Q=="], - "@metorial/consumer-auth/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/state/@metorial/generated/@metorial/util-resource-mapper": ["@metorial/util-resource-mapper@3.0.0", "", {}, "sha512-CiEVSUL9ncLQuIrZniE0lMkDdAJ9XUzd/rqwpxf0OV3yDZtdbTDP1Wo36b8tRndC1J5hyd1LVayxULQOXBCs4g=="], - "@metorial/consumer-auth/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/state/@metorial/generated/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], - "@metorial/consumer-auth/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/state/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/consumer-auth/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/state/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/consumer-auth/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/state/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/consumer-auth/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/state/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/consumer-sdk/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], + "@metorial/state/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/consumer-sdk/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@metorial/state/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/consumer-sdk/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + "@metorial/state/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/consumer-sdk/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + "@metorial/state/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/consumer-sdk/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + "@metorial/state/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/consumer-sdk/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + "@metorial/storage/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/consumer-sdk/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], + "@metorial/storage/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/consumer-sdk/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], + "@metorial/storage/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/consumer-sdk/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], + "@metorial/storage/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/consumer-sdk/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], + "@metorial/storage/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/consumer-sdk/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], + "@metorial/storage/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/consumer-sdk/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], + "@metorial/storage/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/consumer-sdk/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "@metorial/storage/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/consumer-sdk/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], + "@metorial/storage/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/consumer-sdk/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], + "@metorial/synthesis/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/context/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/ui-product/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/context/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/ui-product/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/context/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/ui-product/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/context/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/ui-product/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/context/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/ui-product/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/context/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/ui-product/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/context/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/ui-product/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/context/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/ui-product/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/context/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/ui-product/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/cron/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@metorial/unified-id/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/cron/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@metorial/unified-id/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/cron/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@metorial/unified-id/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/cron/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@metorial/unified-id/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/cron/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@metorial/unified-id/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/cron/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@metorial/unified-id/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/cron/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@metorial/unified-id/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/cron/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@metorial/unified-id/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/cron/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/unified-id/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/dashboard-sdk/tsup/bundle-require": ["bundle-require@4.2.1", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.17" } }, "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA=="], + "@metorial/voyager/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/dashboard-sdk/tsup/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@mtsrc/anonymize-ip/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/dashboard-sdk/tsup/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + "@mtsrc/anonymize-ip/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/dashboard-sdk/tsup/postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + "@mtsrc/anonymize-ip/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/dashboard-sdk/tsup/source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + "@mtsrc/anonymize-ip/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/dashboard-sdk/vitest/@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], + "@mtsrc/anonymize-ip/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/dashboard-sdk/vitest/@vitest/expect": ["@vitest/expect@0.34.6", "", { "dependencies": { "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "chai": "^4.3.10" } }, "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw=="], + "@mtsrc/anonymize-ip/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/dashboard-sdk/vitest/@vitest/runner": ["@vitest/runner@0.34.6", "", { "dependencies": { "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" } }, "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ=="], + "@mtsrc/anonymize-ip/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/dashboard-sdk/vitest/@vitest/snapshot": ["@vitest/snapshot@0.34.6", "", { "dependencies": { "magic-string": "^0.30.1", "pathe": "^1.1.1", "pretty-format": "^29.5.0" } }, "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w=="], + "@mtsrc/anonymize-ip/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/dashboard-sdk/vitest/@vitest/spy": ["@vitest/spy@0.34.6", "", { "dependencies": { "tinyspy": "^2.1.1" } }, "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ=="], + "@mtsrc/anonymize-ip/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/dashboard-sdk/vitest/@vitest/utils": ["@vitest/utils@0.34.6", "", { "dependencies": { "diff-sequences": "^29.4.3", "loupe": "^2.3.6", "pretty-format": "^29.5.0" } }, "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A=="], + "@mtsrc/api-key/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/dashboard-sdk/vitest/chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], + "@mtsrc/api-key/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/dashboard-sdk/vitest/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "@mtsrc/api-key/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/dashboard-sdk/vitest/tinypool": ["tinypool@0.7.0", "", {}, "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww=="], + "@mtsrc/api-key/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/dashboard-sdk/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], + "@mtsrc/api-key/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/data-hooks/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/api-key/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/data-hooks/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/api-key/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/data-hooks/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/api-key/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/data-hooks/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/api-key/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/data-hooks/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/api-mux/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/data-hooks/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/api-mux/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/data-hooks/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/api-mux/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/data-hooks/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/api-mux/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/data-hooks/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/api-mux/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], + "@mtsrc/api-mux/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/db/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@mtsrc/api-mux/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/db/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/api-mux/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/db/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/api-mux/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/db/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/base62/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/db/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/base62/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/db/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/base62/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/db/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/base62/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/db/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/base62/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/db/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/base62/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/db/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/base62/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/debug/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/base62/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/debug/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/base62/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/debug/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/cache/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/debug/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/cache/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/debug/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/cache/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/debug/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/cache/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/debug/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/cache/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/debug/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/cache/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/debug/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/cache/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/dynamic-component/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@mtsrc/cache/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/dynamic-component/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/cache/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/dynamic-component/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/canonicalize/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/dynamic-component/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/canonicalize/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/dynamic-component/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/canonicalize/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/dynamic-component/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/canonicalize/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/dynamic-component/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/canonicalize/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/dynamic-component/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/canonicalize/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/dynamic-component/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/canonicalize/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/dynamic-component/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/canonicalize/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/event/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@mtsrc/canonicalize/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/event/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/case/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/event/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/case/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/event/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/case/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/event/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/case/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/event/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/case/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/event/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/case/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/event/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/case/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/event/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/case/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/event/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/case/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/explorer/@vitejs/plugin-react/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + "@mtsrc/cron/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/explorer/react-dom/scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], + "@mtsrc/cron/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/fabric/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/cron/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/fabric/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/cron/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/fabric/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/cron/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/fabric/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/cron/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/fabric/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/cron/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/fabric/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/cron/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/fabric/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/cron/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/fabric/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/delay/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/fabric/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/delay/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/frontend-config/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/delay/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/frontend-config/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/delay/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/frontend-config/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/delay/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/frontend-config/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/delay/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/frontend-config/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/delay/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/frontend-config/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/delay/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/frontend-config/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/delay/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/frontend-config/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/emitter/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/frontend-config/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/emitter/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/id/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/emitter/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/id/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/emitter/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/id/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/emitter/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/id/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/emitter/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/id/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/emitter/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/id/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/emitter/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/id/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/emitter/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/id/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/encryption/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/id/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/encryption/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/internal-clients/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/encryption/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/internal-clients/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/encryption/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/internal-clients/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/encryption/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/internal-clients/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/encryption/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/internal-clients/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/encryption/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/internal-clients/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/encryption/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/internal-clients/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/encryption/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/internal-clients/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/env/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/internal-clients/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/env/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/layout/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/env/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/layout/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/env/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/layout/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/env/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/layout/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/env/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/layout/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/env/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/layout/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/env/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/layout/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/env/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/layout/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/error/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/layout/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/error/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/lock/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/error/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/lock/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/error/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/lock/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/error/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/lock/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/error/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/lock/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/error/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/lock/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/error/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/lock/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/error/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/lock/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/event/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/lock/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/event/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/logging/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/event/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/logging/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/event/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/logging/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/event/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/logging/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/event/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/logging/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/event/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/logging/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/event/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/logging/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/event/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/logging/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/execution-context/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/logging/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/execution-context/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/markdown/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/execution-context/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/markdown/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/execution-context/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/markdown/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/execution-context/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/markdown/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/execution-context/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/markdown/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/execution-context/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/markdown/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/execution-context/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/markdown/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/execution-context/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/markdown/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/flatten/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/markdown/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/flatten/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/mcp-server/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/flatten/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/mcp-server/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/flatten/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/mcp-server/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/flatten/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/mcp-server/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/flatten/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/mcp-server/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/flatten/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/mcp-server/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/flatten/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/mcp-server/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/flatten/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/mcp-server/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/forwarded-for/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/mcp-server/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/forwarded-for/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/mcp-transport-memory/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/forwarded-for/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/mcp-transport-memory/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/forwarded-for/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/mcp-transport-memory/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/forwarded-for/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/mcp-transport-memory/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/forwarded-for/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/mcp-transport-memory/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/forwarded-for/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/mcp-transport-memory/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/forwarded-for/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/mcp-transport-memory/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/forwarded-for/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/mcp-transport-memory/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/hash/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/mcp-transport-memory/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/hash/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/mcp-utils/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/hash/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/mcp-utils/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/hash/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/mcp-utils/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/hash/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/mcp-utils/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/hash/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/mcp-utils/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/hash/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/mcp-utils/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/hash/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/mcp-utils/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/hash/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/mcp-utils/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/hono/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/mcp-utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/hono/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/mcp/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/hono/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/mcp/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/hono/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/mcp/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/hono/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/mcp/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/hono/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/mcp/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/hono/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/mcp/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/hono/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/mcp/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/hono/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/mcp/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/id/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/mcp/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/id/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/microfrontend/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@mtsrc/id/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/microfrontend/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/id/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/microfrontend/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/id/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/microfrontend/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/id/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/microfrontend/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/id/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/microfrontend/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/id/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/microfrontend/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/id/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/microfrontend/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/ip-info/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/microfrontend/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/ip-info/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/microfrontend/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/ip-info/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-access/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/ip-info/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-access/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/ip-info/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-access/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/ip-info/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-access/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/ip-info/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-access/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/ip-info/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-access/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/ip-info/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-access/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/join-paths/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-access/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/join-paths/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-access/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/join-paths/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-assistant/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/join-paths/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-assistant/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/join-paths/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-assistant/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/join-paths/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-assistant/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/join-paths/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-assistant/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/join-paths/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-assistant/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/join-paths/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-assistant/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/jwt/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-assistant/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/jwt/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-assistant/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/jwt/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-community/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/jwt/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-community/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/jwt/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-community/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/jwt/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-community/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/jwt/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-community/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/jwt/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-community/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/jwt/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-community/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/lock/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-community/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/lock/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-community/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/lock/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-consumer/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/lock/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-consumer/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/lock/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-consumer/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/lock/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-consumer/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/lock/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-consumer/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/lock/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-consumer/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/lock/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-consumer/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/memo/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-consumer/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/memo/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-consumer/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/memo/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-email/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/memo/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-email/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/memo/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-email/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/memo/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-email/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/memo/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-email/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/memo/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-email/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/memo/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-email/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/merge/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-email/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/merge/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-email/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/merge/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-event/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/merge/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-event/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/merge/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-event/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/merge/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-event/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/merge/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-event/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/merge/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-event/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/merge/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-event/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/murmur3/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-event/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/murmur3/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-event/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/murmur3/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-file/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/murmur3/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-file/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/murmur3/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-file/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/murmur3/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-file/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/murmur3/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-file/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/murmur3/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-file/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/murmur3/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-file/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/normalize-email/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-file/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/normalize-email/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-file/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/normalize-email/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-flags/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/normalize-email/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-flags/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/normalize-email/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-flags/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/normalize-email/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-flags/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/normalize-email/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-flags/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/normalize-email/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-flags/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/normalize-email/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-flags/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/once/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-flags/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/once/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-flags/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/once/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-machine-access/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/once/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-machine-access/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/once/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-machine-access/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/once/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-machine-access/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/once/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-machine-access/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/once/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-machine-access/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/once/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-machine-access/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/pagination/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-machine-access/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/pagination/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-machine-access/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/pagination/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-magic/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], + "@mtsrc/pagination/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-magic/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], + "@mtsrc/pagination/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-magic/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], + "@mtsrc/pagination/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-magic/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/pagination/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-magic/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/pagination/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-magic/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/pagination/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-magic/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/presenter/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-magic/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/presenter/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-magic/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/presenter/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-magic/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/presenter/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-magic/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/presenter/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-magic/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/presenter/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-markdown/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], + "@mtsrc/presenter/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-markdown/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], + "@mtsrc/presenter/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-markdown/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], + "@mtsrc/presenter/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-markdown/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/programmable-promise/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-markdown/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/programmable-promise/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-markdown/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/programmable-promise/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-markdown/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/programmable-promise/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-markdown/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/programmable-promise/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-markdown/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/programmable-promise/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-markdown/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/programmable-promise/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-markdown/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/programmable-promise/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-markdown/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/programmable-promise/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-organization/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/proxy/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-organization/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/proxy/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-organization/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/proxy/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-organization/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/proxy/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-organization/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/proxy/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-organization/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/proxy/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-organization/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/proxy/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-organization/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/proxy/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-organization/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/proxy/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-protect/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/queue/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-protect/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/queue/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-protect/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/queue/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-protect/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/queue/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-protect/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/queue/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-protect/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/queue/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-protect/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/queue/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-protect/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/queue/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-protect/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/queue/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-search/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/random-from-array/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-search/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/random-from-array/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-search/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/random-from-array/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-search/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/random-from-array/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-search/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/random-from-array/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-search/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/random-from-array/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-search/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/random-from-array/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-search/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/random-from-array/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-search/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/random-from-array/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-subspace/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/random-number/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-subspace/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/random-number/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-subspace/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/random-number/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-subspace/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/random-number/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-subspace/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/random-number/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-subspace/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/random-number/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-subspace/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/random-number/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-subspace/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/random-number/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-subspace/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/random-number/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-usage/mongoose/kareem": ["kareem@2.6.3", "", {}, "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q=="], + "@mtsrc/redis/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-usage/mongoose/mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], + "@mtsrc/redis/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-usage/mongoose/mquery": ["mquery@5.0.0", "", { "dependencies": { "debug": "4.x" } }, "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="], + "@mtsrc/redis/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-usage/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/redis/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-usage/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/redis/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-usage/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/redis/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-usage/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/redis/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-usage/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/redis/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-usage/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/redis/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-usage/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/rpc-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-usage/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/rpc-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-usage/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/rpc-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/module-user/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/rpc-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/module-user/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/rpc-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/module-user/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/rpc-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/module-user/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/rpc-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/module-user/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/rpc-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/module-user/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/rpc-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/module-user/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/rpc-server/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/module-user/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/rpc-server/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/module-user/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/rpc-server/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], + "@mtsrc/rpc-server/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/origin/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@mtsrc/rpc-server/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/pages/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/rpc-server/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/pages/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/rpc-server/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/pages/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/rpc-server/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/pages/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/rpc-server/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/pages/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/sentry/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/pages/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/sentry/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/pages/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/sentry/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/pages/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/sentry/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/pages/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/sentry/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/presenter/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/sentry/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/presenter/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/sentry/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/presenter/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/sentry/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/presenter/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/sentry/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/presenter/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/serialize/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/presenter/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/serialize/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/presenter/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/serialize/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/presenter/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/serialize/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/presenter/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/serialize/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/queue/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/serialize/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/queue/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/serialize/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/queue/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/serialize/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/queue/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/serialize/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/queue/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/service/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/queue/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/service/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/queue/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/service/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/queue/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/service/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/queue/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/service/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/redis/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "@mtsrc/service/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/redis/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/service/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/redis/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/service/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/redis/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/service/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/redis/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/shadow-id/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/redis/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/shadow-id/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/redis/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/shadow-id/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/redis/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/shadow-id/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/redis/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/shadow-id/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/redis/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/shadow-id/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/relay/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@mtsrc/shadow-id/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/rest/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/shadow-id/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/rest/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/shadow-id/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/rest/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/sign/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/rest/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/sign/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/rest/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/sign/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/rest/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/sign/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/rest/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/sign/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/rest/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/sign/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/rest/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/sign/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/rpc/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/sign/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/rpc/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/sign/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/rpc/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/slugify/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/rpc/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/slugify/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/rpc/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/slugify/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/rpc/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/slugify/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/rpc/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/slugify/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/rpc/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/slugify/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/rpc/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/slugify/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/scene-assistant/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/slugify/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/scene-assistant/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/slugify/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/scene-assistant/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/snowflake/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/scene-assistant/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/snowflake/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/scene-assistant/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/snowflake/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/scene-assistant/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/snowflake/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/scene-assistant/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/snowflake/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/scene-assistant/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/snowflake/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/scene-assistant/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/snowflake/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/scene-docs/@tiptap/starter-kit/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], + "@mtsrc/snowflake/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/scene-docs/@tiptap/starter-kit/@tiptap/extension-heading": ["@tiptap/extension-heading@3.20.0", "", { "peerDependencies": { "@tiptap/core": "^3.20.0" } }, "sha512-JgJhurnCe3eN6a0lEsNQM/46R1bcwzwWWZEFDSb1P9dR8+t1/5v7cMZWsSInpD7R4/74iJn0+M5hcXLwCmBmYA=="], + "@mtsrc/snowflake/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/scene-docs/@tiptap/starter-kit/@tiptap/pm": ["@tiptap/pm@3.20.0", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.24.1", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-jn+2KnQZn+b+VXr8EFOJKsnjVNaA4diAEr6FOazupMt8W8ro1hfpYtZ25JL87Kao/WbMze55sd8M8BDXLUKu1A=="], + "@mtsrc/telemetry/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/scene-docs/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/telemetry/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/scene-docs/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/telemetry/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/scene-docs/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/telemetry/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/scene-docs/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/telemetry/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/scene-docs/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/telemetry/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/scene-docs/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/telemetry/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/scene-docs/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/telemetry/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/scene-docs/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/telemetry/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/scene-docs/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/testing-tools/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/scene-skills/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/testing-tools/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/scene-skills/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/testing-tools/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/scene-skills/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/testing-tools/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/scene-skills/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/testing-tools/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/scene-skills/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/testing-tools/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/scene-skills/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/testing-tools/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/scene-skills/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/testing-tools/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/scene-skills/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/testing-tools/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/scene-skills/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/timezone/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/shuttle/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@mtsrc/timezone/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/signal/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@mtsrc/timezone/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/slates/@metorial-services/slates-registry-client/@lowerdeck/rpc-client": ["@lowerdeck/rpc-client@1.1.3", "", { "dependencies": { "@lowerdeck/canonicalize": "^1.0.4", "@lowerdeck/error": "^1.2.2", "@lowerdeck/id": "^1.0.8", "@lowerdeck/memo": "^1.0.4", "@lowerdeck/proxy": "^1.0.4", "@lowerdeck/serialize": "^1.0.4", "@opentelemetry/api": "^1.9.0" } }, "sha512-ux7CnuAqOEBKnaOkWWdDIPMcd4bOgjVFUjZ3TGHI0Ztgmk6P8gnCDsYDKzWnTlLLc3E7n7zHDwx3G6nUFSHDqA=="], + "@mtsrc/timezone/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/state/@metorial/generated/@metorial/util-endpoint": ["@metorial/util-endpoint@3.0.0", "", { "dependencies": { "@metorial/util-async-iterator": "^3.0.0", "@types/qs": "^6.14.0", "cross-fetch": "^4.1.0", "qs": "^6.13.1" } }, "sha512-uw+yw1xwa56jzG0H6iERK/FcuHhhz4n3sEWqyCG9bXhCGeMZSygls39mZB4qU+/Kb69N8deYnP0wSqoqvsO98Q=="], + "@mtsrc/timezone/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/state/@metorial/generated/@metorial/util-resource-mapper": ["@metorial/util-resource-mapper@3.0.0", "", {}, "sha512-CiEVSUL9ncLQuIrZniE0lMkDdAJ9XUzd/rqwpxf0OV3yDZtdbTDP1Wo36b8tRndC1J5hyd1LVayxULQOXBCs4g=="], + "@mtsrc/timezone/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/state/@metorial/generated/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], + "@mtsrc/timezone/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/state/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/timezone/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/state/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/timezone/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/state/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/tokens/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/state/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/tokens/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/state/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/tokens/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/state/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/tokens/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/state/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/tokens/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/state/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/tokens/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/state/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/tokens/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/storage/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/tokens/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/storage/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/tokens/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/storage/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/unique/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/storage/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/unique/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/storage/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/unique/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/storage/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/unique/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/storage/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/unique/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/storage/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/unique/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/storage/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/unique/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/synthesis/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@mtsrc/unique/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/ui-product/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/unique/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/ui-product/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/validation/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/ui-product/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/validation/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/ui-product/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/validation/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/ui-product/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/validation/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/ui-product/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/validation/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/ui-product/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/validation/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/ui-product/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/validation/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/ui-product/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/validation/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/unified-id/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + "@mtsrc/validation/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/unified-id/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@mtsrc/websocket-client/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - "@metorial/unified-id/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@mtsrc/websocket-client/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - "@metorial/unified-id/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@mtsrc/websocket-client/vitest/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - "@metorial/unified-id/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@mtsrc/websocket-client/vitest/@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - "@metorial/unified-id/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + "@mtsrc/websocket-client/vitest/@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - "@metorial/unified-id/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@mtsrc/websocket-client/vitest/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - "@metorial/unified-id/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "@mtsrc/websocket-client/vitest/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@metorial/unified-id/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@mtsrc/websocket-client/vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "@metorial/voyager/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@mtsrc/websocket-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], @@ -12422,48 +14239,92 @@ "@opentelemetry/instrumentation-amqplib/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-amqplib/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-connect/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-connect/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-dataloader/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-dataloader/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-express/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-express/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-fs/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-fs/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-generic-pool/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-generic-pool/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-graphql/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-graphql/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-hapi/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-hapi/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-http/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-http/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-ioredis/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-ioredis/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-kafkajs/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-kafkajs/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-knex/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-knex/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-koa/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-koa/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-lru-memoizer/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-lru-memoizer/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-mongodb/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-mongodb/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-mongoose/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-mongoose/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-mysql/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-mysql/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-mysql2/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-mysql2/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-pg/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-pg/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-redis/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-redis/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-tedious/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-tedious/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/instrumentation-undici/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@opentelemetry/instrumentation-undici/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.0.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg=="], + "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.1", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-I4PHczeujhQAQv6ZBzqHYEUiggZL4IdSMixtVD3EYqbdrjujE7kRfI5QohjlPoJm8BvenoW5YaTMWRrbpot6tg=="], @@ -12482,8 +14343,6 @@ "@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.207.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ=="], - "@prisma/instrumentation/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@2.0.6", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw=="], - "@radix-ui/react-visually-hidden/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], "@rollup/plugin-babel/@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], @@ -12950,8 +14809,6 @@ "@inquirer/core/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@lowerdeck/lock/@types/bun/bun-types/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial-platform-systems/ares-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -13004,8 +14861,6 @@ "@metorial-platform-systems/voyager-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial-services/scout-client/@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "@metorial-services/slates-registry-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial-services/slates-registry-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -13516,8 +15371,6 @@ "@metorial/scene-skills/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/slates/@metorial-services/slates-registry-client/@lowerdeck/rpc-client/@lowerdeck/error": ["@lowerdeck/error@1.2.2", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.8" } }, "sha512-elbVMzRrKlN+/hk4s9sh0Sysc7Sxtmt7qj+qOWSH0U7h9gwfkFDCPSkJkhuNtHYUvDwe5LyoXPXO+o0LpBaRqw=="], - "@metorial/state/@metorial/generated/@metorial/util-endpoint/@metorial/util-async-iterator": ["@metorial/util-async-iterator@3.0.0", "", {}, "sha512-XaPNjifR7u0TAboXy0Axw8nrCNV5gU7i+TVFRXiBqR5zzz8+mu0FWqaTB9yw2VrjP4FKkHC+2GI8Vxg/CgH5Og=="], "@metorial/state/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], @@ -13536,6 +15389,218 @@ "@metorial/unified-id/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@mtsrc/anonymize-ip/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/anonymize-ip/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/api-key/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/api-key/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/api-mux/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/api-mux/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/base62/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/base62/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/cache/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/cache/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/canonicalize/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/canonicalize/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/case/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/case/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/cron/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/cron/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/delay/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/delay/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/emitter/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/emitter/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/encryption/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/encryption/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/env/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/env/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/error/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/error/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/event/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/event/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/execution-context/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/execution-context/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/flatten/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/flatten/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/forwarded-for/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/forwarded-for/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/hash/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/hash/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/hono/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/hono/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/id/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/id/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/ip-info/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/ip-info/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/join-paths/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/join-paths/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/jwt/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/jwt/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/lock/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/lock/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/memo/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/memo/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/merge/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/merge/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/murmur3/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/murmur3/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/normalize-email/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/normalize-email/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/once/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/once/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/pagination/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/pagination/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/presenter/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/presenter/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/programmable-promise/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/programmable-promise/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/proxy/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/proxy/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/queue/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/queue/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/random-from-array/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/random-from-array/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/random-number/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/random-number/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/redis/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/redis/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/rpc-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/rpc-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/rpc-server/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/rpc-server/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/sentry/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/sentry/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/serialize/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/serialize/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/service/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/service/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/shadow-id/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/shadow-id/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/sign/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/sign/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/slugify/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/slugify/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/snowflake/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/snowflake/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/telemetry/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/telemetry/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/testing-tools/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/testing-tools/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/timezone/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/timezone/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/tokens/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/tokens/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/unique/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/unique/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/validation/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/validation/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "@mtsrc/websocket-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@mtsrc/websocket-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@opentelemetry/exporter-metrics-otlp-grpc/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], @@ -13736,8 +15801,6 @@ "@inquirer/core/wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "@lowerdeck/lock/@types/bun/bun-types/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], "@metorial-platform-systems/cargo-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], @@ -13922,8 +15985,6 @@ "@metorial/scene-skills/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@metorial/slates/@metorial-services/slates-registry-client/@lowerdeck/rpc-client/@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], - "@metorial/state/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], "@metorial/storage/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], @@ -13932,6 +15993,112 @@ "@metorial/unified-id/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@mtsrc/anonymize-ip/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/api-key/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/api-mux/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/base62/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/cache/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/canonicalize/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/case/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/cron/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/delay/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/emitter/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/encryption/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/env/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/error/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/event/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/execution-context/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/flatten/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/forwarded-for/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/hash/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/hono/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/id/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/ip-info/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/join-paths/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/jwt/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/lock/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/memo/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/merge/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/murmur3/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/normalize-email/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/once/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/pagination/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/presenter/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/programmable-promise/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/proxy/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/queue/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/random-from-array/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/random-number/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/redis/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/rpc-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/rpc-server/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/sentry/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/serialize/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/service/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/shadow-id/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/sign/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/slugify/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/snowflake/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/telemetry/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/testing-tools/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/timezone/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/tokens/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/unique/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/validation/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "@mtsrc/websocket-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "eslint/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], diff --git a/package.json b/package.json index dd1b41578..64e8c7e6d 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "src/backend/*/*", "src/packages/*", "src/packages/*/*", + "src/_shared/*/*", "src/systems/*/*", "src/systems/_clients/*", "src/systems/*/*/*", diff --git a/src/_shared/backend/api-key/package.json b/src/_shared/backend/api-key/package.json new file mode 100644 index 000000000..097066680 --- /dev/null +++ b/src/_shared/backend/api-key/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/api-key", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/id": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4" + } +} diff --git a/src/_shared/backend/api-key/src/base62.test.ts b/src/_shared/backend/api-key/src/base62.test.ts new file mode 100644 index 000000000..8f113daee --- /dev/null +++ b/src/_shared/backend/api-key/src/base62.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, test } from 'vitest'; +import { decodeBase62, encodeBase62 } from './base62'; + +describe('base62', () => { + test('should encode strings', () => { + expect(encodeBase62('foo')).toBe('SAPP'); + expect(encodeBase62('bar')).toBe('R3HW'); + }); + + test('should decode strings', () => { + expect(decodeBase62('SAPP')).toBe('foo'); + expect(decodeBase62('R3HW')).toBe('bar'); + }); + + test('should encode and decode strings', () => { + expect(decodeBase62(encodeBase62('foo'))).toBe('foo'); + expect(decodeBase62(encodeBase62('bar'))).toBe('bar'); + }); + + test('should encode and decode buffers', () => { + const buffer = Buffer.from('hello'); + expect(decodeBase62(encodeBase62(buffer))).toBe('hello'); + }); + + test('should handle empty strings', () => { + expect(encodeBase62('\0')).toBe('0'); + expect(decodeBase62('0')).toBe('\0'); + }); + + test('should throw error for invalid characters in decode', () => { + expect(() => decodeBase62('!@#$')).toThrow('Invalid character'); + }); + + test('should handle large inputs', () => { + const largeInput = 'a'.repeat(100); + expect(decodeBase62(encodeBase62(largeInput))).toBe(largeInput); + }); +}); diff --git a/src/_shared/backend/api-key/src/base62.ts b/src/_shared/backend/api-key/src/base62.ts new file mode 100644 index 000000000..13cdf3a66 --- /dev/null +++ b/src/_shared/backend/api-key/src/base62.ts @@ -0,0 +1,34 @@ +const BASE62_ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; + +export let encodeBase62 = (buffer: Buffer | string) => { + buffer = Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer); + + let bigint = BigInt('0x' + (buffer.toString('hex') || '0')); + if (bigint === 0n) return '0'; + + let result = ''; + let base = BigInt(62); + + while (bigint > 0n) { + let remainder = bigint % base; + result = BASE62_ALPHABET[Number(remainder)] + result; + bigint = bigint / base; + } + + return result; +}; + +export let decodeBase62 = (encoded: string) => { + let bigint = 0n; + let base = BigInt(62); + + for (let i = 0; i < encoded.length; i++) { + let index = BASE62_ALPHABET.indexOf(encoded[i]!); + if (index === -1) throw new Error('Invalid character'); + bigint = bigint * base + BigInt(index); + } + + let hex = bigint.toString(16); + if (hex.length % 2) hex = '0' + hex; + return Buffer.from(hex, 'hex').toString(); +}; diff --git a/src/_shared/backend/api-key/src/index.ts b/src/_shared/backend/api-key/src/index.ts new file mode 100644 index 000000000..d2defee58 --- /dev/null +++ b/src/_shared/backend/api-key/src/index.ts @@ -0,0 +1 @@ +export * from './keys'; diff --git a/src/_shared/backend/api-key/src/keys.ts b/src/_shared/backend/api-key/src/keys.ts new file mode 100644 index 000000000..456380657 --- /dev/null +++ b/src/_shared/backend/api-key/src/keys.ts @@ -0,0 +1,135 @@ +import { generatePlainId } from '@mtsrc/id'; +import { decodeBase62, encodeBase62 } from './base62'; + +export type ApiKeyVersions = 'v1'; + +// export type ApiKeyType = +// | 'user_auth_token' +// | 'organization_management_token' +// | 'organization_app_access_token' +// | 'instance_access_token_secret' +// | 'instance_access_token_publishable' +// | 'ephemeral_client_secret' +// | 'magic_mcp_token_secret'; + +// let keyTypes = { +// uk: 'user_auth_token', +// lk: 'organization_management_token', +// ak: 'organization_app_access_token', +// sk: 'instance_access_token_secret', +// pk: 'instance_access_token_publishable', +// ek: 'ephemeral_client_secret', +// mk: 'magic_mcp_token_secret' +// } as const; + +type ApiKeyConfig = { + url: string; +}; + +export let createApiKeyGenerator = < + Types extends Record, + Prefix extends string +>( + keyTypes: Types, + opts: { + prefix: Prefix; + secretLength?: number; + } +) => { + const METORIAL_PREFIX = opts.prefix; + const SECRET_KEY_LENGTH = opts.secretLength || 60; + + type ApiKeyType = Types[keyof Types]; + + let keyTypesReverse = Object.fromEntries( + Object.entries(keyTypes).map(([key, value]) => [value, key]) + ) as Record; + + // type ApiKeyPrefix = `${Prefix}_${keyof typeof keyTypes & string}_`; + // type ApiKey = `${ApiKeyPrefix}${string}`; + + let parseApiKey = (key: string) => { + let parts = key.split('_'); + if (parts[0] != METORIAL_PREFIX) return null; + + let type = keyTypes[parts[1] as keyof typeof keyTypes]; + if (!type) return null; + + let rest = parts.slice(2).join('_'); + + let version = rest.slice(-2); + if (version != 'v1') return null; + + let secret = rest.slice(0, SECRET_KEY_LENGTH); + if (secret.length != SECRET_KEY_LENGTH) return null; + + let configStr = rest.slice(SECRET_KEY_LENGTH, -2); + let config: ApiKeyConfig | undefined = undefined; + + try { + let configDecoded = JSON.parse(decodeBase62(configStr)); + if ( + !Array.isArray(configDecoded) || + configDecoded.length != 1 || + typeof configDecoded[0] != 'string' + ) { + return null; + } + + config = { + url: configDecoded[0] + }; + } catch (e) { + return null; + } + + return { + type, + secret, + config, + version: version as ApiKeyVersions + }; + }; + + return class UnifiedApiKey { + private constructor( + public readonly type: ApiKeyType, + public readonly _secret: string, + public readonly config: ApiKeyConfig, + public readonly version: ApiKeyVersions + ) {} + + static from(key: string) { + let parsed = parseApiKey(key); + if (!parsed) return null; + + return new UnifiedApiKey(parsed.type, parsed.secret, parsed.config, parsed.version); + } + + static create(d: { type: ApiKeyType; config: ApiKeyConfig; secret?: string }) { + if (d.secret && d.secret.length != SECRET_KEY_LENGTH) { + throw new Error(`Secret key must be ${SECRET_KEY_LENGTH} characters long`); + } + + let secret = d.secret ? d.secret : generatePlainId(SECRET_KEY_LENGTH); + + return new UnifiedApiKey(d.type, secret, d.config, 'v1'); + } + + static redact(key: string | UnifiedApiKey) { + let parts = key.toString().split('_'); + if (parts[0] != METORIAL_PREFIX) return key.toString(); + + let [metorial, type, ...rest] = parts; + let secret = rest.join('_'); + + return `${metorial}_${type}_${secret.slice(0, 4)}...${secret.slice(-4)}`; + } + + toString() { + let config = encodeBase62(JSON.stringify([this.config.url])); + + return `${METORIAL_PREFIX}_${keyTypesReverse[this.type] as string}_${this._secret}${config}v1`; + } + }; +}; diff --git a/src/_shared/backend/api-key/tsconfig.json b/src/_shared/backend/api-key/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/api-key/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/api-key/tsup.config.js b/src/_shared/backend/api-key/tsup.config.js new file mode 100644 index 000000000..4e2a3d688 --- /dev/null +++ b/src/_shared/backend/api-key/tsup.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: true, + dts: true +}); diff --git a/src/_shared/backend/api-mux/package.json b/src/_shared/backend/api-mux/package.json new file mode 100644 index 000000000..409ca0067 --- /dev/null +++ b/src/_shared/backend/api-mux/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/api-mux", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/error": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4" + } +} diff --git a/src/_shared/backend/api-mux/src/index.ts b/src/_shared/backend/api-mux/src/index.ts new file mode 100644 index 000000000..fa5d671e3 --- /dev/null +++ b/src/_shared/backend/api-mux/src/index.ts @@ -0,0 +1 @@ +export * from './mux'; diff --git a/src/_shared/backend/api-mux/src/mux.ts b/src/_shared/backend/api-mux/src/mux.ts new file mode 100644 index 000000000..d95faa5a7 --- /dev/null +++ b/src/_shared/backend/api-mux/src/mux.ts @@ -0,0 +1,54 @@ +import { notFoundError } from '@mtsrc/error'; + +export let apiMux = ( + services: { + domains?: string[]; + methods?: string[]; + endpoint: { path: string | string[]; fetch: (req: any) => Promise; exact?: boolean }; + }[], + fallback?: (req: any, server: any) => Promise +) => { + let servicesWithRegex = services.flatMap(({ domains, endpoint, methods }) => + (Array.isArray(endpoint.path) ? endpoint.path : [endpoint.path]).map(path => { + return { + path, + domains, + endpoint, + exact: endpoint.exact, + methods: methods?.map(m => m.toUpperCase()) + }; + }) + ); + + return (req: Request, server: any) => { + let url = new URL(req.url); + let host = + (req.headers.get('x-host') ?? req.headers.get('host') ?? url.hostname).split(':')[0] ?? + url.hostname; + url.host = host; + + if (url.pathname == '/ping') { + return new Response('OK') as any; + } + + for (let { domains, endpoint, path, methods, exact } of servicesWithRegex) { + if (domains && !domains.includes(host)) continue; + + if ( + (url.pathname == path || (!exact && url.pathname.startsWith(`${path}/`))) && + (!methods || methods.includes(req.method)) + ) { + return endpoint.fetch(req); + } + } + + if (fallback) return fallback(req, server); + + return new Response(JSON.stringify(notFoundError('route').toResponse()), { + status: 404, + headers: { + 'Content-Type': 'application/json' + } + }) as any; + }; +}; diff --git a/src/_shared/backend/api-mux/tsconfig.json b/src/_shared/backend/api-mux/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/api-mux/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/api-mux/tsup.config.js b/src/_shared/backend/api-mux/tsup.config.js new file mode 100644 index 000000000..4e2a3d688 --- /dev/null +++ b/src/_shared/backend/api-mux/tsup.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: true, + dts: true +}); diff --git a/src/_shared/backend/cache/package.json b/src/_shared/backend/cache/package.json new file mode 100644 index 000000000..0a72938b3 --- /dev/null +++ b/src/_shared/backend/cache/package.json @@ -0,0 +1,21 @@ +{ + "name": "@mtsrc/cache", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/redis": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "lru-cache": "^11.2.4", + "superjson": "^2.2.6" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/cache/src/index.ts b/src/_shared/backend/cache/src/index.ts new file mode 100644 index 000000000..04a9bf083 --- /dev/null +++ b/src/_shared/backend/cache/src/index.ts @@ -0,0 +1,165 @@ +import { createRedisClient } from '@mtsrc/redis'; +import { getSentry } from '@mtsrc/sentry'; +import { LRUCache } from 'lru-cache'; + +// @ts-ignore +import SuperJson from 'superjson'; + +let Sentry = getSentry(); + +let cache = new LRUCache({ max: 500, ttl: 15 }); + +let version = 0; + +export let createCachedFunction = (opts: { + name: string; + redisUrl: string; + getHash: (i: I) => string; + provider: (i: I, opts: { setTTL: (ttl: number) => void }) => Promise; + ttlSeconds: number; + getTags?: (o: O, i: I) => string[]; +}) => { + let active = new Map>(); + + let useRedisClient = createRedisClient({ redisUrl: opts.redisUrl }).lazy(); + + let getHash = (i: I) => `cache:${version}:${opts.name}:val:${opts.getHash(i)}`; + let getTagKeys = (tags: string[]) => tags.map(tag => `cache:${version}:tag:${tag}`); + + let run = async (i: I): Promise => { + let hash = getHash(i); + if (active.has(hash)) return await active.get(hash)!; + if (cache.has(hash)) return cache.get(hash)!; + + let promise = (async () => { + let redis = await useRedisClient(); + let value = await redis.get(hash); + if (value) return SuperJson.parse(value.toString()); + + let ttl = { current: opts.ttlSeconds }; + let setTTL = (newTTL: number) => (ttl.current = newTTL); + + let result = await opts.provider(i, { setTTL }); + await redis.set(hash, SuperJson.stringify(result), { + EX: ttl.current + }); + + if (opts.getTags) { + let tags = opts.getTags(result, i); + let tagKeys = getTagKeys(tags); + Promise.all( + tagKeys.map(async tagKey => { + await redis.sAdd(tagKey, hash); + await redis.expire(tagKey, ttl.current); + }) + ).catch(console.error); + } + + cache.set(hash, result); + + return result as any; + })(); + + active.set(hash, promise); + promise.finally(() => active.delete(hash)); + + return await promise; + }; + + let clearAndWait = async (i: I) => { + let hash = getHash(i); + let redis = await useRedisClient(); + + let data = await redis.get(hash); + if (!data) return; + + await redis.del(hash); + cache.delete(hash); + + if (opts.getTags) { + let tags = opts.getTags(SuperJson.parse(data.toString()), i); + let tagKeys = getTagKeys(tags); + for (let tagKey of tagKeys) { + try { + await redis.sRem(tagKey, hash); + } catch (e) { + console.error('Error removing tag:', e); + Sentry.captureException(e); + } + } + } + }; + + let clearByTagAndWait = async (tag: string) => { + let redis = await useRedisClient(); + let tagKey = getTagKeys([tag])[0]!; + + let hashes = await redis.sMembers(tagKey); + + for (let hash of hashes) { + await redis.del(hash); + cache.delete(hash.toString()); + } + + await redis.del(tagKey); + }; + + let clear = async (i: I) => { + clearAndWait(i).catch(err => { + console.error(err); + Sentry.captureException(err); + }); + }; + + let clearByTag = async (tag: string) => { + clearByTagAndWait(tag).catch(err => { + console.error(err); + Sentry.captureException(err); + }); + }; + + return Object.assign(run, { clear, clearByTag, clearAndWait, clearByTagAndWait }); +}; + +export let createLocallyCachedFunction = (opts: { + getHash: (i: I) => string; + provider: (i: I) => Promise; + ttlSeconds: number; +}) => { + let cache = new LRUCache({ max: 500, ttl: opts.ttlSeconds }); + + let active = new Map>(); + + let getHash = (i: I) => opts.getHash(i); + + let run = async (i: I): Promise => { + let hash = getHash(i); + if (active.has(hash)) return await active.get(hash)!; + if (cache.has(hash)) return cache.get(hash)!; + + let promise = (async () => { + let result = await opts.provider(i); + cache.set(hash, result); + return result; + })(); + + active.set(hash, promise); + promise.finally(() => active.delete(hash)); + + return await promise; + }; + + let clearAndWait = async (i: I) => { + let hash = getHash(i); + cache.delete(hash); + }; + + let clear = async (i: I) => { + clearAndWait(i).catch(err => { + console.error(err); + Sentry.captureException(err); + }); + }; + + return Object.assign(run, { clear, clearAndWait }); +}; diff --git a/src/_shared/backend/cache/tsconfig.json b/src/_shared/backend/cache/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/cache/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/cron/package.json b/src/_shared/backend/cron/package.json new file mode 100644 index 000000000..0e4891f43 --- /dev/null +++ b/src/_shared/backend/cron/package.json @@ -0,0 +1,23 @@ +{ + "name": "@mtsrc/cron", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "bullmq": "^5.34.3" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/cron/src/index.ts b/src/_shared/backend/cron/src/index.ts new file mode 100644 index 000000000..1da7ce219 --- /dev/null +++ b/src/_shared/backend/cron/src/index.ts @@ -0,0 +1,95 @@ +import { createExecutionContext, provideExecutionContext } from '@mtsrc/execution-context'; +import { generateCustomId } from '@mtsrc/id'; +import type { IQueueProcessor } from '@mtsrc/queue'; +import { parseRedisUrl } from '@mtsrc/redis'; +import { getSentry } from '@mtsrc/sentry'; +import { Queue, Worker } from 'bullmq'; + +let Sentry = getSentry(); + +let log = (...any: any[]) => console.log('[CRON MANAGER]:', ...any); + +let seenNames = new Set(); + +export let createCron = ( + opts: { + name: string; + cron: string; + redisUrl: string; + }, + handler: () => Promise +): IQueueProcessor => { + if (seenNames.has(opts.name)) { + throw new Error(`Cron with name ${opts.name} already exists`); + } + + let connection = parseRedisUrl(opts.redisUrl); + if (process.env.QUEUE_DEBUG_LOGGING) + console.log('Creating cron with connection', opts.redisUrl, connection); + let queue = new Queue(`Cr0N_${opts.name}`, { + connection, + defaultJobOptions: { + removeOnComplete: true, + removeOnFail: { + age: 60 * 60 * 24 // 1 day + } + } + }); + + return { + start: async () => { + log(`Starting cron job ${opts.name} to run every ${opts.cron} using bullmq`); + + await queue.upsertJobScheduler( + 'cron', + { + pattern: opts.cron + }, + { + opts: { + removeDependencyOnFailure: true, + removeOnComplete: true, + removeOnFail: true, + keepLogs: 0 + } + } + ); + + let worker = new Worker( + queue.name, + async () => { + await provideExecutionContext( + createExecutionContext({ + type: 'scheduled', + contextId: generateCustomId('cron_'), + cron: opts.cron, + name: opts.name + }), + async () => { + log(`Running cron job ${opts.name}`); + + try { + await handler(); + } catch (err) { + Sentry.captureException(err, { + tags: { + cronName: opts.name + } + }); + throw err; + } + } + ); + }, + { + connection, + concurrency: 1 + } + ); + + return { + close: worker.close.bind(worker) + }; + } + }; +}; diff --git a/src/_shared/backend/cron/tsconfig.json b/src/_shared/backend/cron/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/cron/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/env/package.json b/src/_shared/backend/env/package.json new file mode 100644 index 000000000..cacb17ce6 --- /dev/null +++ b/src/_shared/backend/env/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/env", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/validation": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/env/src/env.test.ts b/src/_shared/backend/env/src/env.test.ts new file mode 100644 index 000000000..4cf185c12 --- /dev/null +++ b/src/_shared/backend/env/src/env.test.ts @@ -0,0 +1,38 @@ +import { v } from '@mtsrc/validation'; +import { describe, expect, test } from 'vitest'; +import { createValidatedEnv } from './env'; + +describe('createValidatedEnv', () => { + test('validates env', () => { + process.env.PORT = '3000'; + process.env.TEST = 'true'; + process.env.TEST2 = 'false'; + process.env.HELLO = 'world'; + + let env = createValidatedEnv({ + test: { + PORT: v.string(), + TEST: v.boolean() + }, + test2: { + TEST2: v.boolean() + }, + hello: { + HELLO: v.string() + } + }); + + expect(env).toEqual({ + test: { + PORT: '3000', + TEST: true + }, + test2: { + TEST2: false + }, + hello: { + HELLO: 'world' + } + }); + }); +}); diff --git a/src/_shared/backend/env/src/env.ts b/src/_shared/backend/env/src/env.ts new file mode 100644 index 000000000..9cca340d1 --- /dev/null +++ b/src/_shared/backend/env/src/env.ts @@ -0,0 +1,26 @@ +import type { ValidationType, ValidationTypeValue } from '@mtsrc/validation'; + +export let createValidatedEnv = < + Env extends Record>> +>( + env: Env +): { + [K in keyof Env]: { + [P in keyof Env[K]]: ValidationTypeValue; + }; +} => { + return Object.fromEntries( + Object.entries(env).map(([key, value]) => [ + key, + Object.fromEntries( + Object.entries(value).map(([key, value]) => { + let res = value.validate(process.env[key]); + if (res.success === false) + throw new Error(`ENV VALIDATION: ${key} - ${res.errors[0]!.message}`); + + return [key, res.value]; + }) + ) + ]) + ) as any; +}; diff --git a/src/_shared/backend/env/src/index.ts b/src/_shared/backend/env/src/index.ts new file mode 100644 index 000000000..c1532d6d2 --- /dev/null +++ b/src/_shared/backend/env/src/index.ts @@ -0,0 +1 @@ +export * from './env'; diff --git a/src/_shared/backend/env/tsconfig.json b/src/_shared/backend/env/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/env/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/error/package.json b/src/_shared/backend/error/package.json new file mode 100644 index 000000000..3ef8a9603 --- /dev/null +++ b/src/_shared/backend/error/package.json @@ -0,0 +1,19 @@ +{ + "name": "@mtsrc/error", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/case": "1.0.0", + "@mtsrc/validation": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/error/src/defaultErrors.test.ts b/src/_shared/backend/error/src/defaultErrors.test.ts new file mode 100644 index 000000000..f2039d197 --- /dev/null +++ b/src/_shared/backend/error/src/defaultErrors.test.ts @@ -0,0 +1,10 @@ +import { describe, expect, test } from 'vitest'; +import { validationError } from './defaultErrors'; + +describe('validationError', () => { + test("should return an error object with status 400 and code 'invalid_data'", () => { + let error = validationError({ errors: [], entity: 'params' }); + expect(error.data.status).toBe(400); + expect(error.data.code).toBe('invalid_data'); + }); +}); diff --git a/src/_shared/backend/error/src/defaultErrors.ts b/src/_shared/backend/error/src/defaultErrors.ts new file mode 100644 index 000000000..0e5e8f4d1 --- /dev/null +++ b/src/_shared/backend/error/src/defaultErrors.ts @@ -0,0 +1,121 @@ +import { Cases } from '@mtsrc/case'; +import type { ValidationError } from '@mtsrc/validation'; +import { createError } from './error'; +import type { ErrorData } from './error'; + +export let validationError = ( + d: { errors: ValidationError[]; entity: string } & Partial> +) => + createError({ + status: 400, + code: 'invalid_data', + message: 'The provided data is invalid.', + hint: 'Make sure the data you are sending follows the specification outlined in the documentation.', + ...d + }); + +export let internalServerError = createError({ + status: 500, + code: 'internal_server_error', + message: 'An internal server error occurred.' +}); + +export let badRequestError = createError({ + status: 400, + code: 'bad_request', + message: 'The request is invalid.' +}); + +export function notFoundError( + p1: { entity: string; id?: string } & Partial> +): ReturnType; +export function notFoundError(p1: string, p2?: string | null): ReturnType; +export function notFoundError(p1: any, p2?: any): ReturnType { + let entity = typeof p1 == 'string' ? p1 : p1.entity; + let id = typeof p1 == 'string' ? p2 : p1.id; + + return createError({ + status: 404, + code: 'not_found', + message: `The requested ${Cases.toKebabCase(entity)} could not be found.`, + hint: 'Make sure the resource you are trying to access exists, that you have access to it and that it has not been deleted.', + entity, + id: id ?? undefined, + + ...(typeof p1 == 'string' ? {} : p1) + }); +} + +export let unauthorizedError = createError({ + status: 401, + code: 'unauthorized', + message: 'You are not authorized to access this resource.', + hint: 'Make sure you are logged in and have the correct permissions to access this resource.' +}); + +export let forbiddenError = createError({ + status: 403, + code: 'forbidden', + message: 'You do not have permission to access this resource.' +}); + +export let invalidVersion = createError({ + status: 400, + code: 'invalid_version', + message: 'The endpoint does not support the requested version.' +}); + +export let conflictError = createError({ + status: 409, + code: 'conflict', + message: 'A similar resource already exists.' +}); + +export let goneError = createError({ + status: 410, + code: 'gone', + message: 'The requested resource is no longer available.' +}); + +export let paymentRequiredError = createError({ + status: 402, + code: 'payment_required', + message: 'Payment is required to access this resource.' +}); + +export let preconditionFailedError = createError({ + status: 412, + code: 'precondition_failed', + message: 'The precondition of the request failed.' +}); + +export let notAcceptableError = createError({ + status: 406, + code: 'not_acceptable', + message: 'The requested resource is not acceptable.' +}); + +export let notImplementedError = createError({ + status: 501, + code: 'not_implemented', + message: 'The requested resource is not implemented.' +}); + +export let tooManyRequestsError = createError({ + status: 429, + code: 'too_many_requests', + message: 'You have made too many requests in a short period of time.', + hint: 'Please wait a moment and try again.' +}); + +export let timeoutError = createError({ + status: 504, + code: 'timeout', + message: 'The request timed out.' +}); + +export let methodNotAllowedError = createError({ + status: 405, + code: 'method_not_allowed', + message: 'The requested method is not allowed for this resource.' +}); diff --git a/src/_shared/backend/error/src/error.test.ts b/src/_shared/backend/error/src/error.test.ts new file mode 100644 index 000000000..1550c2f8a --- /dev/null +++ b/src/_shared/backend/error/src/error.test.ts @@ -0,0 +1,94 @@ +import { describe, expect, test } from 'vitest'; +import { ServiceError, createError } from './error'; + +describe('createError', () => { + test('should create an error record with the provided data', () => { + let data = { + code: '404', + message: 'Not Found', + status: 404 + }; + let errorRecord = createError(data); + expect(errorRecord.data).toEqual(data); + }); + + test('should create an error record with a response function', () => { + let data = { + code: '404', + message: 'Not Found', + status: 404 + }; + let errorRecord = createError(data); + let response = errorRecord.toResponse(); + expect(response).toEqual({ ...data, object: 'error', ok: false }); + }); + + test('should create an error record with a response function that can be extended', () => { + let data = { + code: '404', + message: 'Not Found', + status: 404 + }; + let errorRecord = createError(data); + let response = errorRecord({ hint: 'This is a hint' }).toResponse(); + expect(response).toEqual({ + ...data, + object: 'error', + ok: false, + hint: 'This is a hint' + }); + }); +}); + +describe('ServiceError', () => { + test('should create an ServiceError with the provided error', () => { + let errorRecord = createError({ + code: '404', + message: 'Not Found', + status: 404 + }); + let apiError = new ServiceError(errorRecord); + expect(apiError.data).toEqual(errorRecord.data); + }); + + test('should create an ServiceError with the provided error message', () => { + let errorRecord = createError({ + code: '404', + message: 'Not Found', + status: 404 + }); + let apiError = new ServiceError(errorRecord); + expect(apiError.message.includes(errorRecord.data.message)).toBe(true); + }); + + test('should return the error response', () => { + let errorRecord = createError({ + code: '404', + message: 'Not Found', + status: 404 + }); + let apiError = new ServiceError(errorRecord); + let response = apiError.toResponse(); + expect(response).toEqual({ ...errorRecord.data, object: 'error', ok: false }); + }); + + test('should not mutate response payload in fromResponse', () => { + let payload = { + code: 'bad_request', + message: 'Bad Request', + status: 400, + ok: false, + object: 'error' + }; + + ServiceError.fromResponse(payload); + + expect(payload).toEqual({ + code: 'bad_request', + message: 'Bad Request', + status: 400, + ok: false, + object: 'error' + }); + }); +}); diff --git a/src/_shared/backend/error/src/error.ts b/src/_shared/backend/error/src/error.ts new file mode 100644 index 000000000..06d708fa7 --- /dev/null +++ b/src/_shared/backend/error/src/error.ts @@ -0,0 +1,83 @@ +export interface ErrorData { + status: Status; + code: Code; + message: string; + hint?: string; + description?: string; + reason?: string; + [key: string]: any; +} + +export type ErrorRecordExtension = < + NewCode extends string = Code +>( + extension?: Partial> +) => ErrorRecord; + +export type ErrorRecord = { + object: 'error'; + data: ErrorData; + toResponse: () => ErrorData & { object: 'error'; ok: false }; +} & ErrorRecordExtension; + +export let createError = ( + data: ErrorData +): ErrorRecord => { + return Object.assign( + ( + extension: Partial> = {} + ): ErrorRecord => + createError({ + ...data, + ...extension + }) as any, + { + object: 'error' as const, + data, + toResponse: () => ({ object: 'error' as const, ok: false as const, ...data }) + } + ) as any; +}; + +export class ServiceError> extends Error { + object = 'ServiceError' as const; + + private _parent: Error | null = null; + + public get parent() { + return this._parent; + } + + constructor(private readonly error: InnerError) { + super(`[@mtsrc/error]: ${error.data.message} (${JSON.stringify(error.data)})`); + } + + setParent(parent: Error) { + this._parent = parent; + return this; + } + + get data() { + return this.error.data; + } + + toResponse() { + return this.error.toResponse(); + } + + toJSON() { + return this.toResponse(); + } + + static fromResponse(raw: ErrorData) { + let data = { ...raw }; + delete data.ok; + delete data.object; + + return new ServiceError(createError(data)); + } +} + +export let isServiceError = (e: any): e is ServiceError => { + return e?.object === 'ServiceError' || e?.object === 'ErrorRecord'; +}; diff --git a/src/_shared/backend/error/src/index.ts b/src/_shared/backend/error/src/index.ts new file mode 100644 index 000000000..8dbd5a844 --- /dev/null +++ b/src/_shared/backend/error/src/index.ts @@ -0,0 +1,2 @@ +export * from './defaultErrors'; +export * from './error'; diff --git a/src/_shared/backend/error/tsconfig.json b/src/_shared/backend/error/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/error/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/event/package.json b/src/_shared/backend/event/package.json new file mode 100644 index 000000000..c3b049059 --- /dev/null +++ b/src/_shared/backend/event/package.json @@ -0,0 +1,21 @@ +{ + "name": "@mtsrc/event", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/memo": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "p-queue": "^9.1.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/event/src/eventObject.ts b/src/_shared/backend/event/src/eventObject.ts new file mode 100644 index 000000000..444121697 --- /dev/null +++ b/src/_shared/backend/event/src/eventObject.ts @@ -0,0 +1,100 @@ +import { memo } from '@mtsrc/memo'; +import { RedisStreams } from '@mtsrc/redis'; +import { getSentry } from '@mtsrc/sentry'; +import PQueue from 'p-queue'; + +let Sentry = getSentry(); + +export type Action = { + name: Name; + payload: Input; + getObject: (input: Input) => Input & { type: string }; +}; + +export let eventObjectAction = + (opts: { type: string }) => + (name: Name): Action => ({ + name, + payload: {} as Input, + getObject: input => ({ ...input, type: opts.type }) + }); + +export interface EventPayload { + action: string; + payload: any; +} + +export class EventObject } = {}> { + #actions: Actions = {} as Actions; + #fireQueue = new PQueue({ concurrency: Infinity }); + #getRedisStream: (name: string) => RedisStreams; + + constructor( + public readonly opts: { + serviceName: string; + objectName: string; + redisUrl: string; + } + ) { + this.#getRedisStream = memo((name: string) => { + return new RedisStreams( + `${this.opts.serviceName}-${name}`, + this.opts.redisUrl + ); + }); + } + + action(action: Action) { + // @ts-ignore + this.#actions[action.name] = action; + + return this as any as EventObject }>; + } + + task( + opts: { + actionNames: [Name, ...Name[]]; + taskName: string; + objectNameOverride?: string; + }, + cb: (ctx: { + payload: Actions[Name]['payload'] & { type: string }; + action: Name; + }) => Promise + ) { + let actionSet = new Set(opts.actionNames as string[]); + + return { + start: () => + this.#getRedisStream(opts.objectNameOverride ?? this.opts.objectName).createReceiver( + { groupId: opts.taskName, concurrency: 20 }, + async data => { + if (!actionSet.has(data.action)) return; + + await cb({ payload: data.payload, action: data.action as Name }); + } + ) + }; + } + + fire( + name: Name, + input: Actions[Name]['payload'], + opts?: { objectNameOverride?: string } + ) { + this.#fireQueue.add(async () => { + let sender = this.#getRedisStream(opts?.objectNameOverride ?? this.opts.objectName); + let output = this.#actions[name].getObject(input); + + try { + await sender.send({ + action: name, + payload: output + }); + } catch (e) { + Sentry.captureException(e); + console.error(e); + } + }); + } +} diff --git a/src/_shared/backend/event/src/index.ts b/src/_shared/backend/event/src/index.ts new file mode 100644 index 000000000..bbc31e81a --- /dev/null +++ b/src/_shared/backend/event/src/index.ts @@ -0,0 +1 @@ +export * from './eventObject'; diff --git a/src/_shared/backend/event/tsconfig.json b/src/_shared/backend/event/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/event/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/execution-context/.gitignore b/src/_shared/backend/execution-context/.gitignore new file mode 100644 index 000000000..a14702c40 --- /dev/null +++ b/src/_shared/backend/execution-context/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/src/_shared/backend/execution-context/package.json b/src/_shared/backend/execution-context/package.json new file mode 100644 index 000000000..163476f3b --- /dev/null +++ b/src/_shared/backend/execution-context/package.json @@ -0,0 +1,20 @@ +{ + "name": "@mtsrc/execution-context", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/sentry": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/execution-context/src/execution-context.ts b/src/_shared/backend/execution-context/src/execution-context.ts new file mode 100644 index 000000000..cd71d5211 --- /dev/null +++ b/src/_shared/backend/execution-context/src/execution-context.ts @@ -0,0 +1,59 @@ +import { context as otelContext, propagation } from '@opentelemetry/api'; +import { generateId } from '@mtsrc/id'; + +export type ExecutionTraceCarrier = { + traceparent?: string; + tracestate?: string; + baggage?: string; +}; + +export type ExecutionContext = { + contextId: string; + parent?: ExecutionContext; + trace?: ExecutionTraceCarrier; +} & ( + | { + type: 'request'; + userId?: string; + memberId?: string; + apiKeyId?: string; + machineAccessId?: string; + ip: string; + userAgent: string; + } + | { type: 'scheduled'; cron: string; name: string } + | { type: 'job'; queue: string } + | { type: 'unknown' } +); + +export let createExecutionContext = ( + input: ExecutionContext & { contextId?: string | undefined } +) => { + if (!input.contextId) input.contextId = generateId('ctx_'); + + if (!input.trace) { + let carrier: Record = {}; + + try { + propagation.inject(otelContext.active(), carrier); + } catch { + carrier = {}; + } + + if (carrier.traceparent || carrier.tracestate || carrier.baggage) { + input.trace = { + traceparent: carrier.traceparent, + tracestate: carrier.tracestate, + baggage: carrier.baggage + }; + } else if (input.parent?.trace) { + input.trace = { + traceparent: input.parent.trace.traceparent, + tracestate: input.parent.trace.tracestate, + baggage: input.parent.trace.baggage + }; + } + } + + return input as ExecutionContext; +}; diff --git a/src/_shared/backend/execution-context/src/index.ts b/src/_shared/backend/execution-context/src/index.ts new file mode 100644 index 000000000..35d7f298f --- /dev/null +++ b/src/_shared/backend/execution-context/src/index.ts @@ -0,0 +1,2 @@ +export * from './execution-context'; +export * from './with-execution-context'; diff --git a/src/_shared/backend/execution-context/src/with-execution-context.ts b/src/_shared/backend/execution-context/src/with-execution-context.ts new file mode 100644 index 000000000..faf257481 --- /dev/null +++ b/src/_shared/backend/execution-context/src/with-execution-context.ts @@ -0,0 +1,139 @@ +import { context as otelContext, propagation } from '@opentelemetry/api'; +import { getSentry } from '@mtsrc/sentry'; +import { AsyncLocalStorage } from 'async_hooks'; +import type { ExecutionContext } from './execution-context'; + +let Sentry = getSentry(); + +let getTraceCarrier = (executionContext: ExecutionContext): Record => { + let current: ExecutionContext | undefined = executionContext; + + while (current) { + let carrier: Record = {}; + + if (current.trace?.traceparent) { + carrier.traceparent = current.trace.traceparent; + } + if (current.trace?.tracestate) { + carrier.tracestate = current.trace.tracestate; + } + if (current.trace?.baggage) { + carrier.baggage = current.trace.baggage; + } + + if (Object.keys(carrier).length) { + return carrier; + } + + current = current.parent; + } + + return {}; +}; + +export let withExecutionTraceContext = async ( + executionContext: ExecutionContext, + cb: () => Promise +): Promise => { + let carrier = getTraceCarrier(executionContext); + + if (!Object.keys(carrier).length) { + return await cb(); + } + + let extractedContext = propagation.extract(otelContext.active(), carrier); + + return await otelContext.with(extractedContext, cb); +}; + +export let ctxStorage = new AsyncLocalStorage<{ + context: ExecutionContext; + afterHooks?: Array<() => Promise>; +}>(); + +export let withExecutionContext = async ( + cb: (ctx: ExecutionContext) => Promise +): Promise => { + let ctx = ctxStorage.getStore(); + if (!ctx) { + throw new Error('No execution context found'); + } + + return await cb(ctx.context); +}; + +export let withExecutionContextOptional = async ( + cb: (ctx: ExecutionContext | null) => Promise +): Promise => { + let ctx = ctxStorage.getStore(); + return await cb(ctx?.context ?? null); +}; + +export let addAfterHook = async (hook: () => Promise) => { + let ctx = ctxStorage.getStore(); + if (!ctx) { + throw new Error('No execution context found'); + } + + if (!ctx.afterHooks) { + throw new Error('After hooks not enabled for this execution context'); + } + + ctx.afterHooks.push(hook); +}; + +export let provideExecutionContext = async ( + ctx: ExecutionContext, + cb: () => Promise +): Promise => { + let afterHooks: Array<() => Promise> = []; + + Sentry.setContext('executionContext', ctx); + + let res = await withExecutionTraceContext( + ctx, + async () => + await ctxStorage.run( + { + context: ctx, + afterHooks + }, + async () => await cb() + ) + ); + + for (let hook of afterHooks) { + hook().catch(err => { + Sentry.captureException(err); + + console.error('Error in after hook', { + err, + context: ctx + }); + }); + } + + return res; +}; + +export let setExecutionContextSync = (ctx: ExecutionContext) => { + ctxStorage.enterWith({ + context: ctx + }); +}; + +export let updateExecutionContext = (ctx: Partial) => { + let currentCtx = getExecutionContext(); + + Object.assign(currentCtx, ctx); + + return currentCtx; +}; + +export let getExecutionContext = () => { + let ctx = ctxStorage.getStore(); + if (!ctx) { + throw new Error('No execution context found'); + } + return ctx.context; +}; diff --git a/src/_shared/backend/execution-context/tsconfig.json b/src/_shared/backend/execution-context/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/execution-context/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/forwarded-for/package.json b/src/_shared/backend/forwarded-for/package.json new file mode 100644 index 000000000..72dce33af --- /dev/null +++ b/src/_shared/backend/forwarded-for/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/forwarded-for", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/forwarded-for/src/index.ts b/src/_shared/backend/forwarded-for/src/index.ts new file mode 100644 index 000000000..0d3b73201 --- /dev/null +++ b/src/_shared/backend/forwarded-for/src/index.ts @@ -0,0 +1 @@ +export * from './ip'; diff --git a/src/_shared/backend/forwarded-for/src/ip.ts b/src/_shared/backend/forwarded-for/src/ip.ts new file mode 100644 index 000000000..1eb61fc4c --- /dev/null +++ b/src/_shared/backend/forwarded-for/src/ip.ts @@ -0,0 +1,26 @@ +export let parseForwardedFor = (xForwardedForHeader?: string | null | undefined) => { + if (typeof xForwardedForHeader != 'string') return undefined; + + let ips = xForwardedForHeader + .split(',') + .map(ip => ip.trim()) + .filter(Boolean); + return ips.length > 0 ? ips[0] : undefined; +}; + +export let extractIp = (headers: Record | Headers) => { + let headerObject = ( + 'entries' in headers && typeof headers.entries == 'function' + ? // @ts-ignore + Object.fromEntries(headers.entries()) + : headers + ) as Record; + + let ipHeader = + headerObject['metorial-connecting-ip'] || + headerObject['cf-connecting-ip'] || + headerObject['x-forwarded-for'] || + headerObject['x-real-ip']; + + return parseForwardedFor(ipHeader); +}; diff --git a/src/_shared/backend/forwarded-for/tsconfig.json b/src/_shared/backend/forwarded-for/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/forwarded-for/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/hono/package.json b/src/_shared/backend/hono/package.json new file mode 100644 index 000000000..de198b62f --- /dev/null +++ b/src/_shared/backend/hono/package.json @@ -0,0 +1,21 @@ +{ + "name": "@mtsrc/hono", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "hono": "^4.5.5", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@mtsrc/error": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/hono/src/context.ts b/src/_shared/backend/hono/src/context.ts new file mode 100644 index 000000000..57f3472d6 --- /dev/null +++ b/src/_shared/backend/hono/src/context.ts @@ -0,0 +1,15 @@ +import { parseForwardedFor } from '@mtsrc/forwarded-for'; +import type { Context } from 'hono'; + +export let useRequestContext = (c: Context) => { + let ua = c.req.header('user-agent'); + let ip = + parseForwardedFor( + c.req.header('metorial-connecting-ip') ?? + c.req.header('cf-connecting-ip') ?? + c.req.header('x-forwarded-for') ?? + c.req.header('x-real-ip') + ) ?? '0.0.0.0'; + + return { ua, ip }; +}; diff --git a/src/_shared/backend/hono/src/hono.ts b/src/_shared/backend/hono/src/hono.ts new file mode 100644 index 000000000..d0a3bdaf8 --- /dev/null +++ b/src/_shared/backend/hono/src/hono.ts @@ -0,0 +1,33 @@ +import { internalServerError, isServiceError, notFoundError } from '@mtsrc/error'; +import { Hono } from 'hono'; +import type { Context, Env } from 'hono'; +import { cors } from 'hono/cors'; + +export { cors, type Context }; + +export let createHono = (basePath?: string) => { + let app = new Hono(); + if (basePath) app = app.basePath(basePath); + + app.use(async (c, next) => { + await next(); + + c.res.headers.set('X-Powered-By', 'Metorial'); + }); + + app.notFound(c => { + return c.json(notFoundError('endpoint', null).toResponse(), 404); + }); + + app.onError((e, c) => { + if (isServiceError(e)) { + return c.json(e.toResponse(), e.data.status); + } + + console.error(e); + + return c.json(internalServerError().toResponse(), 500); + }); + + return app; +}; diff --git a/src/_shared/backend/hono/src/index.ts b/src/_shared/backend/hono/src/index.ts new file mode 100644 index 000000000..2ce7fb509 --- /dev/null +++ b/src/_shared/backend/hono/src/index.ts @@ -0,0 +1,3 @@ +export * from './context'; +export * from './hono'; +export * from './validation'; diff --git a/src/_shared/backend/hono/src/validation.ts b/src/_shared/backend/hono/src/validation.ts new file mode 100644 index 000000000..6d5951a5c --- /dev/null +++ b/src/_shared/backend/hono/src/validation.ts @@ -0,0 +1,59 @@ +import { badRequestError, ServiceError, validationError } from '@mtsrc/error'; +import type { ValidationType } from '@mtsrc/validation'; +import type { Context } from 'hono'; + +export let useValidatedBody = async (c: Context, v: ValidationType): Promise => { + let body: any; + + if (c.req.header('Content-Type')?.includes('application/x-www-form-urlencoded')) { + body = Object.fromEntries(new URLSearchParams(await c.req.text())); + } else { + try { + body = await c.req.json(); + } catch (e) { + throw new ServiceError( + badRequestError({ + message: 'Invalid JSON body' + }) + ); + } + } + + let val = v.validate(body); + if (val.success === false) { + throw new ServiceError( + validationError({ + entity: 'body', + errors: val.errors + }) + ); + } + + return val.value; +}; + +export let useValidatedQuery = async (c: Context, v: ValidationType): Promise => { + let body: any; + + try { + body = c.req.query(); + } catch (e) { + throw new ServiceError( + badRequestError({ + message: 'Invalid JSON body' + }) + ); + } + + let val = v.validate(body); + if (val.success === false) { + throw new ServiceError( + validationError({ + entity: 'query', + errors: val.errors + }) + ); + } + + return val.value; +}; diff --git a/src/_shared/backend/hono/tsconfig.json b/src/_shared/backend/hono/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/hono/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/lock/package.json b/src/_shared/backend/lock/package.json new file mode 100644 index 000000000..7b760417d --- /dev/null +++ b/src/_shared/backend/lock/package.json @@ -0,0 +1,23 @@ +{ + "name": "@mtsrc/lock", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/redis": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@types/bun": "^1.2.11", + "ioredis": "^5.4.1", + "redlock": "^5.0.0-beta.2", + "superjson": "^2.2.5" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/lock/src/index.ts b/src/_shared/backend/lock/src/index.ts new file mode 100644 index 000000000..47b977f84 --- /dev/null +++ b/src/_shared/backend/lock/src/index.ts @@ -0,0 +1,121 @@ +import { delay } from '@mtsrc/delay'; +import { parseRedisUrl } from '@mtsrc/redis'; +import crypto from 'crypto'; +import { Redis } from 'ioredis'; + +// @ts-ignore +import SuperJSON from 'superjson'; + +// @ts-ignore +import Redlock_ from 'redlock'; + +export let createLock = ({ name, redisUrl }: { name: string; redisUrl: string }) => { + let hash = crypto.createHash('sha256').update(name).digest(); + let nameHash = hash.readBigUInt64LE(0).toString(36); + + let redis = new Redis(parseRedisUrl(redisUrl)); + + let redlock = new Redlock_([redis as any], { + // The expected clock drift; for more details see: + // http://redis.io/topics/distlock + driftFactor: 0.01, // multiplied by lock ttl to determine drift time + + // The max number of times Redlock will attempt to lock a resource + // before erroring. + retryCount: 50, + + // the time in ms between attempts + retryDelay: 200, // time in ms + + // the max time in ms randomly added to retries + // to improve performance under high contention + // see https://www.awsarchitectureblog.com/2015/03/backoff.html + retryJitter: 200, // time in ms + + // The minimum remaining time on a lock before an extension is automatically + // attempted with the `using` API. + automaticExtensionThreshold: 500 + } as any); + + let usingLock = async ( + key: string | string[], + fn: (controller: { passForNow: () => void }) => Promise + ): Promise => { + let keyArray = (Array.isArray(key) ? key : [key]).map(k => `l:${nameHash}:${k}`); + + let runLock = async () => { + let passingForNow = false; + let passForNow = () => { + passingForNow = true; + }; + + let result = await redlock.using(keyArray, 10_000, () => fn({ passForNow })); + + if (passingForNow) { + await delay(100); + return runLock(); + } + + return result; + }; + + return runLock(); + }; + + let doOnce = async (key: string, fn: () => Promise): Promise => { + let id = `${nameHash}:${Math.random()}:${Date.now()}`; + let uniquenessHashKey = `luniq:${nameHash}:${key}`; + + let keyWasSet = await redis.setnx(uniquenessHashKey, id); + await redis.expire(uniquenessHashKey, 60 * 5); + + if (keyWasSet) { + return await usingLock(key, async () => { + try { + return await fn(); + } finally { + await redis.set(`luniq:${id}:done`, '1', 'EX', 10); + await redis.expire(uniquenessHashKey, 5); + } + }); + } + + let winnerId = await redis.get(uniquenessHashKey); + if (!winnerId) return null; + + // If we lost, we'll wait for the winner to finish. + for (let i = 0; i < 25; i++) { + if (i > 0) await delay(25); + + if (await redis.get(`luniq:${winnerId}:done`)) { + return null; + } + } + + return null; + }; + + let doOnceAndReturn = async (key: string, fn: () => Promise): Promise => { + let redisKey = `doa:${nameHash}:${key}`; + + let res = await doOnce(key, async () => { + let res = await fn(); + + await redis.set(redisKey, SuperJSON.stringify(res), 'EX', 60); + + return res; + }); + + if (res == null) { + return SuperJSON.parse((await redis.get(redisKey)) as string); + } + + return res; + }; + + return { + usingLock, + doOnce, + doOnceAndReturn + }; +}; diff --git a/src/_shared/backend/lock/tsconfig.json b/src/_shared/backend/lock/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/lock/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/pagination/package.json b/src/_shared/backend/pagination/package.json new file mode 100644 index 000000000..c0f7134be --- /dev/null +++ b/src/_shared/backend/pagination/package.json @@ -0,0 +1,21 @@ +{ + "name": "@mtsrc/pagination", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/base62": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/validation": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "mongoose": "^9.0.2", + "typescript": "^5.9.3", + "vitest": "^3.2.4" + } +} diff --git a/src/_shared/backend/pagination/src/cursor.ts b/src/_shared/backend/pagination/src/cursor.ts new file mode 100644 index 000000000..4c0d28b75 --- /dev/null +++ b/src/_shared/backend/pagination/src/cursor.ts @@ -0,0 +1,52 @@ +import { base62 } from '@mtsrc/base62'; +import { badRequestError, ServiceError } from '@mtsrc/error'; + +let PREFIX = 'cur_'; + +export class Cursor { + private constructor( + public readonly id: string, + public readonly type: 'after' | 'before' + ) {} + + static fromString(str: string) { + if (!str.startsWith(PREFIX)) { + throw new ServiceError( + badRequestError({ + message: 'Invalid cursor format', + hint: 'Cursor must start with "cur_"' + }) + ); + } + + try { + let decoded = base62.decode(str.slice(PREFIX.length)); + let [type, id] = JSON.parse(decoded.toString()); + + if (type !== 'after' && type !== 'before') { + throw new Error('Invalid cursor type'); + } + + if (typeof id !== 'string') { + throw new Error('Invalid cursor id'); + } + + return new Cursor(id, type); + } catch (e) { + throw new ServiceError( + badRequestError({ + message: 'Invalid cursor format', + hint: 'Please provide a valid cursor from another page.' + }) + ); + } + } + + static fromId(id: string, type: 'after' | 'before') { + return new Cursor(id, type); + } + + toString() { + return PREFIX + base62.encode(JSON.stringify([this.type, this.id])); + } +} diff --git a/src/_shared/backend/pagination/src/index.ts b/src/_shared/backend/pagination/src/index.ts new file mode 100644 index 000000000..9ac4ce5b2 --- /dev/null +++ b/src/_shared/backend/pagination/src/index.ts @@ -0,0 +1,3 @@ +export * from './paginatedProvider'; +export * from './paginator'; +export * from './types'; diff --git a/src/_shared/backend/pagination/src/paginatedProvider.ts b/src/_shared/backend/pagination/src/paginatedProvider.ts new file mode 100644 index 000000000..17f2a0035 --- /dev/null +++ b/src/_shared/backend/pagination/src/paginatedProvider.ts @@ -0,0 +1,169 @@ +import { ServiceError, badRequestError } from '@mtsrc/error'; +import type { QueryFilter, SortOrder } from 'mongoose'; +import type { PaginatedList } from './types'; + +export interface PaginatedProviderInput { + limit: number; + after?: string; + before?: string; + order: 'asc' | 'desc'; +} + +export interface PrismaPaginationOpts { + orderBy: [{ id: 'asc' | 'desc' }]; + cursor?: { id: string }; + take: number; + skip: number; +} + +export interface MongoosePaginationOpts { + filter: QueryFilter; + sort: { _id: SortOrder }; + limit: number; +} + +export type PaginatedProvider = ( + input: PaginatedProviderInput +) => Promise>; + +export let paginatedProviderPrisma = + ( + provider: (opts: PrismaPaginationOpts) => Promise + ): PaginatedProvider => + async (input: PaginatedProviderInput) => { + let { limit, after, before, order } = input; + + if (after && before) { + throw new ServiceError( + badRequestError({ + message: 'Cannot use both after and before cursors' + }) + ); + } + + let opts: PrismaPaginationOpts = { + orderBy: [{ id: order }], + take: limit + 2, + skip: 0 + }; + + let cursorId = after ?? before; + let cursorType: 'after' | 'before' | 'none' = 'none'; + + if (after) { + opts.cursor = { id: after }; + cursorType = 'after'; + } else if (before) { + opts.cursor = { id: before }; + opts.take = -opts.take!; + opts.skip = 0; + cursorType = 'before'; + } + + let items = (await provider(opts)) ?? []; + + let orderedItems = items; /* items?.sort((a, b) => { + if (order == 'asc') { + return a.id.localeCompare(b.id); + } else { + return b.id.localeCompare(a.id); + } + });*/ + + let cursorItem = cursorId ? orderedItems?.find(item => item.id == cursorId) : undefined; + let cursorItemIndex = cursorItem ? orderedItems?.indexOf(cursorItem) : undefined; + let orderedItemsWithoutCursor = + typeof cursorItemIndex == 'number' + ? [ + ...orderedItems.slice(0, cursorItemIndex), + ...orderedItems.slice(cursorItemIndex + 1) + ] + : orderedItems; + + let selectedItems = orderedItemsWithoutCursor?.slice(0, limit); + + if (cursorType == 'before' && orderedItemsWithoutCursor.length > limit) { + selectedItems = orderedItemsWithoutCursor?.slice(1, limit + 1); + } + + let hasItemsBefore = false; + let hasItemsAfter = false; + + if (cursorType == 'after' || cursorType == 'none') { + if (orderedItemsWithoutCursor.length > selectedItems.length) hasItemsAfter = true; + if (cursorItem) hasItemsBefore = true; + } else if (cursorType == 'before') { + if (orderedItemsWithoutCursor.length > selectedItems.length) hasItemsBefore = true; + if (cursorItem) hasItemsAfter = true; + } + + return { + items: selectedItems, + pagination: { + hasNextPage: hasItemsAfter, + hasPreviousPage: hasItemsBefore + } + }; + }; + +export let paginatedProviderMongoose = + ( + provider: (opts: MongoosePaginationOpts) => Promise + ): PaginatedProvider => + async (input: PaginatedProviderInput) => { + let { limit, after, before, order } = input; + + if (after && before) { + throw new ServiceError( + badRequestError({ + message: 'Cannot use both after and before cursors' + }) + ); + } + + let filter: QueryFilter = {}; + let sort: { _id: SortOrder } = { _id: order === 'asc' ? 1 : -1 }; + let cursorId = after ?? before; + let cursorType: 'after' | 'before' | 'none' = 'none'; + + if (after) { + filter._id = order === 'asc' ? { $gt: after } : { $lt: after }; + cursorType = 'after'; + } else if (before) { + filter._id = order === 'asc' ? { $lt: before } : { $gt: before }; + sort._id = order === 'asc' ? -1 : 1; + cursorType = 'before'; + } + + let opts: MongoosePaginationOpts = { + filter, + sort, + limit: limit + 1 + }; + + let items = (await provider(opts)) ?? []; + + if (cursorType === 'before') items = items.reverse(); + + let hasMore = items.length > limit; + let selectedItems = hasMore ? items.slice(0, limit) : items; + + let hasItemsBefore = false; + let hasItemsAfter = false; + + if (cursorType === 'after' || cursorType === 'none') { + hasItemsAfter = hasMore; + hasItemsBefore = !!after; + } else if (cursorType === 'before') { + hasItemsBefore = hasMore; + hasItemsAfter = !!before; + } + + return { + items: selectedItems, + pagination: { + hasNextPage: hasItemsAfter, + hasPreviousPage: hasItemsBefore + } + }; + }; diff --git a/src/_shared/backend/pagination/src/paginator.ts b/src/_shared/backend/pagination/src/paginator.ts new file mode 100644 index 000000000..ab589ff2b --- /dev/null +++ b/src/_shared/backend/pagination/src/paginator.ts @@ -0,0 +1,121 @@ +import { v } from '@mtsrc/validation'; +import type { ValidationType } from '@mtsrc/validation'; +import { Cursor } from './cursor'; +import { paginatedProviderMongoose, paginatedProviderPrisma } from './paginatedProvider'; +import type { PaginatedProvider, PaginatedProviderInput } from './paginatedProvider'; +import type { PaginatedList } from './types'; + +export interface PaginatorInput { + limit?: number | string; + after?: string; + before?: string; + cursor?: string; + order?: 'asc' | 'desc'; +} + +export interface PaginatorOpts { + defaultLimit?: number; + defaultOrder?: 'asc' | 'desc'; +} + +export type Provider = (providers: { + prisma: typeof paginatedProviderPrisma; + mongoose: typeof paginatedProviderMongoose; +}) => PaginatedProvider; + +export class Paginator { + private constructor( + private provider: Provider, + private opts: PaginatorOpts = {} + ) {} + + static create(provider: Provider, opts: PaginatorOpts = {}) { + return new Paginator(provider, opts); + } + + static validate(inner?: ValidationType) { + return v.intersection([ + v.object({ + limit: v.optional( + v.number({ + modifiers: [v.minValue(1), v.maxValue(100)] + }) + ), + after: v.optional(v.string()), + before: v.optional(v.string()), + cursor: v.optional(v.string()), + order: v.optional(v.enumOf(['asc', 'desc'])) + }), + inner ?? v.object({}) + ]) as ValidationType< + Inner & { + limit?: number; + after?: string; + before?: string; + cursor?: string; + order?: 'asc' | 'desc'; + } + >; + } + + static present( + list: PaginatedList, + presenter: (item: T) => (context: any) => { run: (d: any) => R } | undefined + ) { + return (context: any) => ({ + run: async () => ({ + object: `list`, + items: ( + await Promise.all(list.items.map(item => presenter(item)?.(context)?.run({}))) + ).filter(Boolean), + pagination: { + has_more_after: list.pagination.hasNextPage, + has_more_before: list.pagination.hasPreviousPage + } + }) + }); + } + + static async presentLight( + list: PaginatedList, + presenter: (item: T) => R | Promise + ) { + return { + object: `list`, + items: (await Promise.all(list.items.map(item => presenter(item)))).filter(Boolean), + pagination: { + has_more_after: list.pagination.hasNextPage, + has_more_before: list.pagination.hasPreviousPage + } + }; + } + + async run(input: PaginatorInput): Promise> { + let numberLimit = Number(input.limit); + if (isNaN(numberLimit)) numberLimit = 20; + + let providerInput: PaginatedProviderInput = { + limit: Math.max( + Math.min(numberLimit ?? this.opts.defaultLimit ?? 20, this.opts.defaultLimit ?? 100), + 1 + ), + order: input.order ?? this.opts.defaultOrder ?? 'asc' + }; + + if (input.after) { + providerInput.after = input.after; + } else if (input.before) { + providerInput.before = input.before; + } else if (input.cursor) { + let cursor = Cursor.fromString(input.cursor); + providerInput[cursor.type] = cursor.id; + } + + let provider = this.provider({ + prisma: paginatedProviderPrisma, + mongoose: paginatedProviderMongoose + }); + + return await provider(providerInput); + } +} diff --git a/src/_shared/backend/pagination/src/types.ts b/src/_shared/backend/pagination/src/types.ts new file mode 100644 index 000000000..06e420db5 --- /dev/null +++ b/src/_shared/backend/pagination/src/types.ts @@ -0,0 +1,7 @@ +export interface PaginatedList { + items: T[]; + pagination: { + hasNextPage: boolean; + hasPreviousPage: boolean; + }; +} diff --git a/src/_shared/backend/pagination/tsconfig.json b/src/_shared/backend/pagination/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/pagination/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/pagination/tsup.config.js b/src/_shared/backend/pagination/tsup.config.js new file mode 100644 index 000000000..4e2a3d688 --- /dev/null +++ b/src/_shared/backend/pagination/tsup.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: true, + dts: true +}); diff --git a/src/_shared/backend/presenter/package.json b/src/_shared/backend/presenter/package.json new file mode 100644 index 000000000..5229192ee --- /dev/null +++ b/src/_shared/backend/presenter/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/presenter", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/validation": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4" + } +} diff --git a/src/_shared/backend/presenter/src/index.ts b/src/_shared/backend/presenter/src/index.ts new file mode 100644 index 000000000..6ff98edb5 --- /dev/null +++ b/src/_shared/backend/presenter/src/index.ts @@ -0,0 +1 @@ +export * from './presenter'; diff --git a/src/_shared/backend/presenter/src/presenter.ts b/src/_shared/backend/presenter/src/presenter.ts new file mode 100644 index 000000000..ba5cff686 --- /dev/null +++ b/src/_shared/backend/presenter/src/presenter.ts @@ -0,0 +1,184 @@ +import { introspectType, ValidationType } from '@mtsrc/validation'; + +export interface PresenterContext { + // instance: Instance; + apiVersion: 'mt_2025_01_01_pulsar' | 'mt_2025_01_01_dashboard'; + accessType: + | 'instance_secret' + | 'instance_publishable' + | 'organization_management' + | 'user_auth_token' + | 'event_system'; +} + +export interface PresenterResult { + run: (i?: { expand?: string[] }) => Promise; +} + +export interface Expansion { + provider: (object: Object, context: Context) => Promise; + presenter: Presenter, any>; +} + +export class PresentableType { + private constructor(public readonly name: Name) {} + + static create() { + return (name: Name) => new PresentableType(name); + } + + present(input: Type) { + return { presenter: this.name, input }; + } +} + +export type GetTypeOfPresentable = + T extends PresentableType ? Type : never; + +export class Presenter, Output extends {}> { + private constructor( + private readonly presentableType: Type, + private readonly presenter: ( + input: GetTypeOfPresentable, + context: PresenterContext + ) => Promise, + public readonly schema: ValidationType + ) {} + + static $$create$$_internal, Output extends {}>( + presentableType: Type, + presenter: ( + input: GetTypeOfPresentable, + context: PresenterContext + ) => Promise, + type: ValidationType + ) { + return new Presenter(presentableType, presenter, type); + } + + static create>(name: Type) { + return new PresenterBuilder(name); + } + + present( + input: GetTypeOfPresentable, + context: PresenterContext + ): PresenterResult { + // return this.presenter(input, context); + + return { + run: async opts => { + let { expand } = opts ?? {}; + + let result = await this.presenter(input, context); + + // if (expand?.length) { + // for (let expansionKey of expand) { + // let expander = this.expansions[expansionKey]; + // let canExpand = await context.expansions?.[expansionKey]?.(); + // if (!expander || canExpand === false || canExpand === null) { + // throw new ServiceError( + // badRequestError({ + // message: `Expansion "${expansionKey}" is not supported for object "${this.presentableType.name}"` + // }) + // ); + // } + + // let expansionUnpresented = await expander.provider(result, context); + // let expansionValue = await expander.presenter + // .present(expansionUnpresented, { ...context, expansions: undefined }) + // .run({}); + + // result = { + // ...result, + // [expansionKey]: expansionValue + // }; + // } + // } + + // @ts-ignore + result.__typename = this.name; + + return result; + } + }; + } + + introspect() { + return { + name: this.presentableType.name, + object: introspectType(this.schema) + // expansions: Object.entries(this.expansions).map(([key, expansion]) => ({ + // name: key, + // object: introspectType(expansion.presenter.schema) + // })) + }; + } +} + +export class PresenterBuilder, Output extends {}> { + #presenter?: ( + input: GetTypeOfPresentable, + context: PresenterContext + ) => Promise; + #type?: ValidationType; + + constructor(private readonly presentableType: Type) {} + + presenter< + Output extends { + object: string; + } + >( + presenter: ( + input: GetTypeOfPresentable, + context: PresenterContext + ) => Promise + ) { + // @ts-ignore + this.#presenter = presenter; + return this as any as PresenterBuilder; + } + + schema(type: ValidationType) { + // @ts-ignore + this.#type = type; + return this; + } + + // expansion>( + // key: Key, + // expansion: Exp + // ) { + // // @ts-ignore + // this.#expansions = { + // ...this.#expansions, + // [key]: expansion + // }; + // return this as any as PresenterBuilder>; + // } + + build() { + if (!this.#presenter || !this.#type) { + throw new Error('Presenter must have a presenter and a type'); + } + + return Presenter.$$create$$_internal(this.presentableType, this.#presenter!, this.#type!); + } +} + +export let declarePresenter = >( + type: Type, + presenters: { + mt_2025_01_01_pulsar: Presenter; + mt_2025_01_01_dashboard: Presenter; + } +) => ({ + type, + present: + (input: GetTypeOfPresentable) => + (context: PresenterContext): PresenterResult => + presenters[context.apiVersion].present(input, context), + introspect: ({ apiVersion }: { apiVersion: string }) => + (presenters as any)[apiVersion].introspect() +}); diff --git a/src/_shared/backend/presenter/tsconfig.json b/src/_shared/backend/presenter/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/presenter/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/presenter/tsup.config.js b/src/_shared/backend/presenter/tsup.config.js new file mode 100644 index 000000000..4e2a3d688 --- /dev/null +++ b/src/_shared/backend/presenter/tsup.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: true, + dts: true +}); diff --git a/src/_shared/backend/queue/package.json b/src/_shared/backend/queue/package.json new file mode 100644 index 000000000..128250e03 --- /dev/null +++ b/src/_shared/backend/queue/package.json @@ -0,0 +1,26 @@ +{ + "name": "@mtsrc/queue", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/delay": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/memo": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "bullmq": "^5.66.0", + "superjson": "^2.2.6" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/queue/src/drivers/bullmq.ts b/src/_shared/backend/queue/src/drivers/bullmq.ts new file mode 100644 index 000000000..1367fe14f --- /dev/null +++ b/src/_shared/backend/queue/src/drivers/bullmq.ts @@ -0,0 +1,339 @@ +import { delay } from '@mtsrc/delay'; +import { createExecutionContext, provideExecutionContext, withExecutionContextOptional } from '@mtsrc/execution-context'; +import type { ExecutionContext } from '@mtsrc/execution-context'; +import { generateSnowflakeId } from '@mtsrc/id'; +import { memo } from '@mtsrc/memo'; +import { parseRedisUrl } from '@mtsrc/redis'; +import { getSentry } from '@mtsrc/sentry'; +import { + hasActiveTraceContext, + isTelemetryEnabled, + SpanKind, + SpanStatusCode, + trace +} from '@mtsrc/telemetry'; +import { Queue, QueueEvents, Worker } from 'bullmq'; +import type { DeduplicationOptions, JobsOptions, QueueOptions, WorkerOptions } from 'bullmq'; +import { QueueRetryError } from '../lib/queueRetryError'; +import type { IQueue } from '../types'; + +// @ts-ignore +import SuperJson from 'superjson'; + +let Sentry = getSentry(); + +let log = (...any: any[]) => console.log('[QUEUE MANAGER]:', ...any); + +let anyQueueStartedRef = { started: false }; +let tracer = trace.getTracer('lowerdeck.queue.bullmq'); + +let compactAttributes = ( + attributes: Record +) => { + let out: Record = {}; + + for (let [key, value] of Object.entries(attributes)) { + if (value !== undefined) out[key] = value; + } + + return out; +}; + +let withQueueSpan = async ( + d: { + name: string; + kind: SpanKind; + queueName: string; + operation: 'publish' | 'process'; + attributes?: Record; + createSpan?: boolean; + }, + cb: () => Promise +) => { + if (d.createSpan === false || !isTelemetryEnabled() || !hasActiveTraceContext()) { + return await cb(); + } + + return await tracer.startActiveSpan( + d.name, + { + kind: d.kind, + attributes: compactAttributes({ + 'sentry.op': `queue.${d.operation}`, + 'messaging.system': 'bullmq', + 'messaging.operation': d.operation, + 'messaging.destination.name': d.queueName, + ...d.attributes + }) + }, + async span => { + try { + return await cb(); + } catch (error) { + span.recordException(error as Error); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error instanceof Error ? error.message : String(error) + }); + throw error; + } finally { + span.end(); + } + } + ); +}; + +let getSerializedExecutionContext = ( + ctx: ExecutionContext | null +): ExecutionContext | null => { + if (ctx) { + return createExecutionContext({ ...ctx }); + } + + if (!isTelemetryEnabled() || !hasActiveTraceContext()) { + return null; + } + + // Preserve the active trace even when queue publish happens outside an execution context. + return createExecutionContext({ + type: 'unknown', + contextId: generateSnowflakeId() + }); +}; + +let sanitizeJobId = (jobId?: string) => jobId?.replace(/:/g, '_'); + +export interface BullMqQueueOptions { + delay?: number; + id?: string; + deduplication?: DeduplicationOptions; +} + +export interface BullMqCreateOptions { + name: string; + jobOpts?: JobsOptions; + queueOpts?: Omit; + workerOpts?: Omit; + redisUrl: string; +} + +export let createBullMqQueue = ( + opts: BullMqCreateOptions +): IQueue => { + let redisOpts = parseRedisUrl(opts.redisUrl); + if (process.env.QUEUE_DEBUG_LOGGING) + console.log('Creating queue with connection', opts.name, opts.redisUrl, redisOpts); + + let queue = new Queue(opts.name, { + ...opts.queueOpts, + connection: redisOpts, + defaultJobOptions: { + removeOnComplete: true, + removeOnFail: { + age: 60 * 60 * 24 // 1 day + }, + backoff: { + type: 'custom' + }, + attempts: 25, + keepLogs: 10, + ...opts.jobOpts + } + }); + + let useQueueEvents = memo(() => new QueueEvents(opts.name, { connection: redisOpts })); + + let publishMany = async ( + payloads: Array<{ + data: JobData; + opts?: BullMqQueueOptions; + }>, + queueAddOpts?: BullMqQueueOptions + ) => { + await withExecutionContextOptional(async ctx => { + let serializedExecutionContext = getSerializedExecutionContext(ctx); + + await withQueueSpan( + { + name: `queue publish batch: ${opts.name}`, + kind: SpanKind.PRODUCER, + queueName: opts.name, + operation: 'publish', + attributes: { + 'messaging.batch.message_count': payloads.length + } + }, + async () => + await queue.addBulk( + payloads.map( + payload => + ({ + name: 'j', + data: { + payload: SuperJson.serialize(payload.data), + $$execution_context$$: serializedExecutionContext + }, + opts: { + delay: payload.opts?.delay ?? queueAddOpts?.delay, + jobId: sanitizeJobId(payload.opts?.id ?? queueAddOpts?.id), + deduplication: payload.opts?.deduplication ?? queueAddOpts?.deduplication + } + }) as any + ) + ) + ); + }); + }; + + return { + name: opts.name, + + add: async (payload, queueAddOpts) => { + let job = await withExecutionContextOptional(async ctx => { + let serializedExecutionContext = getSerializedExecutionContext(ctx); + + return await withQueueSpan( + { + name: `queue publish: ${opts.name}`, + kind: SpanKind.PRODUCER, + queueName: opts.name, + operation: 'publish' + }, + async () => + await queue.add( + 'j' as any, + { + payload: SuperJson.serialize(payload), + $$execution_context$$: serializedExecutionContext + } as any, + { + delay: queueAddOpts?.delay, + jobId: sanitizeJobId(queueAddOpts?.id), + deduplication: queueAddOpts?.deduplication + } + ) + ); + }); + + return { + async waitUntilFinished(opts?: { timeout?: number }) { + let events = useQueueEvents(); + await job.waitUntilFinished(events, opts?.timeout); + } + }; + }, + + addMany: async (payloads, queueAddOpts) => { + await publishMany( + payloads.map(payload => ({ data: payload })), + queueAddOpts + ); + }, + + addManyWithOps: async payloads => { + await publishMany(payloads.map(payload => ({ data: payload.data, opts: payload.opts }))); + }, + + process: cb => { + let staredRef = { started: false }; + + setTimeout(() => { + if (anyQueueStartedRef.started && !staredRef.started) { + log(`Queue ${opts.name} was not started within 10 seconds, this is likely a bug`); + } + }, 10000); + + return { + start: async () => { + log(`Starting queue ${opts.name} using bullmq`); + staredRef.started = true; + anyQueueStartedRef.started = true; + + let worker = new Worker( + opts.name, + async job => { + try { + let data = job.data as any; + + let payload: any; + + try { + payload = SuperJson.deserialize(data.payload); + } catch (e: any) { + payload = data.payload; + } + + let parentExecutionContext = (data as any) + .$$execution_context$$ as ExecutionContext; + while ( + parentExecutionContext && + parentExecutionContext.type == 'job' && + parentExecutionContext.parent + ) + parentExecutionContext = parentExecutionContext.parent; + + let jobExecutionContext = createExecutionContext({ + type: 'job', + contextId: job.id ?? generateSnowflakeId(), + queue: opts.name, + parent: parentExecutionContext + }); + + await provideExecutionContext( + jobExecutionContext, + async () => + await withQueueSpan( + { + name: `queue process: ${opts.name}`, + kind: SpanKind.CONSUMER, + queueName: opts.name, + operation: 'process', + createSpan: true, + attributes: { + 'messaging.message.id': job.id ? String(job.id) : undefined, + 'messaging.message.retry.count': job.attemptsMade + } + }, + async () => await cb(payload as any, job) + ) + ); + } catch (e: any) { + if (e instanceof QueueRetryError) { + await delay(1000); + throw e; + } else { + Sentry.captureException(e); + console.error(e); + throw e; + } + } + }, + { + concurrency: 50, + ...opts.workerOpts, + connection: redisOpts, + + settings: { + ...opts.workerOpts?.settings, + + backoffStrategy: (attemptsMade: number) => { + let baseDelay = 1000; + let maxDelay = 1000 * 60 * 10; // 10 minutes + + let delay = baseDelay * Math.pow(2, attemptsMade - 1); + if (delay > maxDelay) delay = maxDelay; + + return delay; + } + } + } + ); + + return { + close: () => worker.close() + }; + } + }; + } + }; +}; diff --git a/src/_shared/backend/queue/src/index.ts b/src/_shared/backend/queue/src/index.ts new file mode 100644 index 000000000..e1ddb6b87 --- /dev/null +++ b/src/_shared/backend/queue/src/index.ts @@ -0,0 +1,56 @@ +import { createBullMqQueue } from './drivers/bullmq'; +import type { BullMqCreateOptions } from './drivers/bullmq'; +import type { IQueueProcessor } from './types'; + +export * from './lib/queueRetryError'; +export * from './types'; + +let seenNames = new Set(); + +export let createQueue = (opts: { driver?: 'bullmq' } & BullMqCreateOptions) => { + if (!opts.driver) opts.driver = 'bullmq'; + + if (seenNames.has(opts.name)) { + throw new Error(`Queue with name ${opts.name} already exists`); + } + seenNames.add(opts.name); + + return createBullMqQueue({ + name: opts.name, + redisUrl: opts.redisUrl, + + jobOpts: opts.jobOpts, + queueOpts: opts.queueOpts, + workerOpts: opts.workerOpts + }); +}; + +export let combineQueueProcessors = (opts: IQueueProcessor[]): IQueueProcessor => { + return { + start: async () => { + let processors = await Promise.all(opts.map(x => x.start())); + + return { + close: async () => { + await Promise.all(processors.map(x => x && x.close())); + } + }; + } + }; +}; + +export let runQueueProcessors = async (processor: IQueueProcessor[]) => { + let combined = combineQueueProcessors(processor); + + let res = await combined.start(); + + process.on('SIGINT', async () => { + if (res) await res.close(); + }); + + process.on('SIGTERM', async () => { + if (res) await res.close(); + }); + + return res; +}; diff --git a/src/_shared/backend/queue/src/lib/queueRetryError.ts b/src/_shared/backend/queue/src/lib/queueRetryError.ts new file mode 100644 index 000000000..d6878ece8 --- /dev/null +++ b/src/_shared/backend/queue/src/lib/queueRetryError.ts @@ -0,0 +1,5 @@ +export class QueueRetryError extends Error { + constructor() { + super('RETRY'); + } +} diff --git a/src/_shared/backend/queue/src/types.ts b/src/_shared/backend/queue/src/types.ts new file mode 100644 index 000000000..c6d03e9c8 --- /dev/null +++ b/src/_shared/backend/queue/src/types.ts @@ -0,0 +1,18 @@ +import type { Job } from 'bullmq'; + +export interface IQueueProcessor { + start: () => Promise<{ close: () => any } | undefined | void>; +} + +export interface IQueue { + name: string; + add(payload: JobData, opts?: QueueOptions): Promise<{}>; + addMany(payloads: JobData[], opts?: QueueOptions): Promise; + addManyWithOps( + payloads: { + data: JobData; + opts?: QueueOptions; + }[] + ): Promise; + process(cb: (payload: JobData, job: Job) => Promise): IQueueProcessor; +} diff --git a/src/_shared/backend/queue/tsconfig.json b/src/_shared/backend/queue/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/queue/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/redis/package.json b/src/_shared/backend/redis/package.json new file mode 100644 index 000000000..885dd9026 --- /dev/null +++ b/src/_shared/backend/redis/package.json @@ -0,0 +1,24 @@ +{ + "name": "@mtsrc/redis", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/memo": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/random-number": "1.0.0", + "ioredis": "^5.8.2", + "p-queue": "^9.0.1", + "redis": "^5.10.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/redis/src/index.ts b/src/_shared/backend/redis/src/index.ts new file mode 100644 index 000000000..faffeafde --- /dev/null +++ b/src/_shared/backend/redis/src/index.ts @@ -0,0 +1,3 @@ +export * from './redis'; +export * from './redisStreams'; +export * from './utils/parseRedisUrl'; diff --git a/src/_shared/backend/redis/src/redis.ts b/src/_shared/backend/redis/src/redis.ts new file mode 100644 index 000000000..1db31a395 --- /dev/null +++ b/src/_shared/backend/redis/src/redis.ts @@ -0,0 +1,69 @@ +import { memo } from '@mtsrc/memo'; +import { createClient } from 'redis'; +import type { RedisClientOptions } from 'redis'; +import { parseRedisUrl } from './utils/parseRedisUrl'; + +export let createRedisClient = (opts: RedisClientOptions & { redisUrl: string }) => { + let url = opts.redisUrl; + + let sanitizedUrl = new URL(url); + sanitizedUrl.password = '***'; + + let parsedUrl = parseRedisUrl(url); + + let connect = async () => { + let client = createClient({ + database: parsedUrl.db, + password: parsedUrl.password, + + pingInterval: 3000, + socket: { + host: parsedUrl.host, + port: parsedUrl.port, + tls: parsedUrl.tls ? true : undefined, + + reconnectStrategy: retries => { + console.log(`Checking redis reconnection: ${sanitizedUrl}`); + + const jitter = Math.floor(Math.random() * 200); + const delay = Math.min(Math.pow(2, retries) * 50, 2000); + + return delay + jitter; + } + } + }) + .on('error', e => { + console.error(`Redis error for ${sanitizedUrl}`); + console.error(e); + }) + .on('reconnecting', () => { + console.log(`Reconnecting to redis: ${sanitizedUrl}`); + }); + + let origSendCommand = client.sendCommand; + client.sendCommand = function (cmd: any, ...args: any[]) { + try { + throw new Error('trace'); + } catch (e) { + console.log(e); + } + // @ts-ignore + return origSendCommand.call(this as any, cmd, ...args); + } as any; + + try { + await client.connect(); + } catch (e) { + console.error(e); + console.log(`Could not connect to redis: ${url}`); + throw e; + } + + return client; + }; + + return { + lazy: () => memo(connect), + eager: async () => await connect() + }; +}; diff --git a/src/_shared/backend/redis/src/redisStreams.ts b/src/_shared/backend/redis/src/redisStreams.ts new file mode 100644 index 000000000..97b1516b3 --- /dev/null +++ b/src/_shared/backend/redis/src/redisStreams.ts @@ -0,0 +1,136 @@ +import { generateCustomId } from '@mtsrc/id'; +import { randomNumber } from '@mtsrc/random-number'; +import { serialize } from '@mtsrc/serialize'; +import Redis from 'ioredis'; +import PQueue from 'p-queue'; +import { parseRedisUrl } from './utils/parseRedisUrl'; + +let MIN_IDLE_TIME_FOR_AUTOCLAIM = 1000 * 60 * 5; + +export class RedisStreams { + constructor( + private readonly name: string, + private readonly redisUrl: string + ) {} + + private async createRedis() { + return new Redis(parseRedisUrl(this.redisUrl)); + } + + async createReceiver( + opts: { groupId: string; consumerId?: string; concurrency?: number }, + processor: (msg: Message) => Promise + ) { + let redis = await this.createRedis(); + + let queue = new PQueue({ concurrency: opts.concurrency ?? 10 }); + + // Create the consumer group + try { + await redis.xgroup('CREATE', this.name, opts.groupId, '$', 'MKSTREAM'); + } catch (e: any) { + // Ignore BUSYGROUP errors -> group already exists + if (!e.message.includes('BUSYGROUP')) { + throw e; + } + } + + let consumerId = opts.consumerId ?? generateCustomId('evcns'); + + let iteration = 0; + let randomClaimIteration = randomNumber(50, 100); + + // Create the consumer + while (true) { + // Create a new redis instance for each read group + // To avoid blocking the main redis instance (e.g., for ACKs) + let isolatedRedis = await this.createRedis(); + + let response = await isolatedRedis.xreadgroup( + 'GROUP', + opts.groupId, + consumerId, + 'COUNT', + 20, // Maximum number of entries to read + 'BLOCK', + 100, // Block for 100ms to wait for new entries (avoid polling) + 'STREAMS', + this.name, + '>' // Next entry ID that no consumer in this group has read + ); + + // Close the isolated connection after reading + isolatedRedis.disconnect(); + + let messages: any[] = []; + + if (response && response.length > 0) { + messages = response.flatMap(([streamName, entries]: any) => + entries.map(([id, fields]: any) => ({ + id, + message: { + payload: fields[1] // ioredis returns fields as ['key', 'value', ...] + } + })) + ); + } + + if (iteration++ % randomClaimIteration == 0) { + let claimRes: any = await redis.xautoclaim( + this.name, + opts.groupId, + consumerId, + MIN_IDLE_TIME_FOR_AUTOCLAIM, + '0-0', + 'COUNT', + 100 + ); + + // claimRes format: [next_id, claimed_messages, deleted_message_ids] + if (claimRes && claimRes[1]) { + let claimedMessages = claimRes[1].map(([id, fields]: any) => ({ + id, + message: { + payload: fields[1] + } + })); + messages.push(...claimedMessages); + } + } + + for (let msg of messages) { + queue.add(async () => { + await processor(serialize.decode(msg.message.payload)); + await redis.xack(this.name, opts.groupId, msg.id); + }); + } + } + } + + private hasInstallCleanup = false; + private installCleanup() { + if (this.hasInstallCleanup) return; + + setTimeout( + async () => { + let redis = await this.createRedis(); + + await redis.xtrim(this.name, 'MAXLEN', '~', 10_000); + + await redis.quit(); + }, + 1000 * 60 * 15 + ); + } + + private sendRedisConnection?: Redis; + async send(payload: Message) { + if (!this.sendRedisConnection) { + this.sendRedisConnection = await this.createRedis(); + } + + await this.sendRedisConnection.xadd(this.name, '*', 'payload', serialize.encode(payload)); + + this.installCleanup(); + } +} diff --git a/src/_shared/backend/redis/src/utils/parseRedisUrl.test.ts b/src/_shared/backend/redis/src/utils/parseRedisUrl.test.ts new file mode 100644 index 000000000..abbfb6535 --- /dev/null +++ b/src/_shared/backend/redis/src/utils/parseRedisUrl.test.ts @@ -0,0 +1,46 @@ +import { describe, expect, test } from 'vitest'; +import { parseRedisUrl } from './parseRedisUrl'; + +describe('parseRedisUrl', () => { + test('should parse a valid Redis URL', () => { + const url = 'redis://localhost:6379/0'; + const expected = { + host: 'localhost', + port: 6379, + password: '', + db: 0 + }; + + const result = parseRedisUrl(url); + + expect(result).toEqual(expected); + }); + + test('should parse a Redis URL with password', () => { + const url = 'redis://user:password@localhost:6379/0'; + const expected = { + host: 'localhost', + port: 6379, + password: 'password', + db: 0 + }; + + const result = parseRedisUrl(url); + + expect(result).toEqual(expected); + }); + + test('should parse a Redis URL with a different database', () => { + const url = 'redis://localhost:6379/1'; + const expected = { + host: 'localhost', + port: 6379, + password: '', + db: 1 + }; + + const result = parseRedisUrl(url); + + expect(result).toEqual(expected); + }); +}); diff --git a/src/_shared/backend/redis/src/utils/parseRedisUrl.ts b/src/_shared/backend/redis/src/utils/parseRedisUrl.ts new file mode 100644 index 000000000..513fe2bf4 --- /dev/null +++ b/src/_shared/backend/redis/src/utils/parseRedisUrl.ts @@ -0,0 +1,12 @@ +export let parseRedisUrl = (url: string) => { + let u = new URL(url); + + return { + host: u.hostname, + port: parseInt(u.port), + password: u.password, + db: parseInt(u.pathname.slice(1)), + + tls: u.protocol === 'rediss:' ? { rejectUnauthorized: false } : undefined + }; +}; diff --git a/src/_shared/backend/redis/tsconfig.json b/src/_shared/backend/redis/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/redis/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/service/package.json b/src/_shared/backend/service/package.json new file mode 100644 index 000000000..e1abc0b86 --- /dev/null +++ b/src/_shared/backend/service/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/service", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/telemetry": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/service/src/index.ts b/src/_shared/backend/service/src/index.ts new file mode 100644 index 000000000..e02136442 --- /dev/null +++ b/src/_shared/backend/service/src/index.ts @@ -0,0 +1,77 @@ +import { + hasActiveSpan, + isTelemetryEnabled, + SpanStatusCode, + trace +} from '@mtsrc/telemetry'; + +export type GetServiceControllerMethodClient any> = ( + ...args: Parameters +) => Promise>>; + +export type GetServiceControllerClient = { + [K in keyof Obj]: Obj[K] extends (...args: any[]) => any + ? GetServiceControllerMethodClient + : never; +}; + +export class Service { + #methods: Methods; + + private constructor( + private readonly id: string, + object: () => Methods + ) { + this.#methods = object(); + } + + static create(id: string, object: () => Methods) { + return new Service(id, object); + } + + build() { + // return this.#methods; + + let tracer = trace.getTracer(`mt.service.${this.id}`); + + let methods: Record = {}; + let self = this; + + let properties = Object.getOwnPropertyNames(Object.getPrototypeOf(this.#methods)); + + for (let methodName of properties) { + if (methodName === 'constructor') continue; + + let method = (this.#methods as any)[methodName]; + + if (typeof method == 'function') { + methods[methodName] = function () { + let args = Array.from(arguments); + + if (!isTelemetryEnabled() || !hasActiveSpan()) { + return method.apply(self.#methods, args); + } + + return tracer.startActiveSpan(`${self.id}.${methodName}`, async span => { + try { + return await method.apply(self.#methods, args); + } catch (error) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error instanceof Error ? error.message : String(error) + }); + + throw error; + } finally { + span.end(); + } + }); + }; + } else { + methods[methodName] = method; + } + } + + return methods as Methods; + } +} diff --git a/src/_shared/backend/service/tsconfig.json b/src/_shared/backend/service/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/service/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/telemetry/package.json b/src/_shared/backend/telemetry/package.json new file mode 100644 index 000000000..50b9aba4e --- /dev/null +++ b/src/_shared/backend/telemetry/package.json @@ -0,0 +1,28 @@ +{ + "name": "@mtsrc/telemetry", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/execution-context": "1.0.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^2.5.0", + "@opentelemetry/core": "^2.5.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.211.0", + "@opentelemetry/instrumentation": "^0.212.0", + "@opentelemetry/resources": "^2.5.0", + "@opentelemetry/sdk-trace-base": "^2.5.0", + "@opentelemetry/sdk-trace-node": "^2.5.0", + "@opentelemetry/semantic-conventions": "^1.39.0", + "@prisma/instrumentation": "^7.4.1" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4" + } +} diff --git a/src/_shared/backend/telemetry/src/index.ts b/src/_shared/backend/telemetry/src/index.ts new file mode 100644 index 000000000..66d7259af --- /dev/null +++ b/src/_shared/backend/telemetry/src/index.ts @@ -0,0 +1,162 @@ +import { + context as otelContext, + diag, + DiagConsoleLogger, + DiagLogLevel, + trace +} from '@opentelemetry/api'; +import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; +import { + CompositePropagator, + suppressTracing, + W3CBaggagePropagator, + W3CTraceContextPropagator +} from '@opentelemetry/core'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { registerInstrumentations } from '@opentelemetry/instrumentation'; +import { resourceFromAttributes } from '@opentelemetry/resources'; +import { + AlwaysOffSampler, + BatchSpanProcessor, + ParentBasedSampler +} from '@opentelemetry/sdk-trace-base'; +import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'; +import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions'; +import { PrismaInstrumentation } from '@prisma/instrumentation'; +import { + withExecutionContextOptional, + withExecutionTraceContext +} from '@mtsrc/execution-context'; + +let initialized = false; +const DEPLOYMENT_ENVIRONMENT_RESOURCE_ATTRIBUTE = 'deployment.environment.name' as const; + +let parseKeyValuePairs = (value: string | undefined): Record => { + if (!value?.trim()) return {}; + let parsed: Record = {}; + + for (let pair of value.split(',')) { + let separator = pair.indexOf('='); + if (separator <= 0) continue; + + let key = pair.slice(0, separator).trim(); + let value = pair.slice(separator + 1).trim(); + + if (!key) continue; + parsed[key] = value; + } + + return parsed; +}; + +let parseHeaders = (headers: string | undefined): Record | undefined => { + let parsed = parseKeyValuePairs(headers); + return Object.keys(parsed).length ? parsed : undefined; +}; + +let parseResourceAttributes = (attrs: string | undefined): Record => + parseKeyValuePairs(attrs); + +export { + context as otelContext, + propagation, + SpanKind, + SpanStatusCode, + trace +} from '@opentelemetry/api'; + +export let isTelemetryEnabled = () => + typeof process !== 'undefined' && process.env?.['OTEL_ENABLED'] === 'true'; + +export let hasActiveSpan = () => !!trace.getSpan(otelContext.active()); + +export let hasActiveTraceContext = () => !!trace.getSpanContext(otelContext.active()); + +export let withTracingSuppressed = async (cb: () => Promise): Promise => { + let suppressedContext = suppressTracing(otelContext.active()); + return await otelContext.with(suppressedContext, cb); +}; + +export let withExecutionContextTraceFallback = async (cb: () => Promise): Promise => { + if (!isTelemetryEnabled()) { + return await cb(); + } + + if (hasActiveTraceContext()) { + return await cb(); + } + + return await withExecutionContextOptional(async executionContext => { + if (!executionContext) { + return await withTracingSuppressed(cb); + } + + return await withExecutionTraceContext(executionContext, async () => { + if (hasActiveTraceContext()) { + return await cb(); + } + + return await withTracingSuppressed(cb); + }); + }); +}; + +export let initTelemetry = (opts: { serviceName: string; allowRootSpans?: boolean }) => { + if (initialized) return; + + let endpoint = process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT?.trim(); + if (process.env.OTEL_ENABLED !== 'true' || !endpoint) return; + + if (process.env.OTEL_DEBUG === 'true') { + diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO); + } + + let serviceName = process.env.OTEL_SERVICE_NAME?.trim() || opts.serviceName; + let extraResourceAttributes = parseResourceAttributes(process.env.OTEL_RESOURCE_ATTRIBUTES); + let allowRootSpans = + opts.allowRootSpans === true || process.env.OTEL_ALLOW_ROOT_SPANS === 'true'; + + let provider = new NodeTracerProvider({ + resource: resourceFromAttributes({ + [ATTR_SERVICE_NAME]: serviceName, + [DEPLOYMENT_ENVIRONMENT_RESOURCE_ATTRIBUTE]: + process.env.METORIAL_ENV ?? process.env.NODE_ENV ?? 'development', + ...extraResourceAttributes + }), + sampler: allowRootSpans + ? undefined + : new ParentBasedSampler({ + root: new AlwaysOffSampler() + }), + spanProcessors: [ + new BatchSpanProcessor( + new OTLPTraceExporter({ + url: endpoint, + headers: parseHeaders(process.env.OTEL_EXPORTER_OTLP_HEADERS) + }) + ) + ] + }); + + provider.register({ + contextManager: new AsyncLocalStorageContextManager(), + propagator: new CompositePropagator({ + propagators: [new W3CTraceContextPropagator(), new W3CBaggagePropagator()] + }) + }); + + registerInstrumentations({ + tracerProvider: provider, + instrumentations: [ + new PrismaInstrumentation({ + ignoreSpanTypes: [/^prisma:engine:/] + }) + ] + }); + + initialized = true; + + console.log( + `[otel] initialized for ${serviceName} -> ${endpoint} (allowRootSpans=${allowRootSpans})` + ); +}; diff --git a/src/_shared/backend/telemetry/tsconfig.json b/src/_shared/backend/telemetry/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/telemetry/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/testing-tools/package.json b/src/_shared/backend/testing-tools/package.json new file mode 100644 index 000000000..abc97097f --- /dev/null +++ b/src/_shared/backend/testing-tools/package.json @@ -0,0 +1,22 @@ +{ + "name": "@mtsrc/testing-tools", + "version": "1.0.0", + "private": true, + "type": "module", + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "vite": "^5.4.1" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + }, + "peerDependencies": { + "vitest": ">=3.0.0" + } +} diff --git a/src/_shared/backend/testing-tools/src/factories.test.ts b/src/_shared/backend/testing-tools/src/factories.test.ts new file mode 100644 index 000000000..79c273c49 --- /dev/null +++ b/src/_shared/backend/testing-tools/src/factories.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, test } from 'vitest'; +import { defineFactory } from './factories'; + +type User = { + name: string; + role: string; + id?: string; +}; + +describe('defineFactory', () => { + test('build merges overrides', () => { + const factory = defineFactory(() => ({ name: 'Ada', role: 'engineer' })); + + expect(factory.build({ role: 'lead' })).toEqual({ + name: 'Ada', + role: 'lead' + }); + }); + + test('create uses persist when provided', async () => { + const factory = defineFactory( + () => ({ name: 'Ada', role: 'engineer' }), + { + persist: async value => ({ ...value, id: 'user_1' }) + } + ); + + await expect(factory.create({ role: 'admin' })).resolves.toEqual({ + name: 'Ada', + role: 'admin', + id: 'user_1' + }); + }); + + test('supports custom merge logic', () => { + const factory = defineFactory( + { name: 'Ada', role: 'engineer' }, + { + merge: (base, overrides) => ({ + ...base, + ...overrides, + role: overrides.role ? `role:${overrides.role}` : base.role + }) + } + ); + + expect(factory.build({ role: 'admin' })).toEqual({ + name: 'Ada', + role: 'role:admin' + }); + }); +}); diff --git a/src/_shared/backend/testing-tools/src/factories/index.ts b/src/_shared/backend/testing-tools/src/factories/index.ts new file mode 100644 index 000000000..19641c95c --- /dev/null +++ b/src/_shared/backend/testing-tools/src/factories/index.ts @@ -0,0 +1,45 @@ +export type Factory = { + build(overrides?: Partial): T; + create(overrides?: Partial): Promise; +}; + +export type FactoryOptions = { + persist?: (value: T) => Promise; + merge?: (base: T, overrides: Partial) => T; +}; + +const defaultMerge = (base: T, overrides: Partial): T => + ({ + ...(base as Record), + ...(overrides as Record) + }) as T; + +export const defineFactory = ( + defaults: T | (() => T), + options: FactoryOptions = {} +): Factory => { + const merge = options.merge ?? defaultMerge; + + const resolveDefaults = (): T => { + const value = typeof defaults === 'function' ? (defaults as () => T)() : defaults; + if (value && typeof value === 'object' && !Array.isArray(value)) { + return { ...(value as Record) } as T; + } + return value; + }; + + const build = (overrides: Partial = {}): T => merge(resolveDefaults(), overrides); + + const create = async (overrides: Partial = {}): Promise => { + const value = build(overrides); + if (!options.persist) { + return value; + } + return options.persist(value); + }; + + return { + build, + create + }; +}; diff --git a/src/_shared/backend/testing-tools/src/http.test.ts b/src/_shared/backend/testing-tools/src/http.test.ts new file mode 100644 index 000000000..baebe1dbc --- /dev/null +++ b/src/_shared/backend/testing-tools/src/http.test.ts @@ -0,0 +1,49 @@ +import { describe, expect, test } from 'vitest'; +import { createFetchRouter, createTestServer } from './http'; + +describe('createFetchRouter', () => { + test('routes matching requests and falls back to original fetch', async () => { + const originalFetch = globalThis.fetch; + + const fakeFetch = (async (_input: RequestInfo | URL, _init?: RequestInit) => + new Response('passthrough')) as typeof fetch; + if (originalFetch && 'preconnect' in originalFetch) { + fakeFetch.preconnect = originalFetch.preconnect; + } + globalThis.fetch = fakeFetch; + + const router = createFetchRouter(); + router.registerRoute('http://example.test/api', () => new Response('routed')); + router.install(); + + const routed = await fetch('http://example.test/api/health'); + expect(await routed.text()).toBe('routed'); + + const fallback = await fetch('http://other.test/health'); + expect(await fallback.text()).toBe('passthrough'); + + router.uninstall(); + globalThis.fetch = originalFetch; + }); +}); + +describe('createTestServer', () => { + test('wraps a fetch handler', async () => { + const server = createTestServer(request => { + const url = new URL(request.url); + return new Response(`${request.method}:${url.pathname}`); + }); + + const response = await server.get('/health'); + expect(await response.text()).toBe('GET:/health'); + }); + + test('wraps a request handler', async () => { + const server = createTestServer({ + request: async path => new Response(`ok:${path}`) + }); + + const response = await server.postJson('/ready', { ok: true }); + expect(await response.text()).toBe('ok:/ready'); + }); +}); diff --git a/src/_shared/backend/testing-tools/src/http/index.ts b/src/_shared/backend/testing-tools/src/http/index.ts new file mode 100644 index 000000000..4c8b40503 --- /dev/null +++ b/src/_shared/backend/testing-tools/src/http/index.ts @@ -0,0 +1,165 @@ +export type FetchHandler = (request: Request) => Promise | Response; + +export type FetchLikeApp = { + fetch?: (request: Request) => Promise | Response; + request?: (path: string, init?: RequestInit) => Promise; +}; + +type FetchInput = Request | string | URL; + +type FetchRoute = { + origin: string; + pathPrefix: string; + handler: FetchHandler; +}; + +const createRequest = (path: string, init?: RequestInit): Request => { + const url = path.startsWith('http') + ? path + : `http://test${path.startsWith('/') ? '' : '/'}${path}`; + return new Request(url, init); +}; + +export const createFetchRouter = () => { + const routes: FetchRoute[] = []; + let originalFetch: typeof fetch | null = null; + let installed = false; + + const registerRoute = (endpoint: string, handler: FetchHandler) => { + const url = new URL(endpoint); + const pathPrefix = url.pathname.replace(/\/+$/, '') || '/'; + + const exists = routes.some( + route => route.origin === url.origin && route.pathPrefix === pathPrefix + ); + if (!exists) { + routes.push({ origin: url.origin, pathPrefix, handler }); + } + }; + + const shouldHandle = (url: URL) => + routes.find( + route => url.origin === route.origin && url.pathname.startsWith(route.pathPrefix) + ); + + const routedFetch = async (input: FetchInput, init?: RequestInit) => { + const request = + typeof input === 'string' || input instanceof URL + ? new Request(input.toString(), init) + : new Request(input, init); + const url = new URL(request.url); + + const route = shouldHandle(url); + if (route) { + return route.handler(request); + } + + if (!originalFetch) { + throw new Error('Original fetch is not available'); + } + + return originalFetch(request); + }; + + const install = () => { + if (installed) return; + if (!globalThis.fetch) { + throw new Error('global fetch is not available'); + } + + originalFetch = globalThis.fetch.bind(globalThis); + const fetchWithProps = routedFetch as typeof fetch; + if ('preconnect' in originalFetch) { + (fetchWithProps as any).preconnect = (originalFetch as any).preconnect; + } + + globalThis.fetch = fetchWithProps; + installed = true; + }; + + const uninstall = () => { + if (!installed) return; + if (originalFetch) { + globalThis.fetch = originalFetch; + } + installed = false; + }; + + return { + registerRoute, + fetch: routedFetch, + install, + uninstall, + isInstalled: () => installed + }; +}; + +const resolveRequest = (app: FetchHandler | FetchLikeApp) => { + if (typeof app === 'function') { + return async (path: string, init?: RequestInit) => app(createRequest(path, init)); + } + + if (app.request) { + return (path: string, init?: RequestInit) => app.request!(path, init); + } + + if (app.fetch) { + return async (path: string, init?: RequestInit) => app.fetch!(createRequest(path, init)); + } + + throw new Error('createTestServer requires a fetch or request handler'); +}; + +const resolveFetch = (app: FetchHandler | FetchLikeApp) => { + if (typeof app === 'function') { + return async (request: Request) => app(request); + } + + if (app.fetch) { + return async (request: Request) => app.fetch!(request); + } + + if (app.request) { + return async (request: Request) => { + const url = new URL(request.url); + return app.request!(`${url.pathname}${url.search}`, { + method: request.method, + headers: request.headers, + body: request.body + }); + }; + } + + throw new Error('createTestServer requires a fetch or request handler'); +}; + +const withJson = (init: RequestInit | undefined, body: unknown): RequestInit => { + const headers = new Headers(init?.headers ?? {}); + if (!headers.has('content-type')) { + headers.set('content-type', 'application/json'); + } + + return { + ...init, + headers, + body: JSON.stringify(body) + }; +}; + +export const createTestServer = (app: FetchHandler | FetchLikeApp) => { + const request = resolveRequest(app); + const fetch = resolveFetch(app); + + return { + fetch, + request, + get: (path: string, init?: RequestInit) => request(path, { ...init, method: 'GET' }), + delete: (path: string, init?: RequestInit) => request(path, { ...init, method: 'DELETE' }), + postJson: (path: string, body: unknown, init?: RequestInit) => + request(path, { ...withJson(init, body), method: 'POST' }), + putJson: (path: string, body: unknown, init?: RequestInit) => + request(path, { ...withJson(init, body), method: 'PUT' }), + patchJson: (path: string, body: unknown, init?: RequestInit) => + request(path, { ...withJson(init, body), method: 'PATCH' }) + }; +}; diff --git a/src/_shared/backend/testing-tools/src/index.ts b/src/_shared/backend/testing-tools/src/index.ts new file mode 100644 index 000000000..8a187d204 --- /dev/null +++ b/src/_shared/backend/testing-tools/src/index.ts @@ -0,0 +1,7 @@ +export * from './vitest/config.ts'; +export * from './vitest/env.ts'; +export * from './vitest/setup.ts'; +export * from './vitest/ci.ts'; +export * from './prisma/index.ts'; +export * from './factories/index.ts'; +export * from './http/index.ts'; diff --git a/src/_shared/backend/testing-tools/src/prisma.test.ts b/src/_shared/backend/testing-tools/src/prisma.test.ts new file mode 100644 index 000000000..e04a1d052 --- /dev/null +++ b/src/_shared/backend/testing-tools/src/prisma.test.ts @@ -0,0 +1,55 @@ +import { describe, expect, test } from 'vitest'; +import { assertTestDatabaseUrl, createPrismaTestDb } from './prisma'; + +const createFakeClient = (tables: string[] = []) => { + const queries: string[] = []; + const calls: string[] = []; + + const client = { + $connect: async () => { + calls.push('connect'); + }, + $disconnect: async () => { + calls.push('disconnect'); + }, + $queryRawUnsafe: async () => + tables.map(tablename => ({ tablename })) as T, + $executeRawUnsafe: async (query: string) => { + queries.push(query); + calls.push('execute'); + return 0; + } + }; + + return { client, calls, queries }; +}; + +describe('assertTestDatabaseUrl', () => { + test('accepts url when guard matches', () => { + expect(() => assertTestDatabaseUrl('postgres://localhost/test', 'test')).not.toThrow(); + }); + + test('throws when guard rejects url', () => { + expect(() => assertTestDatabaseUrl('postgres://localhost/prod', 'test')).toThrow( + 'Tests must use a test database' + ); + }); +}); + +describe('cleanDatabase', () => { + test('truncates tables except excluded ones', async () => { + const { client, queries } = createFakeClient(['users', 'sessions']); + const db = createPrismaTestDb({ + url: 'postgres://localhost/test', + guard: 'test', + excludeTables: ['sessions'], + prismaClientFactory: () => client + }); + + await db.clean(); + + expect(queries).toHaveLength(1); + expect(queries[0]).toContain('TRUNCATE TABLE "users"'); + expect(queries[0]).not.toContain('sessions'); + }); +}); diff --git a/src/_shared/backend/testing-tools/src/prisma/index.ts b/src/_shared/backend/testing-tools/src/prisma/index.ts new file mode 100644 index 000000000..e15e7364c --- /dev/null +++ b/src/_shared/backend/testing-tools/src/prisma/index.ts @@ -0,0 +1,169 @@ +export type TestDbGuard = string | RegExp | ((url: string) => boolean); + +type VitestHook = (fn: () => unknown | Promise, timeout?: number) => void; + +const getVitestHooks = () => { + const globals = globalThis as typeof globalThis & { + beforeAll?: VitestHook; + beforeEach?: VitestHook; + afterAll?: VitestHook; + }; + const { beforeAll, beforeEach, afterAll } = globals; + + if (!beforeAll || !beforeEach || !afterAll) { + throw new Error( + 'Vitest globals are not available. Use withTestDb inside test files, not setupFiles.' + ); + } + + return { beforeAll, beforeEach, afterAll }; +}; + +export type PrismaClientLike = { + $connect(): Promise; + $disconnect(): Promise; + $queryRawUnsafe(query: string): Promise; + $executeRawUnsafe(query: string): Promise; +}; + +export type CreatePrismaTestDbOptions = { + url?: string; + guard?: TestDbGuard; + label?: string; + schema?: string; + excludeTables?: string[]; + prismaClientFactory: (url: string) => TClient; +}; + +export const assertTestDatabaseUrl = ( + url: string, + guard?: TestDbGuard, + label: string = 'DATABASE_URL' +): void => { + if (!url) { + throw new Error(`${label} must be set for tests.`); + } + + if (!guard) { + return; + } + + const isSafe = + typeof guard === 'string' + ? url.includes(guard) + : guard instanceof RegExp + ? guard.test(url) + : guard(url); + + if (!isSafe) { + throw new Error(`Tests must use a test database (${label}). Current ${label}: ${url}.`); + } +}; + +export const cleanDatabase = async ( + prisma: PrismaClientLike, + options: { schema?: string; excludeTables?: string[] } = {} +): Promise => { + const schema = options.schema ?? 'public'; + const exclude = new Set(options.excludeTables ?? []); + + const tables = await prisma.$queryRawUnsafe>( + `SELECT tablename FROM pg_tables WHERE schemaname = '${schema}'` + ); + + if (!tables.length) { + return; + } + + const tableNames = tables + .map(table => table.tablename) + .filter(name => !exclude.has(name)) + .map(name => `"${name}"`) + .join(', '); + + if (!tableNames) { + return; + } + + await prisma.$executeRawUnsafe(`TRUNCATE TABLE ${tableNames} RESTART IDENTITY CASCADE`); +}; + +export const createPrismaTestDb = ( + options: CreatePrismaTestDbOptions +) => { + const label = options.label ?? 'DATABASE_URL'; + const url = options.url ?? process.env[label] ?? ''; + + assertTestDatabaseUrl(url, options.guard, label); + + const client = options.prismaClientFactory(url); + const clean = () => + cleanDatabase(client, { + schema: options.schema, + excludeTables: options.excludeTables + }); + + const connect = async () => { + await client.$connect(); + }; + + const disconnect = async () => { + await client.$disconnect(); + }; + + const setup = async () => { + await connect(); + await clean(); + }; + + const teardown = async () => { + await disconnect(); + }; + + return { + client, + connect, + disconnect, + clean, + setup, + teardown + }; +}; + +export const withTestDb = ( + options: CreatePrismaTestDbOptions & { cleanBeforeEach?: boolean } +) => { + const db = createPrismaTestDb(options); + const { beforeAll, beforeEach, afterAll } = getVitestHooks(); + + beforeAll(async () => { + await db.connect(); + await db.clean(); + }); + + if (options.cleanBeforeEach) { + beforeEach(async () => { + await db.clean(); + }); + } + + afterAll(async () => { + await db.disconnect(); + }); + + return { + client: db.client, + clean: db.clean + }; +}; + +export const setupPrismaTestDb = async ( + options: CreatePrismaTestDbOptions +) => { + const db = createPrismaTestDb(options); + + await db.connect(); + await db.clean(); + + return db; +}; diff --git a/src/_shared/backend/testing-tools/src/vitest.test.ts b/src/_shared/backend/testing-tools/src/vitest.test.ts new file mode 100644 index 000000000..86e0d188e --- /dev/null +++ b/src/_shared/backend/testing-tools/src/vitest.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, test } from 'vitest'; +import { createVitestConfig, withAliases, baseVitestConfig } from './vitest/config'; +import { loadTestEnv } from './vitest/env'; + +describe('vitest config helpers', () => { + test('createVitestConfig returns defaults and merges overrides', () => { + expect(baseVitestConfig.test?.testTimeout).toBe(30_000); + const config = createVitestConfig({ + test: { + testTimeout: 20_000 + } + }); + + expect(config.test?.maxConcurrency).toBe(1); + expect(config.test?.testTimeout).toBe(20_000); + }); + + test('withAliases merges resolve aliases', () => { + const config = withAliases(createVitestConfig(), { '@': './src' }); + + expect(config.resolve?.alias).toEqual({ '@': './src' }); + }); + + test('loadTestEnv reads matching prefixed variables', () => { + const original = process.env.TESTING_TOOLS_SAMPLE; + process.env.TESTING_TOOLS_SAMPLE = 'value'; + + const env = loadTestEnv('test', process.cwd(), 'TESTING_TOOLS_'); + + expect(env.TESTING_TOOLS_SAMPLE).toBe('value'); + + if (original === undefined) { + delete process.env.TESTING_TOOLS_SAMPLE; + } else { + process.env.TESTING_TOOLS_SAMPLE = original; + } + }); +}); diff --git a/src/_shared/backend/testing-tools/src/vitest/ci.ts b/src/_shared/backend/testing-tools/src/vitest/ci.ts new file mode 100644 index 000000000..02735aab9 --- /dev/null +++ b/src/_shared/backend/testing-tools/src/vitest/ci.ts @@ -0,0 +1,4 @@ +export const isCi = (): boolean => + process.env.CI === 'true' || + process.env.GITHUB_ACTIONS === 'true' || + process.env.GITLAB_CI === 'true'; diff --git a/src/_shared/backend/testing-tools/src/vitest/config.ts b/src/_shared/backend/testing-tools/src/vitest/config.ts new file mode 100644 index 000000000..c84d1258e --- /dev/null +++ b/src/_shared/backend/testing-tools/src/vitest/config.ts @@ -0,0 +1,25 @@ +import { mergeConfig, type ViteUserConfig } from 'vitest/config'; +import { isCi } from './ci.ts'; + +export const baseVitestConfig: ViteUserConfig = { + test: { + globals: true, + environment: 'node', + testTimeout: 30_000, + hookTimeout: 30_000, + sequence: { + concurrent: false + }, + fileParallelism: false, + maxConcurrency: 1, + allowOnly: !isCi() + } +}; + +export const createVitestConfig = (overrides: ViteUserConfig = {}): ViteUserConfig => + mergeConfig(baseVitestConfig, overrides); + +export const withAliases = ( + config: ViteUserConfig, + aliases: Record +): ViteUserConfig => mergeConfig(config, { resolve: { alias: aliases } }); diff --git a/src/_shared/backend/testing-tools/src/vitest/env.ts b/src/_shared/backend/testing-tools/src/vitest/env.ts new file mode 100644 index 000000000..d790db26b --- /dev/null +++ b/src/_shared/backend/testing-tools/src/vitest/env.ts @@ -0,0 +1,10 @@ +import { loadEnv } from 'vite'; + +export const loadTestEnv = ( + mode: string | undefined = 'test', + cwd: string = process.cwd(), + prefix: string = '' +): Record => { + const resolvedMode = mode && mode.length > 0 ? mode : 'test'; + return loadEnv(resolvedMode, cwd, prefix); +}; diff --git a/src/_shared/backend/testing-tools/src/vitest/setup.ts b/src/_shared/backend/testing-tools/src/vitest/setup.ts new file mode 100644 index 000000000..60f2de69e --- /dev/null +++ b/src/_shared/backend/testing-tools/src/vitest/setup.ts @@ -0,0 +1,14 @@ +export type TestGlobalsOptions = { + tz?: string; + nodeEnv?: string; +}; + +export const setupTestGlobals = (options: TestGlobalsOptions = {}): void => { + if (options.tz) { + process.env.TZ = options.tz; + } + + if (options.nodeEnv) { + process.env.NODE_ENV = options.nodeEnv; + } +}; diff --git a/src/_shared/backend/testing-tools/tsconfig.json b/src/_shared/backend/testing-tools/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/testing-tools/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/backend/tokens/package.json b/src/_shared/backend/tokens/package.json new file mode 100644 index 000000000..cff506672 --- /dev/null +++ b/src/_shared/backend/tokens/package.json @@ -0,0 +1,19 @@ +{ + "name": "@mtsrc/tokens", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/base62": "1.0.0", + "@mtsrc/memo": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/backend/tokens/src/index.ts b/src/_shared/backend/tokens/src/index.ts new file mode 100644 index 000000000..e56053c16 --- /dev/null +++ b/src/_shared/backend/tokens/src/index.ts @@ -0,0 +1 @@ +export * from './tokens'; diff --git a/src/_shared/backend/tokens/src/tokens.test.ts b/src/_shared/backend/tokens/src/tokens.test.ts new file mode 100644 index 000000000..21ea99d4c --- /dev/null +++ b/src/_shared/backend/tokens/src/tokens.test.ts @@ -0,0 +1,92 @@ +import { beforeAll, describe, expect, test } from 'vitest'; +import { Tokens } from './tokens'; + +describe('Tokens', () => { + let privateKey: CryptoKey; + let publicKey: CryptoKey; + let tokens: Tokens; + + beforeAll(async () => { + let pair = await crypto.subtle.generateKey({ name: 'ECDSA', namedCurve: 'P-384' }, true, [ + 'sign', + 'verify' + ]); + + privateKey = pair.privateKey; + publicKey = pair.publicKey; + + tokens = new Tokens({ + privateKey: async () => privateKey, + publicKey: async () => publicKey + }); + }); + + test('should sign and verify tokens', async () => { + let data = { foo: 'bar' }; + let type = 'test_token'; + let token = await tokens.sign({ type, data }); + let result = await tokens.verify({ + expectedType: type, + token + }); + expect(result.verified).toBe(true); + expect(result.type).toBe(type); + expect(result.data).toEqual(data); + }); + + test('should not verify tokens with wrong type', async () => { + let data = { foo: 'bar' }; + let type = 'test_token'; + let token = await tokens.sign({ type, data }); + let result = await tokens.verify({ + expectedType: 'wrong', + token + }); + expect(result.verified).toBe(false); + }); + + test('should not verify tokens with wrong version', async () => { + let data = { foo: 'bar' }; + let type = 'test_token'; + let token = await tokens.sign({ type, data }); + let parts = token.split('_'); + parts[parts.length - 2] = 'wrong'; + let modifiedToken = parts.join('_'); + let result = await tokens.verify({ expectedType: type, token: modifiedToken }); + expect(result.verified).toBe(false); + }); + + test('should not verify tokens with wrong signature', async () => { + let data = { foo: 'bar' }; + let type = 'test_token'; + let token = await tokens.sign({ type, data }); + let parts = token.split('_'); + parts[parts.length - 1] = 'wrong'; + let modifiedToken = parts.join('_'); + let result = await tokens.verify({ expectedType: type, token: modifiedToken }); + expect(result.verified).toBe(false); + }); + + test('should not verify tokens with too few parts', async () => { + let data = { foo: 'bar' }; + let type = 'test_token'; + let token = await tokens.sign({ type, data }); + let parts = token.split('_'); + parts.pop(); + let modifiedToken = parts.join('_'); + let result = await tokens.verify({ expectedType: type, token: modifiedToken }); + expect(result.verified).toBe(false); + }); + + test('should not verify expired tokens', async () => { + let data = { foo: 'bar' }; + let type = 'test_token'; + let token = await tokens.sign({ + type, + data, + expiresAt: new Date(Date.now() - 1000) + }); + let result = await tokens.verify({ expectedType: type, token }); + expect(result.verified).toBe(false); + }); +}); diff --git a/src/_shared/backend/tokens/src/tokens.ts b/src/_shared/backend/tokens/src/tokens.ts new file mode 100644 index 000000000..6a042d468 --- /dev/null +++ b/src/_shared/backend/tokens/src/tokens.ts @@ -0,0 +1,167 @@ +import { base62 } from '@mtsrc/base62'; +import { memo } from '@mtsrc/memo'; + +export type TokenKeys = + | { + privateKey: string | (() => Promise | CryptoKey); + publicKey: string | (() => Promise | CryptoKey); + } + | { + secret: string; + }; + +type Signer = { + sign: (data: string) => Promise; + verify: (data: string, signature: string) => Promise; +}; + +let getSigner = (keys: TokenKeys): Signer => { + if ('secret' in keys) { + let keyMemo = memo(() => + crypto.subtle.importKey( + 'raw', + new TextEncoder().encode(keys.secret), + { name: 'HMAC', hash: { name: 'SHA-384' } }, + false, + ['sign', 'verify'] + ) + ); + + return { + async sign(data) { + let signature = await crypto.subtle.sign( + { name: 'HMAC', hash: { name: 'SHA-384' } }, + await keyMemo(), + new TextEncoder().encode(data) + ); + + return base62.encode(new Uint8Array(signature)); + }, + + async verify(data, signature) { + return crypto.subtle.verify( + { name: 'HMAC', hash: { name: 'SHA-384' } }, + await keyMemo(), + new Uint8Array(base62.decodeRaw(signature)), + new TextEncoder().encode(data) + ); + } + }; + } else { + let privateKeyMemo = memo(async () => { + if (typeof keys.privateKey == 'string') { + let data = JSON.parse(keys.privateKey) as any; + + return await crypto.subtle.importKey( + 'jwk', + data, + { name: data.kty == 'EC' ? 'ECDSA' : data.kty, namedCurve: data.crv }, + true, + ['sign'] + ); + } else { + return (await keys.privateKey()) as CryptoKey; + } + }); + + let publicKeyMemo = memo(async () => { + if (typeof keys.publicKey == 'string') { + let data = JSON.parse(keys.publicKey) as any; + + return await crypto.subtle.importKey( + 'jwk', + JSON.parse(keys.publicKey) as any, + { name: data.kty == 'EC' ? 'ECDSA' : data.kty, namedCurve: data.crv }, + true, + ['verify'] + ); + } else { + return (await keys.publicKey()) as CryptoKey; + } + }); + + return { + async sign(data) { + let key = await privateKeyMemo(); + + let signature = await crypto.subtle.sign( + { name: key.algorithm.name, hash: { name: 'SHA-384' } }, + key, + new TextEncoder().encode(data) + ); + + return base62.encode(new Uint8Array(signature)); + }, + + async verify(data, signature) { + return crypto.subtle.verify( + { name: 'ECDSA', hash: { name: 'SHA-384' } }, + await publicKeyMemo(), + new Uint8Array(base62.decodeRaw(signature)), + new TextEncoder().encode(data) + ); + } + }; + } +}; + +export class Tokens { + private signer: Signer; + constructor(readonly keys: TokenKeys) { + this.signer = getSigner(keys); + } + + async sign({ type, data, expiresAt }: { type: string; data: any; expiresAt?: Date }) { + let token = `${type}_v1_${base62.encode( + JSON.stringify({ + d: data, + e: expiresAt?.getTime(), + c: Date.now() + }) + )}`; + + let signature = await this.signer.sign(token); + return `${token}_${signature}`; + } + + async verify({ token, expectedType }: { expectedType: string; token: string }) { + let parts = token.split('_'); + if (parts.length < 4) return { verified: false as const }; + + let signatureBase62 = parts.pop()!; + let dataBase62 = parts.pop()!; + let version = parts.pop()!; + let type = parts.join('_'); + if (type != expectedType) return { verified: false as const }; + + if (version != 'v1') return { verified: false as const }; + + let main = `${type}_${version}_${dataBase62}`; + + let verified = await this.signer.verify(main, signatureBase62); + if (!verified) return { verified: false as const }; + + let data = JSON.parse(base62.decode(dataBase62)); + let expiresAt = data.e ? new Date(data.e) : null; + if (expiresAt && expiresAt < new Date()) return { verified: false as const }; + + let createdAt = new Date(data.c); + + return { + verified: true as const, + + type, + expiresAt, + createdAt, + data: data.d + }; + } + + static decode(token: string) { + let parts = token.split('_'); + if (parts.length < 4) return null; + + let dataBase62 = parts[parts.length - 2]; + return JSON.parse(base62.decode(dataBase62)); + } +} diff --git a/src/_shared/backend/tokens/tsconfig.json b/src/_shared/backend/tokens/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/backend/tokens/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/rpc/rpc-client/package.json b/src/_shared/rpc/rpc-client/package.json new file mode 100644 index 000000000..a93f1f4c4 --- /dev/null +++ b/src/_shared/rpc/rpc-client/package.json @@ -0,0 +1,24 @@ +{ + "name": "@mtsrc/rpc-client", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/memo": "1.0.0", + "@mtsrc/proxy": "1.0.0", + "@mtsrc/serialize": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4" + } +} diff --git a/src/_shared/rpc/rpc-client/src/index.ts b/src/_shared/rpc/rpc-client/src/index.ts new file mode 100644 index 000000000..754f1f8f9 --- /dev/null +++ b/src/_shared/rpc/rpc-client/src/index.ts @@ -0,0 +1,4 @@ +import { request } from './request'; +import { clientBuilder } from './shared/clientBuilder'; + +export let createClient = clientBuilder(request); diff --git a/src/_shared/rpc/rpc-client/src/request.test.ts b/src/_shared/rpc/rpc-client/src/request.test.ts new file mode 100644 index 000000000..55cb25b63 --- /dev/null +++ b/src/_shared/rpc/rpc-client/src/request.test.ts @@ -0,0 +1,71 @@ +import { afterEach, describe, expect, test, vi } from 'vitest'; +import { request } from './request'; + +describe('request', () => { + afterEach(() => { + vi.restoreAllMocks(); + }); + + test('resolves successful call with null payload', async () => { + vi.spyOn(globalThis, 'fetch').mockImplementation(async (_input, init) => { + let body = JSON.parse(init?.body as string); + let id = body.calls[0].id; + + return new Response( + JSON.stringify({ + __typename: 'rpc.response', + calls: [{ id, status: 200, result: null }] + }), + { status: 200, headers: { 'content-type': 'application/json' } } + ); + }); + + await expect( + request({ + endpoint: 'http://localhost/rpc', + name: 'health:check', + payload: {}, + headers: {}, + context: {} + }) + ).resolves.toMatchObject({ + data: null, + status: 200 + }); + }); + + test('does not mutate successful payload fields', async () => { + vi.spyOn(globalThis, 'fetch').mockImplementation(async (_input, init) => { + let body = JSON.parse(init?.body as string); + let id = body.calls[0].id; + + return new Response( + JSON.stringify({ + __typename: 'rpc.response', + calls: [ + { + id, + status: 200, + result: { ok: true, object: 'custom', value: 1 } + } + ] + }), + { status: 200, headers: { 'content-type': 'application/json' } } + ); + }); + + let res = await request({ + endpoint: 'http://localhost/rpc', + name: 'health:check', + payload: {}, + headers: {}, + context: {} + }); + + expect(res.data).toEqual({ + ok: true, + object: 'custom', + value: 1 + }); + }); +}); diff --git a/src/_shared/rpc/rpc-client/src/request.ts b/src/_shared/rpc/rpc-client/src/request.ts new file mode 100644 index 000000000..21e09623e --- /dev/null +++ b/src/_shared/rpc/rpc-client/src/request.ts @@ -0,0 +1,234 @@ +import { canonicalize } from '@mtsrc/canonicalize'; +import { internalServerError, isServiceError, ServiceError } from '@mtsrc/error'; +import { serialize } from '@mtsrc/serialize'; +import { generateRequestId } from './shared/requester'; +import type { Call, Requester } from './shared/requester'; + +let isServer = !('window' in globalThis); + +let verbose = + !isServer || + (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production'); + +let log = (...args: any[]) => { + if (!isServer) console.log(...args); +}; + +let calls: { + [key: string]: { + calls: { + call: Call; + resolve: (value: any) => void; + reject: (error: any) => void; + }[]; + to: any; + }; +} = {}; + +let runCalls = ( + call: Call, + c: { + call: Call; + resolve: (value: any) => void; + reject: (error: any) => void; + }[] +) => { + let url = new URL(call.endpoint); + url.search = new URLSearchParams(call.query).toString(); + + fetch(url.toString(), { + method: 'POST', + + headers: { + 'Content-Type': 'application/rpc+json', + ...c[0]!.call.headers + }, + body: serialize.encode({ + calls: c + .map(x => ({ + id: x.call.id, + name: x.call.name, + payload: x.call.payload + })) + .sort((a, b) => a.name.localeCompare(b.name)) + }), + credentials: 'include', + + // @ts-ignore + keepalive: false + }) + .then(async res => ({ + res: serialize.decode( + (await res.json()) as { + calls: { + id: string; + status: number; + result: any; + }[]; + } + ), + + headers: res.headers + })) + .then(({ res, headers }) => { + if (res.__typename == 'error') { + let err = ServiceError.fromResponse(res); + c.forEach(x => x.reject(err)); + return; + } + + for (let call of c) { + let callRes = res.calls.find((x: any) => x.id == call.call.id); + if (!callRes) { + let err = new ServiceError(internalServerError({ message: 'Call not returned' })); + call.reject(err); + return; + } + + if (callRes.status >= 200 && callRes.status < 300) { + call.resolve({ + data: callRes.result, + status: callRes.status, + headers + }); + continue; + } + + let err = ServiceError.fromResponse(callRes.result); + call.reject(err); + } + }) + .catch(e => { + if (verbose) { + console.error(e); + } + + c.forEach(x => + x.reject( + new ServiceError( + internalServerError({ + message: + !isServer + ? 'Unable to reach server' + : `Unable to reach server ${call.endpoint}`, + + inner: verbose + ? e instanceof Error + ? { message: e.message, stack: e.stack } + : { error: e } + : undefined + }) + ) + ) + ); + }); +}; + +let performRequest = (call: Call) => { + if (isServer) { + return new Promise((resolve, reject) => { + runCalls(call, [{ call, resolve, reject }]); + }); + } + + let key = `${canonicalize(call.headers)}${canonicalize(call.query)}${call.endpoint}`; + + if (!calls[key]) calls[key] = { calls: [], to: null }; + let current = calls[key]; + + let promise = new Promise((resolve, reject) => { + current.calls.push({ call, resolve, reject }); + }); + + if (current.to) clearTimeout(current.to); + + current.to = setTimeout( + () => { + let c = calls[key]!.calls; + calls[key]!.calls = []; + calls[key]!.to = null; + + runCalls(call, c); + }, + 10 + ); + + return promise; +}; + +let requesterInternal: Requester = async call => { + let id = generateRequestId(); + log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call); + + let tries = 0; + let error: Error | null = null; + + for (let header in call.headers) { + if (call.headers[header] === undefined) delete call.headers[header]; + } + + if (call.query) { + for (let query in call.query) { + if (call.query[query] === undefined) delete call.query[query]; + } + } + + let maxTries = isServer ? 6 : 3; + let retryDelay = isServer ? 20 : 1000; + + while (tries < maxTries) { + try { + return (await performRequest({ + ...(call as any), + id + }).then( + res => { + if (!isServer) { + log(`[call:${call.name.replace(':', '-')}:${id}] Success`, res); + } + + return res; + }, + err => { + if (isServer) { + log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call); + } + + log(`[call:${call.name.replace(':', '-')}:${id}] Error`, err); + + throw err; + } + )) as any; + } catch (e: any) { + error = e; + + if (isServiceError(e)) { + // 400 errors are not retried + if (e.data.status < 500) throw e; + } + } + + tries += 1; + await new Promise(r => setTimeout(r, tries * retryDelay)); + } + + if (error) throw error; + + throw new ServiceError( + internalServerError({ + message: + !isServer + ? 'Unable to reach server' + : `Unable to reach server ${call.endpoint}` + }) + ); +}; + +export let request: Requester = async call => { + // try { + return await requesterInternal(call); + // } catch (e: any) { + // Sentry.captureException(e); + // throw e; + // } +}; diff --git a/src/_shared/rpc/rpc-client/src/shared/clientBuilder.ts b/src/_shared/rpc/rpc-client/src/shared/clientBuilder.ts new file mode 100644 index 000000000..cd6266f3f --- /dev/null +++ b/src/_shared/rpc/rpc-client/src/shared/clientBuilder.ts @@ -0,0 +1,101 @@ +import { context as otelContext, propagation, trace } from '@opentelemetry/api'; +import { proxy } from '@mtsrc/proxy'; +import type { Requester } from './requester'; + +export interface ClientOpts { + endpoint: string; + headers?: Record; + getHeaders?: () => Promise> | Record; + onRequest?: (d: { + endpoint: string; + name: string; + payload: any; + headers: Record; + query?: Record; + }) => any; +} + +let noopWithContext = (cb: (ctx: any) => any) => cb({}); + +let isTelemetryEnabled = () => + typeof process !== 'undefined' && process.env?.['OTEL_ENABLED'] === 'true'; + +let hasActiveSpan = () => !!trace.getSpan(otelContext.active()); + +let injectTraceHeaders = (headers: Record) => { + if (!isTelemetryEnabled()) return headers; + if (!hasActiveSpan()) return headers; + + let carrier: Record = {}; + + try { + propagation.inject(otelContext.active(), carrier); + } catch { + return headers; + } + + if (!Object.keys(carrier).length) return headers; + + let existingHeaderNames = new Set(Object.keys(headers).map(h => h.toLowerCase())); + + for (let [name, value] of Object.entries(carrier)) { + if (!existingHeaderNames.has(name.toLowerCase())) { + headers[name] = value; + } + } + + return headers; +}; + +export let clientBuilder = + (request: Requester, withContext: (cb: (ctx: any) => any) => any = noopWithContext) => + (clientOpts: ClientOpts) => + proxy( + async ( + path, + data, + requestOpts?: { + headers?: Record; + query?: Record; + } + ) => + await withContext(async context => { + let headers = { + ...clientOpts.headers, + ...(await clientOpts.getHeaders?.()), + ...requestOpts?.headers + }; + + headers = injectTraceHeaders(headers); + + clientOpts.onRequest?.({ + endpoint: clientOpts.endpoint, + name: path.join(':'), + payload: data, + headers, + query: requestOpts?.query + }); + + if (path[path.length - 1] == 'getFull') { + return await request({ + endpoint: clientOpts.endpoint, + payload: data, + name: path.slice(0, -1).join(':'), + headers, + query: requestOpts?.query, + context + }); + } + + return ( + await request({ + endpoint: clientOpts.endpoint, + payload: data, + name: path.join(':'), + headers, + query: requestOpts?.query, + context + }) + ).data; + }) + ); diff --git a/src/_shared/rpc/rpc-client/src/shared/requester.ts b/src/_shared/rpc/rpc-client/src/shared/requester.ts new file mode 100644 index 000000000..5f14ae136 --- /dev/null +++ b/src/_shared/rpc/rpc-client/src/shared/requester.ts @@ -0,0 +1,33 @@ +import { generatePlainId } from '@mtsrc/id'; +import { memo } from '@mtsrc/memo'; + +let index = 0; +let rootId = memo(() => generatePlainId(10)); + +export let generateRequestId = () => { + let id = `call_${rootId()}_${index}`; + index += 1; + return id; +}; + +export interface Call { + id: string; + name: string; + payload: any; + endpoint: string; + headers: Record; + query?: Record; +} + +export type Requester = ( + call: Omit & { + headers: Record; + query?: Record; + context: any; + } +) => Promise<{ + data: any; + status: number; + headers: Record; + query?: Record; +}>; diff --git a/src/_shared/rpc/rpc-client/tsconfig.json b/src/_shared/rpc/rpc-client/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/rpc/rpc-client/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/rpc/rpc-client/tsup.config.js b/src/_shared/rpc/rpc-client/tsup.config.js new file mode 100644 index 000000000..4e2a3d688 --- /dev/null +++ b/src/_shared/rpc/rpc-client/tsup.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: true, + dts: true +}); diff --git a/src/_shared/rpc/rpc-server/package.json b/src/_shared/rpc/rpc-server/package.json new file mode 100644 index 000000000..05e889375 --- /dev/null +++ b/src/_shared/rpc/rpc-server/package.json @@ -0,0 +1,26 @@ +{ + "name": "@mtsrc/rpc-server", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/memo": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "cookie": "^1.1.1" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.9.3", + "vitest": "^3.2.4" + } +} diff --git a/src/_shared/rpc/rpc-server/src/controller.test.ts b/src/_shared/rpc/rpc-server/src/controller.test.ts new file mode 100644 index 000000000..48d4ce340 --- /dev/null +++ b/src/_shared/rpc/rpc-server/src/controller.test.ts @@ -0,0 +1,251 @@ +import { v } from '@mtsrc/validation'; +import { describe, expect, test } from 'vitest'; +import { Group } from './controller'; + +describe('controller', () => { + test('should create group', () => { + let group = new Group(); + expect(group).toBeDefined(); + }); + + test('should register middleware', async () => { + let group = new Group(); + + let group1 = group.use(async ctx => { + expect(typeof ctx).toBe('object'); + expect(ctx.body).toBe('body'); + + return { + test: 'test' as const + }; + }); + + let group2 = group1.use(async ctx => { + expect(ctx.test).toBe('test'); + + return { + hello: 'world' as const + }; + }); + + let handler = group2.handler().do(async ctx => { + expect(ctx.hello).toBe('world'); + expect(ctx.test).toBe('test'); + + return ctx; + }); + + expect( + await handler.run( + { + body: 'body', + query: new URLSearchParams(), + headers: new Headers(), + rawBody: '', + sharedMiddlewareMemo: new Map(), + beforeSend: () => {}, + appendHeaders: () => {}, + url: '' + } as any, + {} + ) + ).toEqual({ + response: { + hello: 'world', + test: 'test', + input: 'body', + query: new URLSearchParams(), + headers: new Headers(), + rawBody: '', + sharedMiddlewareMemo: new Map(), + appendHeaders: expect.any(Function), + beforeSend: expect.any(Function), + body: undefined, + url: '' + } + }); + }); + + test('should register handler middleware', async () => { + let group = new Group().use(async ctx => { + expect(typeof ctx).toBe('object'); + expect(ctx.body).toBe('body'); + + return { + test: 'test' as const + }; + }); + + let handler = group + .handler() + .use(async ctx => { + expect(ctx.test).toBe('test'); + + return { + hello: 'world' as const + }; + }) + .do(async ctx => { + expect(ctx.hello).toBe('world'); + expect(ctx.test).toBe('test'); + + return ctx; + }); + + expect( + await handler.run( + { + body: 'body', + query: new URLSearchParams(), + headers: new Headers(), + rawBody: '', + sharedMiddlewareMemo: new Map(), + beforeSend: () => {}, + appendHeaders: () => {}, + url: '' + } as any, + {} + ) + ).toMatchObject({ + response: { + hello: 'world', + test: 'test', + input: 'body', + query: new URLSearchParams(), + headers: new Headers(), + rawBody: '', + sharedMiddlewareMemo: new Map(), + appendHeaders: expect.any(Function), + beforeSend: expect.any(Function), + body: undefined, + url: '' + } + }); + }); + + test('should run validation', async () => { + let group = new Group().use(async ctx => { + expect(typeof ctx).toBe('object'); + expect(ctx.body).toEqual({ hello: 'world' }); + + return { + test: 'test' as const + }; + }); + + let handler = group + .handler() + .input( + v.object({ + hello: v.string() + }) + ) + .do(async ctx => { + expect(ctx.test).toBe('test'); + expect(ctx.input).toEqual({ hello: 'world' }); + + return ctx; + }); + + expect( + await handler.run( + { + query: new URLSearchParams(), + headers: new Headers(), + rawBody: '', + sharedMiddlewareMemo: new Map(), + beforeSend: () => {}, + appendHeaders: () => {}, + url: '', + body: { hello: 'world', other: false } + } as any, + {} + ) + ).toEqual({ + response: { + test: 'test', + input: { hello: 'world' }, + query: new URLSearchParams(), + headers: new Headers(), + rawBody: '', + sharedMiddlewareMemo: new Map(), + appendHeaders: expect.any(Function), + beforeSend: expect.any(Function), + body: undefined, + url: '' + } + }); + + try { + await handler.run( + { + query: new URLSearchParams(), + headers: new Headers(), + rawBody: '', + sharedMiddlewareMemo: new Map(), + beforeSend: () => {}, + appendHeaders: () => {}, + url: '', + body: { hello: 42 } + } as any, + {} + ); + } catch (error) { + expect(error).toBeDefined(); + } + }); + + test('should group handlers to controller', async () => { + let group = new Group(); + + let controller = group.controller({ + first: group + .handler() + .input( + v.object({ + hello: v.string() + }) + ) + .do(async ctx => { + return ctx; + }), + + second: group.handler().do(async ctx => { + return { cool: true }; + }), + + sub: group.controller({ + third: group + .handler() + .input( + v.object({ + hello: v.string() + }) + ) + .do(async ctx => { + return { sub: true }; + }) + }) + }); + + expect( + await controller.sub.third.run( + { + query: new URLSearchParams(), + headers: new Headers(), + rawBody: '', + sharedMiddlewareMemo: new Map(), + beforeSend: () => {}, + appendHeaders: () => {}, + url: '', + body: { hello: 'world' } + } as any, + {} + ) + ).toEqual({ + response: { + sub: true + } + }); + }); +}); diff --git a/src/_shared/rpc/rpc-server/src/controller.ts b/src/_shared/rpc/rpc-server/src/controller.ts new file mode 100644 index 000000000..5af9be2ed --- /dev/null +++ b/src/_shared/rpc/rpc-server/src/controller.ts @@ -0,0 +1,203 @@ +import { ServiceError, validationError } from '@mtsrc/error'; +import type { ValidationType } from '@mtsrc/validation'; +import * as Cookie from 'cookie'; + +export type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'; + +export interface ServiceRequest { + query: URLSearchParams; + headers: Headers; + url: string; + ip?: string; + body: any; + rawBody: any; + requestId: string; + + getCookies: () => Record; + getCookie: (name: string) => string | undefined; + setCookie: (name: string, value: string, opts?: Cookie.SerializeOptions) => void; + + sharedMiddlewareMemo: Map>; + beforeSend: (handler: () => Promise) => void; + appendHeaders: (headers: Record) => void; +} + +export type Simplify = { [KeyType in keyof T]: T[KeyType] } & {}; +export type ExtendContext = E extends object ? Simplify : C; + +export class Group { + constructor( + private _middleware: Array<(ctx: Context & ServiceRequest) => Promise> = [] + ) {} + + use( + handler: (ctx: Context & ServiceRequest) => Promise, + opts?: { + getSharedMemoKey?: (ctx: Context & ServiceRequest) => string; + } + ) { + let middleware = async (ctx: Parameters[0]): Promise => { + let key = opts?.getSharedMemoKey?.(ctx); + if (key && ctx.sharedMiddlewareMemo.has(key)) { + return await ctx.sharedMiddlewareMemo.get(key)!; + } + + let res = handler(ctx); + if (key) ctx.sharedMiddlewareMemo.set(key, res); + + return await res; + }; + + return new Group>([...this._middleware, middleware]); + } + + createMiddleware( + handler: (ctx: Context & ServiceRequest, input: P) => Promise, + opts?: { + getSharedMemoKey?: (ctx: Context & ServiceRequest, input: P) => string; + } + ) { + return (input: P) => + async (ctx: Context & ServiceRequest): Promise => { + let key = opts?.getSharedMemoKey?.(ctx, input); + if (key && ctx.sharedMiddlewareMemo.has(key)) { + return await ctx.sharedMiddlewareMemo.get(key)!; + } + + let res = handler(ctx, input); + if (key) ctx.sharedMiddlewareMemo.set(key, res); + + return await res; + }; + } + + handler() { + return new Handler([...this._middleware]); + } + + controller< + HandlersAndSubControllers extends { + [key: string]: Handler | Controller; + } + >(handlers: HandlersAndSubControllers): Controller { + return handlers; + } +} + +export type Controller< + HandlersAndSubControllers extends { [key: string]: Handler | Controller } +> = HandlersAndSubControllers; + +export type InferControllerType = T extends Controller ? U : never; + +export type InferClient< + HandlersAndSubControllers extends { [key: string]: Handler | Controller } +> = { + [K in keyof HandlersAndSubControllers]: HandlersAndSubControllers[K] extends Handler< + infer I, + infer O, + infer C + > + ? (( + input: I, + opts?: { headers?: Record; query?: Record } + ) => Promise) & { + getFull: ( + input: I, + opts?: { headers?: Record; query?: Record } + ) => Promise<{ + data: O; + status: number; + headers: Record; + }>; + } + : HandlersAndSubControllers[K] extends Controller + ? InferClient + : never; +}; + +export class Handler { + private _handler!: ( + ctx: Context & Omit & { input: Input } + ) => Promise; + private _validation: ValidationType | undefined; + + constructor( + private _middleware: Array<(ctx: Context & ServiceRequest) => Promise> = [] + ) {} + + do( + handler: ( + ctx: Context & Omit & { input: Input } + ) => Promise + ) { + if (this._handler != undefined) throw new Error('Handler already defined'); + + // @ts-ignore + this._handler = handler; + + return this as any as Handler; + } + + use( + handler: (ctx: Context & ServiceRequest) => Promise + ) { + this._middleware.push(handler); + return this as any as Handler>; + } + + input(validation: ValidationType) { + if (this._validation != undefined) throw new Error('Input validation already defined'); + + // @ts-ignore + this._validation = validation; + + return this as any as Handler; + } + + async run( + req: ServiceRequest, + initialContext: any + ): Promise<{ + response: Output; + }> { + if (!this._handler) throw new Error('Handler not defined'); + + let input = req.body as Input; + + if (this._validation) { + let valRes = this._validation.validate(req.body); + + if (valRes.success === false) { + throw new ServiceError( + validationError({ errors: valRes.errors, entity: 'call_data' }) + ); + } + + input = valRes.value; + } + + let ctx = { + ...initialContext, + ...req, + + // Always use the sanitized input + body: input + }; + + for (let mw of this._middleware) { + let res = await mw(ctx); + if (res) ctx = { ...ctx, ...res }; + } + + let res = await this._handler({ + ...ctx, + input, + body: undefined + }); + + return { + response: res + }; + } +} diff --git a/src/_shared/rpc/rpc-server/src/extractIp.ts b/src/_shared/rpc/rpc-server/src/extractIp.ts new file mode 100644 index 000000000..ebdce8f5a --- /dev/null +++ b/src/_shared/rpc/rpc-server/src/extractIp.ts @@ -0,0 +1,9 @@ +export let parseForwardedFor = (xForwardedForHeader?: string | null | undefined) => { + if (typeof xForwardedForHeader != 'string') return undefined; + + let ips = xForwardedForHeader + .split(',') + .map(ip => ip.trim()) + .filter(Boolean); + return ips.length > 0 ? ips[0] : undefined; +}; diff --git a/src/_shared/rpc/rpc-server/src/index.ts b/src/_shared/rpc/rpc-server/src/index.ts new file mode 100644 index 000000000..fe5eb6ab8 --- /dev/null +++ b/src/_shared/rpc/rpc-server/src/index.ts @@ -0,0 +1,3 @@ +export * from './controller'; +export * from './rpcMux'; +export * from './server'; diff --git a/src/_shared/rpc/rpc-server/src/rpcMux.ts b/src/_shared/rpc/rpc-server/src/rpcMux.ts new file mode 100644 index 000000000..4de99a57c --- /dev/null +++ b/src/_shared/rpc/rpc-server/src/rpcMux.ts @@ -0,0 +1,466 @@ +import { + internalServerError, + notAcceptableError, + notFoundError, + validationError +} from '@mtsrc/error'; +import { createExecutionContext, provideExecutionContext } from '@mtsrc/execution-context'; +import { generateCustomId } from '@mtsrc/id'; +import { memo } from '@mtsrc/memo'; +import { getSentry } from '@mtsrc/sentry'; +import { serialize } from '@mtsrc/serialize'; +import { + isTelemetryEnabled, + otelContext, + propagation, + SpanKind, + SpanStatusCode, + trace +} from '@mtsrc/telemetry'; +import { v } from '@mtsrc/validation'; +import * as Cookie from 'cookie'; +import type { ServiceRequest } from './controller'; +import { parseForwardedFor } from './extractIp'; + +let verbose = process.env.NODE_ENV !== 'production'; + +let Sentry = getSentry(); +let tracer = trace.getTracer('lowerdeck.rpc-server'); + +let validation = v.object({ + calls: v.array( + v.object({ + id: v.string(), + name: v.string(), + payload: v.any() + }) + ) +}); + +let summarizeRpcTarget = (url: URL, body: any) => { + let pathParts = url.pathname.split('/').filter(Boolean); + let lastPart = pathParts[pathParts.length - 1] ?? ''; + + if (lastPart.startsWith('$') && lastPart.length > 1) { + return lastPart.slice(1); + } + + let callNames: string[] = []; + if (body && typeof body == 'object' && Array.isArray(body.calls)) { + callNames = body.calls + .map((call: { name?: unknown }) => + typeof call?.name == 'string' ? call.name.trim() : '' + ) + .filter(Boolean); + } + + if (callNames.length == 1) return callNames[0]; + + if (callNames.length > 1) { + let preview = callNames.slice(0, 3).join(', '); + if (callNames.length > 3) return `${preview}, +${callNames.length - 3} more`; + return preview; + } + + return url.pathname; +}; + +export let rpcMux = ( + opts: { + path: string; + allowRootSpan?: boolean; + cors?: { + headers?: string[]; + } & ({ domains: string[] } | { check: (origin: string) => boolean }); + }, + rpcs: { + handlerNames: string[]; + runMany: ( + req: ServiceRequest, + body: { + requestId: string; + calls: { + id: string; + name: string; + payload: any; + }[]; + } + ) => Promise<{ + status: number; + body: { + calls: any[]; + }; + }>; + }[] +) => { + let handlerNameToRpcMap = new Map( + rpcs.flatMap((rpc, i) => rpc.handlerNames.map(name => [name, i])) + ); + + return { + path: opts.path, + + fetch: async (req: any): Promise => { + let origin = req.headers.get('origin') ?? ''; + let corsOk = false; + + if (opts.cors && 'domains' in opts.cors) { + try { + let url = new URL(origin); + let rootDomain = url.hostname.split('.').slice(-2).join('.'); + corsOk = opts.cors.domains.includes(rootDomain); + } catch (e) { + // Ignore -> no cors + } + } else if (opts.cors && 'check' in opts.cors) { + corsOk = opts.cors.check(origin); + } + + let url = new URL(req.url); + + let additionalCorsHeaders = opts.cors?.headers?.join(', '); + if (additionalCorsHeaders) additionalCorsHeaders = `, ${additionalCorsHeaders}`.trim(); + + let corsHeaders: Record = corsOk + ? { + 'access-control-allow-origin': origin, + 'access-control-allow-methods': 'POST, OPTIONS', + 'access-control-allow-headers': `Content-Type, Authorization, Baggage, Sentry-Trace, traceparent, tracestate${ + additionalCorsHeaders ?? '' + }`, + 'access-control-max-age': '604800', + 'access-control-allow-credentials': 'true' + } + : {}; + + if (req.method == 'OPTIONS') { + if (corsOk) { + return new Response(null, { + status: 204, + headers: corsHeaders + }); + } + + return new Response(null, { status: 403 }); + } + + let contentType = req.headers.get('content-type') ?? ''; + if ( + !contentType.includes('application/rpc+json') && + !contentType.includes('application/json') + ) { + return new Response( + JSON.stringify( + notAcceptableError({ + message: 'Content-Type must be application/rpc+json' + }).toResponse() + ), + { status: 406, headers: corsHeaders } + ); + } + + let body: any = null; + + try { + body = serialize.decode(await req.text()); + } catch (e) { + return new Response( + JSON.stringify(notAcceptableError({ message: 'Invalid JSON' }).toResponse()), + { status: 406 } + ); + } + + let sentryTraceHeaders = req.headers.get('sentry-trace'); + let sentryTrace = + (Array.isArray(sentryTraceHeaders) + ? sentryTraceHeaders.join(',') + : sentryTraceHeaders) ?? undefined; + let baggage = req.headers.get('baggage'); + + let ip = parseForwardedFor( + req.headers.get('lowerdeck-connecting-ip') ?? + req.headers.get('cf-connecting-ip') ?? + req.headers.get('x-forwarded-for') ?? + req.headers.get('x-real-ip') + ); + + let headers = new Headers(); + + if (corsOk) { + for (let [key, value] of Object.entries(corsHeaders)) { + headers.append(key, value); + } + } + + let extractedTraceContext = propagation.extract(otelContext.active(), req.headers, { + get: (carrier, key) => carrier.get(key) ?? undefined, + keys: carrier => Array.from(carrier.keys()) + }); + + let incomingParent = trace.getSpanContext(extractedTraceContext); + let canTrace = isTelemetryEnabled() && (!!incomingParent || !!opts.allowRootSpan); + let requestSpanTarget = summarizeRpcTarget(url, body); + let requestSpanName = `rpc request: ${requestSpanTarget}`; + let requestSpanOp = 'rpc.server.request'; + + let executeRequest = async () => + await Sentry.withIsolationScope( + async () => + await Sentry.continueTrace( + { sentryTrace, baggage }, + async () => + await Sentry.startSpan( + { + name: requestSpanName, + op: requestSpanOp, + attributes: { + 'sentry.op': requestSpanOp, + 'rpc.request.target': requestSpanTarget, + 'rpc.description': requestSpanName, + 'sentry.description': requestSpanName, + ip, + transport: 'http', + ua: req.headers.get('user-agent') ?? '', + origin: req.headers.get('origin') ?? '' + } + }, + async () => { + try { + let beforeSends: Array<() => Promise> = []; + let id = generateCustomId('req_'); + + let parseCookies = memo(() => + Cookie.parse(req.headers.get('cookie') ?? '') + ); + + let request: ServiceRequest = { + url: req.url, + headers: req.headers, + query: url.searchParams, + body, + rawBody: body, + ip, + requestId: id, + + getCookies: () => parseCookies(), + getCookie: (name: string) => parseCookies()[name], + setCookie: (name: string, value: string, opts?: any) => { + let cookie = Cookie.serialize(name, value, opts); + // @ts-ignore + headers.append('Set-Cookie', cookie); + }, + + beforeSend: (handler: () => Promise) => { + beforeSends.push(handler); + }, + + sharedMiddlewareMemo: new Map>(), + + appendHeaders: (newHeaders: Record) => { + for (let [key, value] of Object.entries(newHeaders)) { + if (Array.isArray(value)) { + for (let v of value) headers.append(key, v); + } else { + headers.append(key, value); + } + } + } + }; + + Sentry.getCurrentScope().setContext('rpc.request', { + url: req.url, + query: Object.fromEntries(url.searchParams.entries()) + }); + + Sentry.getCurrentScope().addAttachment({ + filename: 'rpc.request.body.json', + data: body, + contentType: 'application/json' + }); + + return provideExecutionContext( + createExecutionContext({ + type: 'request', + contextId: id, + ip: ip ?? '0.0.0.0', + userAgent: req.headers.get('user-agent') ?? '' + }), + async () => { + let callsByRpc = new Map< + number, + { id: string; name: string; payload: any }[] + >(); + + let resRef = { + body: { + __typename: 'rpc.response', + calls: [] as any[] + }, + status: 200 + }; + + let pathParts = url.pathname.split('/').filter(Boolean); + let lastPart = pathParts[pathParts.length - 1] ?? ''; + + let isSingle = lastPart[0] == '$'; + + if (isSingle) { + let id = lastPart.slice(1); + let rpcIndex = handlerNameToRpcMap.get(id); + if (rpcIndex == undefined) { + return new Response( + JSON.stringify( + notFoundError({ entity: 'handler' }).toResponse() + ), + { status: 404, headers } + ); + } + + let calls = callsByRpc.get(rpcIndex) ?? []; + calls.push({ + id: generateCustomId('call_'), + name: id, + payload: body + }); + callsByRpc.set(rpcIndex, calls); + } else { + let valRes = validation.validate(body); + if (valRes.success === false) { + return new Response( + JSON.stringify( + validationError({ + errors: valRes.errors, + entity: 'request_data' + }).toResponse() + ), + { status: 406, headers } + ); + } + + for (let call of valRes.value.calls) { + let rpcIndex = handlerNameToRpcMap.get(call.name); + if (rpcIndex == undefined) { + return new Response( + JSON.stringify( + notFoundError({ entity: 'handler' }).toResponse() + ), + { status: 404, headers } + ); + } + + let calls = callsByRpc.get(rpcIndex) ?? []; + calls.push(call as any); + callsByRpc.set(rpcIndex, calls); + } + } + + await Promise.all( + Array.from(callsByRpc.entries()).map(async ([rpcIndex, calls]) => { + let rpc = rpcs[rpcIndex]!; + let res = await rpc.runMany(request, { + requestId: id, + calls + }); + + resRef.status = Math.max(resRef.status, res.status); + resRef.body.calls.push(...res.body.calls); + }) + ); + + headers.append('x-req-id', id); + headers.append('content-type', 'application/rpc+json'); + headers.append('x-powered-by', 'lowerdeck RPC'); + + await Promise.all(beforeSends.map(s => s())); + + return new Response( + serialize.encode( + isSingle ? resRef.body.calls[0].result : resRef.body + ), + { + status: resRef.status, + headers + } + ); + } + ); + } catch (e) { + if (verbose) console.error(e); + + Sentry.captureException(e, { + extra: { url: req.url, method: req.method, ip, body } + }); + + return new Response( + JSON.stringify( + internalServerError({ + inner: verbose + ? e instanceof Error + ? { message: e.message, stack: e.stack } + : { error: e } + : undefined + }).toResponse() + ), + { + status: 500, + headers + } + ); + } + } + ) + ) + ); + + return await otelContext.with(extractedTraceContext, async () => { + if (!canTrace) { + return await executeRequest(); + } + + return await tracer.startActiveSpan( + requestSpanName, + { + kind: SpanKind.SERVER, + attributes: { + 'sentry.op': requestSpanOp, + 'rpc.system': 'lowerdeck', + 'rpc.request.target': requestSpanTarget, + 'rpc.description': requestSpanName, + 'sentry.description': requestSpanName, + 'http.request.method': req.method, + 'url.path': url.pathname, + ip: ip ?? '', + transport: 'http', + ua: req.headers.get('user-agent') ?? '', + origin: req.headers.get('origin') ?? '' + } + }, + async span => { + try { + let response = await executeRequest(); + + span.setAttribute('http.response.status_code', response.status); + if (response.status >= 500) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: `RPC request failed with status ${response.status}` + }); + } + + return response; + } catch (error) { + span.recordException(error as Error); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error instanceof Error ? error.message : String(error) + }); + throw error; + } finally { + span.end(); + } + } + ); + }); + } + }; +}; diff --git a/src/_shared/rpc/rpc-server/src/server.ts b/src/_shared/rpc/rpc-server/src/server.ts new file mode 100644 index 000000000..5c6c6485a --- /dev/null +++ b/src/_shared/rpc/rpc-server/src/server.ts @@ -0,0 +1,276 @@ +import { internalServerError, isServiceError, notFoundError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; +import { + hasActiveSpan, + isTelemetryEnabled, + SpanStatusCode, + trace +} from '@mtsrc/telemetry'; +import { Handler } from './controller'; +import type { Controller, ServiceRequest } from './controller'; + +let Sentry = getSentry(); +let tracer = trace.getTracer('lowerdeck.rpc-server.calls'); + +let verbose = process.env.NODE_ENV !== 'production'; + +export let createServer = + (opts: { + onError?: (opts: { + request: ServiceRequest; + error: any; + reqId: string; + callId: string; + callName: string; + }) => void; + onRequest?: (opts: { + reqId: string; + callId: string; + callName: string; + request: ServiceRequest; + response: { status: number; body: any }; + }) => void; + }) => + (controller: Controller) => { + let findHandler = (name: string): Handler | null => { + let parts = name.split(':'); + let current = controller; + + while (current && parts.length > 0) { + current = current[parts.shift()!]; + if (!current) return null; + } + + if (current && current instanceof Handler) return current; + + return null; + }; + + let getSupportedHandlerNames = (controller: Controller): string[] => + Object.entries(controller).flatMap(([key, value]) => { + if (value instanceof Handler) return [key]; + if (typeof value == 'object') + return getSupportedHandlerNames(value).map(name => `${key}:${name}`); + return []; + }); + + let handlerNames = getSupportedHandlerNames(controller); + + let run = async ( + req: ServiceRequest, + call: { id: string; name: string; payload: any }, + reqId: string + ): Promise<{ + response: any; + status: number; + request: ServiceRequest; + }> => { + let request = { ...req, body: call.payload }; + + let executeCall = async () => { + try { + let handler = findHandler(call.name); + + if (!handler) { + return { + request, + status: 404, + response: notFoundError({ entity: 'handler' }).toResponse() + }; + } + + let response = await handler.run(request, {}); + + return { + status: 200, + request: req, + response: response.response + }; + } catch (e) { + if (verbose) console.error(e); + + if (isServiceError(e)) { + if (e.data.status >= 500) { + Sentry.captureException(e, { + tags: { reqId } + }); + } + + return { + request, + status: e.data.status, + response: e.toResponse() + }; + } + + Sentry.captureException(e, { + tags: { reqId } + }); + + opts.onError?.({ + callName: call.name, + callId: call.id, + request: req, + error: e, + reqId + }); + + throw e; + } + }; + + let canTrace = isTelemetryEnabled() && hasActiveSpan(); + if (!canTrace) { + let result = await executeCall(); + + return { + request: result.request, + status: result.status, + response: result.response + }; + } + + let callSpanName = `rpc call: ${call.name}`; + let callSpanOp = 'rpc.server.call'; + + return await tracer.startActiveSpan(callSpanName, async span => { + span.setAttribute('sentry.op', callSpanOp); + span.setAttribute('rpc.system', 'lowerdeck'); + span.setAttribute('rpc.method', call.name); + span.setAttribute('rpc.request_id', reqId); + span.setAttribute('rpc.call_id', call.id); + span.setAttribute('rpc.description', callSpanName); + span.setAttribute('sentry.description', callSpanName); + + let finalize = (result: { + request: ServiceRequest; + status: number; + response: any; + }) => { + span.setAttribute('rpc.response.status_code', result.status); + if (result.status >= 500) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: `RPC call failed with status ${result.status}` + }); + } + + return result; + }; + + try { + let result = await executeCall(); + + return finalize({ + request: result.request, + status: result.status, + response: result.response + }); + } catch (e) { + span.recordException(e as Error); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: e instanceof Error ? e.message : String(e) + }); + + return finalize({ + request, + status: 500, + response: internalServerError().toResponse() + }); + } finally { + span.end(); + } + }); + }; + + let runMany = async ( + req: ServiceRequest, + body: { + calls: { + id: string; + name: string; + payload: any; + }[]; + requestId: string; + } + ): Promise<{ + status: number; + body: any; + }> => { + let callRes = await Promise.all( + body.calls.map(async (call, i) => { + let res = await run(req, call as any, body.requestId); + + try { + opts.onRequest?.({ + reqId: body.requestId, + callId: call.id, + callName: call.name, + request: res.request, + response: { status: res.status, body: res.response } + }); + } catch (e) { + Sentry.captureException(e); + if (verbose) console.error(e); + } + + return { + __typename: 'rpc.response.call', + id: call.id, + name: call.name, + status: res.status, + result: res.response + }; + }) + ); + + return { + status: Math.max(...callRes.map(c => c.status)), + body: { + __typename: 'rpc.response', + calls: callRes + } + }; + }; + + return { + handlerNames, + runMany + + // fetch, + + // http: async ( + // req: IncomingMessage & { + // body: any; + // }, + // res: ServerResponse & { send: (body: any) => void } + // ) => { + // let headers = new Headers( + // Object.fromEntries( + // Object.entries(req.headers).map(([key, value]) => [ + // key, + // value === undefined ? '' : String(value) + // ]) + // ) + // ); + // let url = new URL(req.url ?? '', `http://${req.headers.host}`); + + // let request = new Request(url.toString(), { + // method: req.method, + // headers, + // body: JSON.stringify(req.body) + // }); + + // let response = await fetch(request); + + // res.statusCode = response.status; + + // for (let [key, value] of response.headers.entries()) { + // res.setHeader(key, value); + // } + + // res.send(response.body); + // } + }; + }; diff --git a/src/_shared/rpc/rpc-server/tsconfig.json b/src/_shared/rpc/rpc-server/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/rpc/rpc-server/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/rpc/rpc-server/tsup.config.js b/src/_shared/rpc/rpc-server/tsup.config.js new file mode 100644 index 000000000..4e2a3d688 --- /dev/null +++ b/src/_shared/rpc/rpc-server/tsup.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: true, + dts: true +}); diff --git a/src/_shared/util/anonymize-ip/package.json b/src/_shared/util/anonymize-ip/package.json new file mode 100644 index 000000000..f01bb9521 --- /dev/null +++ b/src/_shared/util/anonymize-ip/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/anonymize-ip", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/anonymize-ip/src/anonymizeIp.test.ts b/src/_shared/util/anonymize-ip/src/anonymizeIp.test.ts new file mode 100644 index 000000000..723c04020 --- /dev/null +++ b/src/_shared/util/anonymize-ip/src/anonymizeIp.test.ts @@ -0,0 +1,87 @@ +import { describe, expect, it } from 'vitest'; +import { anonymizeIP } from './anonymizeIp'; + +describe('anonymizeIP', () => { + // IPv4 tests + it('anonymizes IPv4 with default options', () => { + expect(anonymizeIP('192.168.1.100')).toBe('192.168.x.xxx'); + }); + + it('anonymizes IPv4 with keepGroups=1', () => { + expect(anonymizeIP('10.20.30.40', { keepGroups: 1 })).toBe('10.xx.xx.xx'); + }); + + it('anonymizes IPv4 with keepGroups=3', () => { + expect(anonymizeIP('8.8.8.8', { keepGroups: 3 })).toBe('8.8.8.x'); + }); + + it('anonymizes IPv4 with custom maskChar', () => { + expect(anonymizeIP('127.0.0.1', { maskChar: '*' })).toBe('127.0.*.*'); + }); + + it('throws error for invalid IPv4 keepGroups', () => { + expect(() => anonymizeIP('1.2.3.4', { keepGroups: 0 })).toThrow(); + expect(() => anonymizeIP('1.2.3.4', { keepGroups: 4 })).toThrow(); + }); + + // IPv6 tests + it('anonymizes IPv6 with default options', () => { + expect(anonymizeIP('2001:0db8:85a3:0000:0000:8a2e:0370:7334')).toBe( + '2001:0db8:85a3:0000:xxxx:xxxx:xxxx:xxxx' + ); + }); + + it('anonymizes IPv6 with keepGroups=2', () => { + expect(anonymizeIP('fe80:abcd:1234:5678:9abc:def0:1234:5678', { keepGroups: 2 })).toBe( + 'fe80:abcd:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx' + ); + }); + + it('anonymizes IPv6 with keepGroups=7', () => { + expect(anonymizeIP('1:2:3:4:5:6:7:8', { keepGroups: 7 })).toBe('1:2:3:4:5:6:7:x'); + }); + + it('anonymizes IPv6 with custom maskChar', () => { + expect(anonymizeIP('abcd:ef01:2345:6789:abcd:ef01:2345:6789', { maskChar: '*' })).toBe( + 'abcd:ef01:2345:6789:****:****:****:****' + ); + }); + + it('throws error for invalid IPv6 keepGroups', () => { + expect(() => + anonymizeIP('abcd:ef01:2345:6789:abcd:ef01:2345:6789', { keepGroups: 0 }) + ).toThrow(); + expect(() => + anonymizeIP('abcd:ef01:2345:6789:abcd:ef01:2345:6789', { keepGroups: 8 }) + ).toThrow(); + }); + + // IPv6 compressed notation + it('anonymizes IPv6 compressed notation', () => { + expect(anonymizeIP('2001:db8::1')).toBe('2001:db8:0:0:x:x:x:x'); + }); + + it('anonymizes IPv6 ::', () => { + expect(anonymizeIP('::')).toBe('0:0:0:0:x:x:x:x'); + }); + + // IPv6 with embedded IPv4 + it('anonymizes IPv6 with embedded IPv4', () => { + expect(anonymizeIP('::ffff:192.0.2.128')).toBe('0:0:0:0:x:x:xxxx:192.0.x.xxx'); + expect(anonymizeIP('2001:db8::ffff:10.0.0.1')).toBe('2001:db8:0:0:x:x:xxxx:10.0.x.x'); + }); + + // Invalid IPs + it('throws error for invalid IP address', () => { + expect(() => anonymizeIP('not.an.ip')).toThrow(); + expect(() => anonymizeIP('')).toThrow(); + expect(() => anonymizeIP('1234')).toThrow(); + expect(() => anonymizeIP('256.256.256.256')).toThrow(); + expect(() => anonymizeIP('abcd:ef01:2345:6789:abcd:ef01:2345:6789:abcd')).toThrow(); + }); + + // Whitespace trimming + it('trims whitespace from IP', () => { + expect(anonymizeIP(' 192.168.1.100 ')).toBe('192.168.x.xxx'); + }); +}); diff --git a/src/_shared/util/anonymize-ip/src/anonymizeIp.ts b/src/_shared/util/anonymize-ip/src/anonymizeIp.ts new file mode 100644 index 000000000..8907afe3e --- /dev/null +++ b/src/_shared/util/anonymize-ip/src/anonymizeIp.ts @@ -0,0 +1,160 @@ +interface AnonymizationOptionsSingle { + // For IPv4: number of octets to keep (1-3, default: 2) + // For IPv6: number of groups to keep (1-7, default: 4) + keepGroups?: number; + // Character to use for masking (default: 'x') + maskChar?: string; +} + +interface AnonymizationOptions { + maskChar?: string; + keepGroups?: + | { + ipv4?: number; + ipv6?: number; + } + | number; +} + +let isIPv4 = (ip: string) => { + let ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/; + if (!ipv4Regex.test(ip)) return false; + + return ip.split('.').every(octet => { + let num = parseInt(octet, 10); + return num >= 0 && num <= 255; + }); +}; + +let isIPv6 = (ip: string) => { + // Handle IPv6 with embedded IPv4 (e.g., ::ffff:192.0.2.1) + if (ip.includes('.')) { + let parts = ip.split(':'); + let lastPart = parts[parts.length - 1]; + if (isIPv4(lastPart)) { + // Remove the IPv4 part and validate the IPv6 part + let ipv6Part = ip.substring(0, ip.lastIndexOf(':') + 1) + '0'; + return isIPv6Simple(ipv6Part); + } + } + + return isIPv6Simple(ip); +}; + +let isIPv6Simple = (ip: string) => { + let ipv6Regex = /^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$/; + + if (ip.includes('::')) { + let parts = ip.split('::'); + if (parts.length !== 2) return false; + + let leftGroups = parts[0] ? parts[0].split(':').length : 0; + let rightGroups = parts[1] ? parts[1].split(':').length : 0; + + // Total groups should not exceed 8 + if (leftGroups + rightGroups > 7) return false; + } + + return ipv6Regex.test(ip) || ip === '::'; +}; + +let anonymizeIPv4 = (ip: string, options: AnonymizationOptionsSingle = {}) => { + let { keepGroups = 2, maskChar = 'x' } = options; + let octets = ip.split('.'); + + if (keepGroups < 1 || keepGroups > 3) { + throw new Error('keepGroups for IPv4 must be between 1 and 3'); + } + + let maskedOctets = octets.map((octet, index) => { + if (index < keepGroups) { + return octet; + } + return maskChar.repeat(octet.length); + }); + + return maskedOctets.join('.'); +}; + +let anonymizeIPv6 = (ip: string, options: AnonymizationOptionsSingle = {}) => { + let { keepGroups = 4, maskChar = 'x' } = options; + + if (keepGroups < 1 || keepGroups > 7) { + throw new Error('keepGroups for IPv6 must be between 1 and 7'); + } + + // Handle IPv6 with embedded IPv4 + if (ip.includes('.')) { + let lastColonIndex = ip.lastIndexOf(':'); + let ipv6Part = ip.substring(0, lastColonIndex + 1); + let ipv4Part = ip.substring(lastColonIndex + 1); + + if (isIPv4(ipv4Part)) { + let anonymizedIPv4 = anonymizeIPv4(ipv4Part, { keepGroups: 2, maskChar }); + let anonymizedIPv6Part = anonymizeIPv6Simple(ipv6Part + '0', keepGroups, maskChar); + return ( + anonymizedIPv6Part.substring(0, anonymizedIPv6Part.lastIndexOf(':') + 1) + + anonymizedIPv4 + ); + } + } + + return anonymizeIPv6Simple(ip, keepGroups, maskChar); +}; + +let anonymizeIPv6Simple = (ip: string, keepGroups: number, maskChar: string) => { + // Expand compressed notation for easier processing + let expanded = ip; + + if (ip.includes('::')) { + let parts = ip.split('::'); + let leftPart = parts[0] || ''; + let rightPart = parts[1] || ''; + + let leftGroups = leftPart ? leftPart.split(':') : []; + let rightGroups = rightPart ? rightPart.split(':') : []; + + let missingGroups = 8 - leftGroups.length - rightGroups.length; + let zeroGroups = Array(missingGroups).fill('0'); + + let allGroups = [...leftGroups, ...zeroGroups, ...rightGroups]; + expanded = allGroups.join(':'); + } + + let groups = expanded.split(':'); + + let maskedGroups = groups.map((group, index) => { + if (index < keepGroups) { + return group; + } + return maskChar.repeat(Math.max(1, group.length)); + }); + + return maskedGroups.join(':'); +}; + +export let anonymizeIP = (ip: string, options: AnonymizationOptions = {}) => { + if (!ip || typeof ip !== 'string') { + throw new Error('IP address must be a non-empty string'); + } + + let trimmedIP = ip.trim(); + + if (isIPv4(trimmedIP)) { + return anonymizeIPv4(trimmedIP, { + keepGroups: + typeof options.keepGroups === 'number' ? options.keepGroups : options.keepGroups?.ipv4, + maskChar: options.maskChar + }).replace('000', '0'); // Ensure no triple zeros in IPv4 + } + + if (isIPv6(trimmedIP)) { + return anonymizeIPv6(trimmedIP, { + keepGroups: + typeof options.keepGroups === 'number' ? options.keepGroups : options.keepGroups?.ipv6, + maskChar: options.maskChar + }); + } + + throw new Error('Invalid IP address format'); +}; diff --git a/src/_shared/util/anonymize-ip/src/index.ts b/src/_shared/util/anonymize-ip/src/index.ts new file mode 100644 index 000000000..841e939d6 --- /dev/null +++ b/src/_shared/util/anonymize-ip/src/index.ts @@ -0,0 +1 @@ +export * from './anonymizeIp'; diff --git a/src/_shared/util/anonymize-ip/tsconfig.json b/src/_shared/util/anonymize-ip/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/anonymize-ip/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/anonymize-ip/tsup.config.js b/src/_shared/util/anonymize-ip/tsup.config.js new file mode 100644 index 000000000..4e2a3d688 --- /dev/null +++ b/src/_shared/util/anonymize-ip/tsup.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: true, + dts: true +}); diff --git a/src/_shared/util/base62/package.json b/src/_shared/util/base62/package.json new file mode 100644 index 000000000..bd949406c --- /dev/null +++ b/src/_shared/util/base62/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/base62", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "base-x": "^5.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/base62/src/base62.test.ts b/src/_shared/util/base62/src/base62.test.ts new file mode 100644 index 000000000..ca5cd7cae --- /dev/null +++ b/src/_shared/util/base62/src/base62.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, test } from 'vitest'; +import { base62 } from './base62'; + +describe('base62', () => { + test('should encode strings', () => { + expect(base62.encode('foo')).toBe('sapp'); + expect(base62.encode('bar')).toBe('r3hw'); + }); + + test('should decode strings', () => { + expect(base62.decode('sapp')).toBe('foo'); + expect(base62.decode('r3hw')).toBe('bar'); + }); + + test('should encode and decode strings', () => { + expect(base62.decode(base62.encode('foo'))).toBe('foo'); + expect(base62.decode(base62.encode('bar'))).toBe('bar'); + }); +}); diff --git a/src/_shared/util/base62/src/base62.ts b/src/_shared/util/base62/src/base62.ts new file mode 100644 index 000000000..0e93ce658 --- /dev/null +++ b/src/_shared/util/base62/src/base62.ts @@ -0,0 +1,14 @@ +import baseX from 'base-x'; + +// base62: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +// base62: 123456789abcdefghijk mnopqrstuvwxyzABCDEFGH JKLMN PQRSTUVWXYZ +// -> missing characters: 0, l, I, O + +let internal = baseX('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); + +export let base62 = { + encode: (input: string | Uint8Array) => + internal.encode(typeof input == 'string' ? new TextEncoder().encode(input) : input), + decode: (input: string) => new TextDecoder().decode(internal.decode(input)), + decodeRaw: (input: string) => internal.decode(input) +}; diff --git a/src/_shared/util/base62/src/index.ts b/src/_shared/util/base62/src/index.ts new file mode 100644 index 000000000..ccb113d94 --- /dev/null +++ b/src/_shared/util/base62/src/index.ts @@ -0,0 +1 @@ +export * from './base62'; diff --git a/src/_shared/util/base62/tsconfig.json b/src/_shared/util/base62/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/base62/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/canonicalize/package.json b/src/_shared/util/canonicalize/package.json new file mode 100644 index 000000000..e4ad3f7fd --- /dev/null +++ b/src/_shared/util/canonicalize/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/canonicalize", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/canonicalize/src/canonicalize.test.ts b/src/_shared/util/canonicalize/src/canonicalize.test.ts new file mode 100644 index 000000000..f4642f8f7 --- /dev/null +++ b/src/_shared/util/canonicalize/src/canonicalize.test.ts @@ -0,0 +1,58 @@ +import { describe, expect, test } from 'vitest'; +import { canonicalize } from './canonicalize'; + +describe('canonicalize', () => { + test('basic values', async () => { + expect(canonicalize('test')).toBe('"test"'); + expect(canonicalize(1)).toBe('1'); + expect(canonicalize(true)).toBe('true'); + expect(canonicalize(false)).toBe('false'); + expect(canonicalize(null)).toBe('null'); + expect(canonicalize(undefined)).toBe('null'); + }); + + test('arrays', async () => { + expect(canonicalize(['test', 1, true, false, null, undefined])).toBe( + '["test",1,true,false,null,null]' + ); + }); + + test('objects', async () => { + expect( + canonicalize({ + test: 'test', + 1: 1, + true: true, + false: false, + null: null + }) + ).toBe('{"1":1,"false":false,"null":null,"test":"test","true":true}'); + }); + + test('nested objects', async () => { + expect( + canonicalize({ + e: 'test', + + f: { + h: { + i: 'test', + g: [1, '2'] + }, + g: [1, '2'] + }, + + a: { + d: 'test', + + b: { + c: 'test', + d: 'test' + } + } + }) + ).toBe( + '{"a":{"b":{"c":"test","d":"test"},"d":"test"},"e":"test","f":{"g":[1,"2"],"h":{"g":[1,"2"],"i":"test"}}}' + ); + }); +}); diff --git a/src/_shared/util/canonicalize/src/canonicalize.ts b/src/_shared/util/canonicalize/src/canonicalize.ts new file mode 100644 index 000000000..6622fe8b1 --- /dev/null +++ b/src/_shared/util/canonicalize/src/canonicalize.ts @@ -0,0 +1,41 @@ +let isValidNumber = (n: any) => { + return typeof n === 'number' && !isNaN(n) && n !== Infinity && n !== -Infinity; +}; + +let getValue = (json: any) => { + return json === undefined || typeof json === 'symbol' ? null : json; +}; + +/** + * Canonicalize some json according to https://www.rfc-editor.org/rfc/rfc8785 + */ +export let canonicalize = (json: any): string => { + if (typeof json === 'number' && !isValidNumber(json)) { + throw new Error('canonicalize: cannot canonicalize non-number JSON'); + } + + if (json === undefined) return 'null'; + + if (json instanceof Date) return JSON.stringify(json.toISOString()); + if (json instanceof RegExp) return JSON.stringify(json.toString()); + if (typeof json == 'bigint') return JSON.stringify(json.toString()); + + if (json === null || typeof json !== 'object') { + return JSON.stringify(json); + } + + if (json.toJSON instanceof Function) { + return canonicalize(json.toJSON()); + } + + if (Array.isArray(json)) { + let inner = json.map(item => canonicalize(getValue(item))).join(','); + return `[${inner}]`; + } + + let inner = Object.keys(json) + .sort() + .map(key => `${canonicalize(key)}:${canonicalize(getValue(json[key]))}`) + .join(','); + return `{${inner}}`; +}; diff --git a/src/_shared/util/canonicalize/src/index.ts b/src/_shared/util/canonicalize/src/index.ts new file mode 100644 index 000000000..a4de865a6 --- /dev/null +++ b/src/_shared/util/canonicalize/src/index.ts @@ -0,0 +1 @@ +export * from './canonicalize'; diff --git a/src/_shared/util/canonicalize/tsconfig.json b/src/_shared/util/canonicalize/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/canonicalize/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/case/package.json b/src/_shared/util/case/package.json new file mode 100644 index 000000000..97845320f --- /dev/null +++ b/src/_shared/util/case/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/case", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/case/src/cases.test.ts b/src/_shared/util/case/src/cases.test.ts new file mode 100644 index 000000000..45f15fde5 --- /dev/null +++ b/src/_shared/util/case/src/cases.test.ts @@ -0,0 +1,97 @@ +import { describe, expect, it, vi } from 'vitest'; +import { Cases } from './cases'; +import { normalizeCase } from './normalize'; +import { titleWord, word } from './special'; + +vi.mock('./normalize', () => ({ + normalizeCase: vi.fn((input: string) => input.toLowerCase().split(/[\s_-]+/)), +})); + +vi.mock('./special', () => ({ + titleWord: vi.fn((input: string) => input.charAt(0).toUpperCase() + input.slice(1)), + word: vi.fn((input: string) => input.toLowerCase()), +})); + +describe('Cases', () => { + describe('Static methods', () => { + it('toCamelCase should convert input to camelCase', () => { + const result = Cases.toCamelCase('hello world'); + expect(result).toBe('helloWorld'); + }); + + it('toPascalCase should convert input to PascalCase', () => { + const result = Cases.toPascalCase('hello world'); + expect(result).toBe('HelloWorld'); + }); + + it('toKebabCase should convert input to kebab-case', () => { + const result = Cases.toKebabCase('hello world'); + expect(result).toBe('hello-world'); + }); + + it('toSnakeCase should convert input to snake_case', () => { + const result = Cases.toSnakeCase('hello world'); + expect(result).toBe('hello_world'); + }); + + it('toTitleCase should convert input to Title Case', () => { + const result = Cases.toTitleCase('hello world'); + expect(result).toBe('Hello World'); + }); + + it('toSentenceCase should convert input to Sentence case', () => { + const result = Cases.toSentenceCase('hello world'); + expect(result).toBe('Hello world'); + }); + }); + + describe('Instance methods', () => { + it('toCamelCase should convert normalized input to camelCase', () => { + const cases = new Cases('hello world'); + const result = cases.toCamelCase(); + expect(result).toBe('helloWorld'); + }); + + it('toPascalCase should convert normalized input to PascalCase', () => { + const cases = new Cases('hello world'); + const result = cases.toPascalCase(); + expect(result).toBe('HelloWorld'); + }); + + it('toKebabCase should convert normalized input to kebab-case', () => { + const cases = new Cases('hello world'); + const result = cases.toKebabCase(); + expect(result).toBe('hello-world'); + }); + + it('toSnakeCase should convert normalized input to snake_case', () => { + const cases = new Cases('hello world'); + const result = cases.toSnakeCase(); + expect(result).toBe('hello_world'); + }); + + it('toTitleCase should convert normalized input to Title Case', () => { + const cases = new Cases('hello world'); + const result = cases.toTitleCase(); + expect(result).toBe('Hello World'); + }); + + it('toSentenceCase should convert normalized input to Sentence case', () => { + const cases = new Cases('hello world'); + const result = cases.toSentenceCase(); + expect(result).toBe('Hello world'); + }); + }); + + it('should call normalizeCase during initialization', () => { + new Cases('hello world'); + expect(normalizeCase).toHaveBeenCalledWith('hello world'); + }); + + it('should call titleWord and word in toSentenceCase', () => { + const cases = new Cases('hello world'); + cases.toSentenceCase(); + expect(titleWord).toHaveBeenCalledWith('hello'); + expect(word).toHaveBeenCalledWith('world'); + }); +}); \ No newline at end of file diff --git a/src/_shared/util/case/src/cases.ts b/src/_shared/util/case/src/cases.ts new file mode 100644 index 000000000..3679d4e85 --- /dev/null +++ b/src/_shared/util/case/src/cases.ts @@ -0,0 +1,62 @@ +import { normalizeCase } from './normalize'; +import { titleWord, word } from './special'; + +export class Cases { + #normalized: string[]; + + constructor(input: string) { + this.#normalized = normalizeCase(input); + } + + static toCamelCase(input: string) { + return new Cases(input).toCamelCase(); + } + + static toPascalCase(input: string) { + return new Cases(input).toPascalCase(); + } + + static toKebabCase(input: string) { + return new Cases(input).toKebabCase(); + } + + static toSnakeCase(input: string) { + return new Cases(input).toSnakeCase(); + } + + static toTitleCase(input: string) { + return new Cases(input).toTitleCase(); + } + + static toSentenceCase(input: string) { + return new Cases(input).toSentenceCase(); + } + + toCamelCase() { + return this.#normalized + .map((word, i) => (i === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1))) + .join(''); + } + + toPascalCase() { + return this.#normalized.map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(''); + } + + toKebabCase() { + return this.#normalized.join('-'); + } + + toSnakeCase() { + return this.#normalized.join('_'); + } + + toTitleCase() { + return this.#normalized.map(w => titleWord(w)).join(' '); + } + + toSentenceCase() { + return this.#normalized.map((w, i) => (i === 0 ? titleWord(w) : word(w))).join(' '); + } +} + +export let capitalize = (input: string) => Cases.toTitleCase(input); diff --git a/src/_shared/util/case/src/index.ts b/src/_shared/util/case/src/index.ts new file mode 100644 index 000000000..0a57d2a8d --- /dev/null +++ b/src/_shared/util/case/src/index.ts @@ -0,0 +1 @@ +export * from './cases'; diff --git a/src/_shared/util/case/src/normalize.test.ts b/src/_shared/util/case/src/normalize.test.ts new file mode 100644 index 000000000..4aa55257b --- /dev/null +++ b/src/_shared/util/case/src/normalize.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, it } from 'vitest'; +import { normalizeCase } from './normalize'; + +describe('normalizeCase', () => { + it('should replace underscores and hyphens with spaces', () => { + expect(normalizeCase('hello_world-test')).toEqual(['hello', 'world', 'test']); + }); + + it('should insert spaces between lowercase-to-uppercase transitions', () => { + expect(normalizeCase('camelCaseExample')).toEqual(['camel', 'case', 'example']); + expect(normalizeCase('PascalCaseExample')).toEqual(['pascal', 'case', 'example']); + }); + + it('should insert spaces between number-letter transitions', () => { + expect(normalizeCase('test123Example')).toEqual(['test', '123', 'example']); + expect(normalizeCase('123testExample')).toEqual(['123', 'test', 'example']); + }); + + it('should normalize all words to lowercase', () => { + expect(normalizeCase('HelloWorld')).toEqual(['hello', 'world']); + expect(normalizeCase('HELLO-WORLD')).toEqual(['hello', 'world']); + }); + + it('should handle mixed cases and separators', () => { + expect(normalizeCase('helloWorld_test-123Example')).toEqual(['hello', 'world', 'test', '123', 'example']); + }); + + it('should handle empty strings', () => { + expect(normalizeCase('')).toEqual([]); + }); + + it('should handle strings with only separators', () => { + expect(normalizeCase('___---')).toEqual([]); + }); + + it('should handle strings with spaces', () => { + expect(normalizeCase('hello world')).toEqual(['hello', 'world']); + }); +}); \ No newline at end of file diff --git a/src/_shared/util/case/src/normalize.ts b/src/_shared/util/case/src/normalize.ts new file mode 100644 index 000000000..36d7f5691 --- /dev/null +++ b/src/_shared/util/case/src/normalize.ts @@ -0,0 +1,16 @@ +export let normalizeCase = (input: string) => { + return ( + input + // Replace underscores and hyphens with spaces for easy splitting + .replace(/[_-]/g, ' ') + // Insert spaces between lowercase-to-uppercase transitions (camelCase & PascalCase) + .replace(/([a-z])([A-Z])/g, '$1 $2') + // Insert spaces between number-letter transitions + .replace(/([0-9])([a-zA-Z])/g, '$1 $2') + .replace(/([a-zA-Z])([0-9])/g, '$1 $2') + // Split by spaces and normalize to lowercase + .split(/\s+/) + .map(word => word.trim().toLowerCase()) + .filter(Boolean) // Remove empty strings + ); +}; diff --git a/src/_shared/util/case/src/special.ts b/src/_shared/util/case/src/special.ts new file mode 100644 index 000000000..c6a8d9790 --- /dev/null +++ b/src/_shared/util/case/src/special.ts @@ -0,0 +1,158 @@ +// Blatantly stolen from https://github.com/vercel/title + +let conjunctions = ['for', 'and', 'nor', 'but', 'or', 'yet', 'so']; + +let articles = ['a', 'an', 'the']; + +let prepositions = [ + 'aboard', + 'about', + 'above', + 'across', + 'after', + 'against', + 'along', + 'amid', + 'among', + 'anti', + 'around', + 'as', + 'at', + 'before', + 'behind', + 'below', + 'beneath', + 'beside', + 'besides', + 'between', + 'beyond', + 'but', + 'by', + 'concerning', + 'considering', + 'despite', + 'down', + 'during', + 'except', + 'excepting', + 'excluding', + 'following', + 'for', + 'from', + 'in', + 'inside', + 'into', + 'like', + 'minus', + 'near', + 'of', + 'off', + 'on', + 'onto', + 'opposite', + 'over', + 'past', + 'per', + 'plus', + 'regarding', + 'round', + 'save', + 'since', + 'than', + 'through', + 'to', + 'toward', + 'towards', + 'under', + 'underneath', + 'unlike', + 'until', + 'up', + 'upon', + 'versus', + 'via', + 'with', + 'within', + 'without' +]; + +let specials = [ + 'Metorial', + 'MCP', + 'CLI', + 'API', + 'HTTP', + 'HTTPS', + 'JSX', + 'DNS', + 'URL', + 'CI', + 'CD', + 'CDN', + 'package.json', + 'package.lock', + 'yarn.lock', + 'GitHub', + 'GitLab', + 'CSS', + 'Sass', + 'JS', + 'JavaScript', + 'TypeScript', + 'HTML', + 'WordPress', + 'Next.js', + 'Node.js', + 'Webpack', + 'Docker', + 'Bash', + 'Kubernetes', + 'SWR', + 'TinaCMS', + 'UI', + 'UX', + 'TS', + 'TSX', + 'iPhone', + 'iPad', + 'watchOS', + 'iOS', + 'iPadOS', + 'macOS', + 'PHP', + 'composer.json', + 'composer.lock', + 'CMS', + 'SQL', + 'C', + 'C#', + 'GraphQL', + 'GraphiQL', + 'JWT', + 'JWTs' +]; + +let specialMap = new Map([ + ...conjunctions.map(c => [c.toLowerCase(), c] as const), + ...articles.map(a => [a.toLowerCase(), a] as const), + ...prepositions.map(p => [p.toLowerCase(), p] as const), + ...specials.map(s => [s.toLowerCase(), s] as const) +]); + +export let titleWord = (word: string) => { + let lower = word.toLowerCase(); + if (specialMap.has(lower)) { + return specialMap.get(lower)!; + } + + return word.charAt(0).toUpperCase() + word.slice(1); +}; + +export let word = (word: string) => { + let lower = word.toLowerCase(); + if (specialMap.has(lower)) { + return specialMap.get(lower)!; + } + + return word.charAt(0).toUpperCase() + word.slice(1); +}; diff --git a/src/_shared/util/case/tsconfig.json b/src/_shared/util/case/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/case/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/delay/.gitignore b/src/_shared/util/delay/.gitignore new file mode 100644 index 000000000..a14702c40 --- /dev/null +++ b/src/_shared/util/delay/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/src/_shared/util/delay/package.json b/src/_shared/util/delay/package.json new file mode 100644 index 000000000..b068f0e25 --- /dev/null +++ b/src/_shared/util/delay/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/delay", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/delay/src/index.ts b/src/_shared/util/delay/src/index.ts new file mode 100644 index 000000000..922c97321 --- /dev/null +++ b/src/_shared/util/delay/src/index.ts @@ -0,0 +1 @@ +export let delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); diff --git a/src/_shared/util/delay/tsconfig.json b/src/_shared/util/delay/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/delay/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/emitter/package.json b/src/_shared/util/emitter/package.json new file mode 100644 index 000000000..1df89b3b7 --- /dev/null +++ b/src/_shared/util/emitter/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/emitter", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/emitter/src/emitter.test.ts b/src/_shared/util/emitter/src/emitter.test.ts new file mode 100644 index 000000000..03ba57fc3 --- /dev/null +++ b/src/_shared/util/emitter/src/emitter.test.ts @@ -0,0 +1,92 @@ +import { describe, expect, it, vitest } from 'vitest'; +import { Emitter } from './emitter'; + +describe('Emitter', () => { + it('should register a listener and call it when the event is emitted', () => { + const emitter = new Emitter<{ testEvent: string }>(); + const listener = vitest.fn(); + + emitter.on('testEvent', listener); + emitter.emit('testEvent', 'testData'); + + expect(listener).toHaveBeenCalledTimes(1); + expect(listener).toHaveBeenCalledWith('testData'); + }); + + it('should unregister a listener using the returned function', () => { + const emitter = new Emitter<{ testEvent: string }>(); + const listener = vitest.fn(); + + const unregister = emitter.on('testEvent', listener); + unregister(); + emitter.emit('testEvent', 'testData'); + + expect(listener).not.toHaveBeenCalled(); + }); + + it('should clear all listeners for a specific event', () => { + const emitter = new Emitter<{ testEvent: string }>(); + const listener1 = vitest.fn(); + const listener2 = vitest.fn(); + + emitter.on('testEvent', listener1); + emitter.on('testEvent', listener2); + emitter.clear('testEvent'); + emitter.emit('testEvent', 'testData'); + + expect(listener1).not.toHaveBeenCalled(); + expect(listener2).not.toHaveBeenCalled(); + }); + + it('should clear all listeners for all events', () => { + const emitter = new Emitter<{ testEvent1: string; testEvent2: number }>(); + const listener1 = vitest.fn(); + const listener2 = vitest.fn(); + + emitter.on('testEvent1', listener1); + emitter.on('testEvent2', listener2); + emitter.clear(); + emitter.emit('testEvent1', 'testData'); + emitter.emit('testEvent2', 42); + + expect(listener1).not.toHaveBeenCalled(); + expect(listener2).not.toHaveBeenCalled(); + }); + + it('should call a listener registered with "once" only once', () => { + const emitter = new Emitter<{ testEvent: string }>(); + const listener = vitest.fn(); + + emitter.once('testEvent', listener); + emitter.emit('testEvent', 'testData1'); + emitter.emit('testEvent', 'testData2'); + + expect(listener).toHaveBeenCalledTimes(1); + expect(listener).toHaveBeenCalledWith('testData1'); + }); + + it('should not call a listener for a different event', () => { + const emitter = new Emitter<{ testEvent1: string; testEvent2: number }>(); + const listener = vitest.fn(); + + emitter.on('testEvent1', listener); + emitter.emit('testEvent2', 42); + + expect(listener).not.toHaveBeenCalled(); + }); + + it('should handle multiple listeners for the same event', () => { + const emitter = new Emitter<{ testEvent: string }>(); + const listener1 = vitest.fn(); + const listener2 = vitest.fn(); + + emitter.on('testEvent', listener1); + emitter.on('testEvent', listener2); + emitter.emit('testEvent', 'testData'); + + expect(listener1).toHaveBeenCalledTimes(1); + expect(listener1).toHaveBeenCalledWith('testData'); + expect(listener2).toHaveBeenCalledTimes(1); + expect(listener2).toHaveBeenCalledWith('testData'); + }); +}); diff --git a/src/_shared/util/emitter/src/emitter.ts b/src/_shared/util/emitter/src/emitter.ts new file mode 100644 index 000000000..0cb9a02b4 --- /dev/null +++ b/src/_shared/util/emitter/src/emitter.ts @@ -0,0 +1,45 @@ +export class Emitter> { + #listeners = new Map void>>(); + + on(event: K, callback: (data: T[K]) => void): () => void { + if (!this.#listeners.has(event)) this.#listeners.set(event, new Set()); + this.#listeners.get(event)?.add(callback as any); + + return () => { + this.#listeners.get(event)?.delete(callback as any); + }; + } + + emit( + event: K, + ...args: T[K] extends void | never | undefined ? [] : [T[K]] + ): void { + const data = args[0]; + this.#listeners.get(event)?.forEach(callback => callback((data ?? undefined) as any)); + } + + clear(event?: K): void { + if (event) { + this.#listeners.get(event)?.clear(); + } else { + this.#listeners.clear(); + } + } + + once(event: K, callback: (data: T[K]) => void): () => void { + const wrappedCallback = (data: T[K]) => { + callback(data); + this.off(event, wrappedCallback); + }; + + this.on(event, wrappedCallback); + + return () => { + this.off(event, wrappedCallback); + }; + } + + private off(event: K, callback: (data: T[K]) => void): void { + this.#listeners.get(event)?.delete(callback as any); + } +} diff --git a/src/_shared/util/emitter/src/index.ts b/src/_shared/util/emitter/src/index.ts new file mode 100644 index 000000000..4f735d6e5 --- /dev/null +++ b/src/_shared/util/emitter/src/index.ts @@ -0,0 +1 @@ +export * from './emitter'; diff --git a/src/_shared/util/emitter/tsconfig.json b/src/_shared/util/emitter/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/emitter/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/encryption/package.json b/src/_shared/util/encryption/package.json new file mode 100644 index 000000000..e13034f78 --- /dev/null +++ b/src/_shared/util/encryption/package.json @@ -0,0 +1,20 @@ +{ + "name": "@mtsrc/encryption", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/base62": "1.0.0", + "@mtsrc/id": "1.0.0", + "base-x": "^5.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/encryption/src/base86.ts b/src/_shared/util/encryption/src/base86.ts new file mode 100644 index 000000000..35b7f3896 --- /dev/null +++ b/src/_shared/util/encryption/src/base86.ts @@ -0,0 +1,11 @@ +import baseX from 'base-x'; + +let internal = baseX( + '!#$%()*+-.0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~§' +); + +export let base86 = { + encode: (input: string | Uint8Array) => + internal.encode(typeof input == 'string' ? new TextEncoder().encode(input) : input), + decode: (input: string) => internal.decode(input) +}; diff --git a/src/_shared/util/encryption/src/crypto.ts b/src/_shared/util/encryption/src/crypto.ts new file mode 100644 index 000000000..567e33f83 --- /dev/null +++ b/src/_shared/util/encryption/src/crypto.ts @@ -0,0 +1,80 @@ +import { base62 } from '@mtsrc/base62'; +import { base86 } from './base86'; + +let enc = new TextEncoder(); +let dec = new TextDecoder(); +let toArrayBufferView = (data: Uint8Array) => new Uint8Array(data); + +let getPasswordKey = (password: string) => + crypto.subtle.importKey('raw', enc.encode(password), 'PBKDF2', false, ['deriveKey']); + +let deriveKey = ( + passwordKey: CryptoKey, + salt: Uint8Array, + keyUsage: ('encrypt' | 'decrypt')[] +) => + crypto.subtle.deriveKey( + { + name: 'PBKDF2', + salt: salt, + iterations: 250000, + hash: 'SHA-256' + }, + passwordKey, + { name: 'AES-GCM', length: 256 }, + false, + keyUsage + ); + +let encryptData = async (secretData: string, password: string) => { + let salt = crypto.getRandomValues(new Uint8Array(new ArrayBuffer(16))); + let iv = crypto.getRandomValues(new Uint8Array(new ArrayBuffer(12))); + let passwordKey = await getPasswordKey(password); + let aesKey = await deriveKey(passwordKey, salt, ['encrypt']); + let encryptedContent = await crypto.subtle.encrypt( + { + name: 'AES-GCM', + iv + }, + aesKey, + enc.encode(secretData) + ); + + let encryptedContentArr = new Uint8Array(encryptedContent); + let buff = new Uint8Array(salt.byteLength + iv.byteLength + encryptedContentArr.byteLength); + buff.set(salt, 0); + buff.set(iv, salt.byteLength); + buff.set(encryptedContentArr, salt.byteLength + iv.byteLength); + + return base86.encode(buff); +}; + +let decryptData = async (encryptedData: string, password: string) => { + let encryptedDataBuff = base86.decode(encryptedData); + let salt = toArrayBufferView(encryptedDataBuff.slice(0, 16)); + let iv = encryptedDataBuff.slice(16, 28); + let data = encryptedDataBuff.slice(28); + let passwordKey = await getPasswordKey(password); + let aesKey = await deriveKey(passwordKey, salt, ['decrypt']); + let decryptedContent = await crypto.subtle.decrypt( + { + name: 'AES-GCM', + iv + }, + aesKey, + data + ); + + return dec.decode(decryptedContent); +}; + +let sha512 = async (data: string) => { + let hashBuffer = await crypto.subtle.digest('SHA-512', enc.encode(data)); + return base62.encode(new Uint8Array(hashBuffer)); +}; + +export let secretsCrypto = { + encrypt: encryptData, + decrypt: decryptData, + sha512 +}; diff --git a/src/_shared/util/encryption/src/index.ts b/src/_shared/util/encryption/src/index.ts new file mode 100644 index 000000000..be1c7f150 --- /dev/null +++ b/src/_shared/util/encryption/src/index.ts @@ -0,0 +1,28 @@ +import { generatePlainId } from '@mtsrc/id'; +import { secretsCrypto } from './crypto'; + +export class Encryption { + constructor(private readonly password: string) {} + + private async getPassword(entityId: string) { + return (await secretsCrypto.sha512(`${entityId}${this.password!}`)).slice(0, 50); + } + + async encrypt(input: { secret: string; entityId: string }) { + return await secretsCrypto.encrypt( + JSON.stringify({ + id: generatePlainId(10), + key: input.secret + }), + await this.getPassword(input.entityId) + ); + } + + async decrypt(info: { encrypted: string; entityId: string }) { + let content = JSON.parse( + await secretsCrypto.decrypt(info.encrypted, await this.getPassword(info.entityId)) + ); + + return content.key; + } +} diff --git a/src/_shared/util/encryption/tsconfig.json b/src/_shared/util/encryption/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/encryption/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/flatten/package.json b/src/_shared/util/flatten/package.json new file mode 100644 index 000000000..abceea25d --- /dev/null +++ b/src/_shared/util/flatten/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/flatten", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/flatten/src/deepen.test.ts b/src/_shared/util/flatten/src/deepen.test.ts new file mode 100644 index 000000000..f342e664a --- /dev/null +++ b/src/_shared/util/flatten/src/deepen.test.ts @@ -0,0 +1,53 @@ +import { describe, expect, it } from 'vitest'; +import { deepenObject } from './deepen'; + +describe('deepenObject', () => { + it('unflattens a flattened object', () => { + let flattened = { 'a.b': 1 }; + expect(deepenObject(flattened)).toEqual({ a: { b: 1 } }); + }); + + it('unflattens objects flattened multiple levels', () => { + let flattened = { 'a.b.c': 1 }; + expect(deepenObject(flattened)).toEqual({ a: { b: { c: 1 } } }); + }); + + it('handles non-object values', () => { + let flattened = { 'a.b': 1, c: 2 }; + expect(deepenObject(flattened)).toEqual({ a: { b: 1 }, c: 2 }); + }); + + it('unflattens arrays', () => { + let flattened = { + 'arr[0]': 1, + 'arr[1]': 2 + }; + + expect(deepenObject(flattened)).toEqual({ + arr: [1, 2] + }); + }); + + it('unflattens arrays in objects', () => { + let flattened = { + 'obj.arr[0]': 1, + 'obj.arr[1]': 2 + }; + + expect(deepenObject(flattened)).toEqual({ + obj: { arr: [1, 2] } + }); + }); + + it('unflattens nested arrays', () => { + let flattened = { + 'arr[0][0]': 1, + 'arr[0][1]': 2, + 'arr[1][0]': 3 + }; + + expect(deepenObject(flattened)).toEqual({ + arr: [[1, 2], [3]] + }); + }); +}); diff --git a/src/_shared/util/flatten/src/deepen.ts b/src/_shared/util/flatten/src/deepen.ts new file mode 100644 index 000000000..4ab6a2805 --- /dev/null +++ b/src/_shared/util/flatten/src/deepen.ts @@ -0,0 +1,53 @@ +export let deepenObject = (obj: Record) => { + let deepened: any = Object.keys(obj)[0].startsWith('[') ? [] : {}; + + Object.keys(obj).forEach(key => { + let value = obj[key as keyof typeof obj]; + let parts = key.split('.').flatMap(p => + p.split('[').map(p => { + let isArray = p.endsWith(']'); + + if (isArray) { + return { + type: 'array' as const, + index: parseInt(p.slice(0, -1)) + }; + } else { + return { + type: 'object' as const, + name: p + }; + } + }) + ); + + let current = deepened; + + for (let partIndex in parts.slice(0, -1)) { + let part = parts[partIndex]; + let nextPart = parts[parseInt(partIndex) + 1]; + + if (part.type === 'array') { + if (!current[part.index]) { + current[part.index] = nextPart.type === 'array' ? [] : {}; + } + current = current[part.index]; + } else { + if (!current[part.name]) { + current[part.name] = nextPart.type === 'array' ? [] : {}; + } + current = current[part.name]; + } + } + + let lastPart = parts[parts.length - 1]; + + if (lastPart.type === 'array') { + if (!current[lastPart.index]) current[lastPart.index] = value; + } else { + if (!current[lastPart.name]) current[lastPart.name] = value; + } + }); + + return deepened; +}; diff --git a/src/_shared/util/flatten/src/flatten.test.ts b/src/_shared/util/flatten/src/flatten.test.ts new file mode 100644 index 000000000..a0c9ad113 --- /dev/null +++ b/src/_shared/util/flatten/src/flatten.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, it } from 'vitest'; +import { flattenObject } from './flatten'; + +describe('flattenObject', () => { + it('flattens a nested object', () => { + let nested = { a: { b: 1 } }; + expect(flattenObject(nested)).toEqual({ 'a.b': 1 }); + }); + + it('flattens objects nested multiple levels', () => { + let nested = { a: { b: { c: 1 } } }; + expect(flattenObject(nested)).toEqual({ 'a.b.c': 1 }); + }); + + it('handles non-object values', () => { + let obj = { a: { b: 1 }, c: 2 }; + expect(flattenObject(obj)).toEqual({ 'a.b': 1, c: 2 }); + }); + + it('flattens arrays', () => { + let nested = { arr: [1, 2] }; + + expect(flattenObject(nested)).toEqual({ + 'arr[0]': 1, + 'arr[1]': 2 + }); + }); + + it('flattens arrays in objects', () => { + let nested = { obj: { arr: [1, 2] } }; + + expect(flattenObject(nested)).toEqual({ + 'obj.arr[0]': 1, + 'obj.arr[1]': 2 + }); + }); + + it('flattens nested arrays', () => { + let nested = { arr: [[1, 2], [3]] }; + + expect(flattenObject(nested)).toEqual({ + 'arr[0][0]': 1, + 'arr[0][1]': 2, + 'arr[1][0]': 3 + }); + }); +}); diff --git a/src/_shared/util/flatten/src/flatten.ts b/src/_shared/util/flatten/src/flatten.ts new file mode 100644 index 000000000..45af3374b --- /dev/null +++ b/src/_shared/util/flatten/src/flatten.ts @@ -0,0 +1,30 @@ +export let flattenObject = (obj: object | Array) => { + let flattened: { [key: string]: any } = {}; + + let recurse = (current: object | Array, prefix: string) => { + if (Array.isArray(current)) { + current.forEach((value, index) => { + let fullKey = `${prefix}[${index}]`; + if (typeof value === 'object' && value !== null) { + recurse(value, fullKey); + } else { + flattened[fullKey] = value; + } + }); + } else { + Object.keys(current).forEach(key => { + let value = current[key as keyof typeof current]; + let fullKey = prefix ? `${prefix}.${key}` : key; + if (typeof value === 'object' && value !== null) { + recurse(value, fullKey); + } else { + flattened[fullKey] = value; + } + }); + } + }; + + recurse(obj, ''); + + return flattened; +}; diff --git a/src/_shared/util/flatten/src/index.ts b/src/_shared/util/flatten/src/index.ts new file mode 100644 index 000000000..f205efafd --- /dev/null +++ b/src/_shared/util/flatten/src/index.ts @@ -0,0 +1,2 @@ +export * from './deepen'; +export * from './flatten'; diff --git a/src/_shared/util/flatten/tsconfig.json b/src/_shared/util/flatten/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/flatten/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/hash/package.json b/src/_shared/util/hash/package.json new file mode 100644 index 000000000..451bee633 --- /dev/null +++ b/src/_shared/util/hash/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/hash", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/base62": "1.0.0" + }, + "devDependencies": { + "vitest": "^3.1.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3" + } +} diff --git a/src/_shared/util/hash/src/hash.test.ts b/src/_shared/util/hash/src/hash.test.ts new file mode 100644 index 000000000..84b215933 --- /dev/null +++ b/src/_shared/util/hash/src/hash.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, test } from 'vitest'; +import { Hash } from './hash'; + +describe('hash', () => { + test('sha1', async () => { + let hashed = await Hash.sha1('test'); + expect(typeof hashed).toBe('string'); + expect(hashed).toBe('o9Crlt3rLRVUnCwprCtih1kVEj1'); + }); + + test('sha256', async () => { + let hashed = await Hash.sha256('test'); + expect(typeof hashed).toBe('string'); + expect(hashed).toBe('BPnqohXkV2RYnNLSg67Oz0flm9eNJx2THIK59ZRZHV6'); + }); +}); diff --git a/src/_shared/util/hash/src/hash.ts b/src/_shared/util/hash/src/hash.ts new file mode 100644 index 000000000..6dec2d249 --- /dev/null +++ b/src/_shared/util/hash/src/hash.ts @@ -0,0 +1,14 @@ +import { base62 } from '@mtsrc/base62'; + +let _hash = async (algorithm: any, data: string) => { + return base62.encode( + new Uint8Array(await crypto.subtle.digest(algorithm, new TextEncoder().encode(data))) + ); +}; + +export let Hash = { + sha1: async (data: string) => _hash('SHA-1', data), + sha256: async (data: string) => _hash('SHA-256', data), + sha384: async (data: string) => _hash('SHA-384', data), + sha512: async (data: string) => _hash('SHA-512', data) +}; diff --git a/src/_shared/util/hash/src/index.ts b/src/_shared/util/hash/src/index.ts new file mode 100644 index 000000000..6719163c3 --- /dev/null +++ b/src/_shared/util/hash/src/index.ts @@ -0,0 +1 @@ +export * from './hash'; diff --git a/src/_shared/util/hash/tsconfig.json b/src/_shared/util/hash/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/hash/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/id/package.json b/src/_shared/util/id/package.json new file mode 100644 index 000000000..8679d6496 --- /dev/null +++ b/src/_shared/util/id/package.json @@ -0,0 +1,22 @@ +{ + "name": "@mtsrc/id", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/hash": "1.0.0", + "@mtsrc/error": "1.0.0", + "nanoid": "^5.0.7", + "short-uuid": "^5.2.0", + "snowflake-uuid": "^1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/id/src/id.test.ts b/src/_shared/util/id/src/id.test.ts new file mode 100644 index 000000000..d47c046c9 --- /dev/null +++ b/src/_shared/util/id/src/id.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, test } from 'vitest'; +import { createIdGenerator, idType } from './id'; + +describe('id', () => { + test('generateId', async () => { + let fact = createIdGenerator({ + test: idType.sorted('test', 25) + }); + + expect((await fact.generateId('test')).startsWith('test_')).toBeTruthy(); + expect((await fact.generateId('test')).length).toBe(30); + }); +}); diff --git a/src/_shared/util/id/src/id.ts b/src/_shared/util/id/src/id.ts new file mode 100644 index 000000000..6ea40966c --- /dev/null +++ b/src/_shared/util/id/src/id.ts @@ -0,0 +1,210 @@ +import { ServiceError, badRequestError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { customAlphabet } from 'nanoid'; +import short from 'short-uuid'; +import { Worker } from 'snowflake-uuid'; + +let translator = short('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'); + +let _defaultId = customAlphabet( + '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', + 20 +); + +let _code = customAlphabet('0123456789', 6); + +export let idTime = () => new Date().getTime().toString(36).padStart(9, '0'); + +let snowflakeIdGenerator = new Worker(0, 0, { + workerIdBits: 12, + sequenceBits: 12 +}); + +let seenPrefixes = new Set(); +let checkPrefix = (prefix: string) => { + if (prefix.endsWith('_')) prefix = prefix.slice(0, -1); + + if (seenPrefixes.has(prefix)) { + throw new Error(`Prefix ${prefix} already exists`); + } +}; + +export let idType = { + sorted: (prefix: string, length: number = 22) => { + checkPrefix(prefix); + + return { + prefix, + length, + type: 'sorted' as const + }; + }, + unsorted: (prefix: string, length: number = 22) => { + checkPrefix(prefix); + + return { + prefix, + length, + type: 'unsorted' as const + }; + }, + key: (prefix: string, length: number = 50) => { + checkPrefix(prefix); + + return { prefix, length, type: 'key' as const }; + } +}; + +export let createIdGenerator = < + T extends { + [key: string]: { + prefix: string; + length: number; + type: 'sorted' | 'key' | 'unsorted'; + }; + } +>( + idPrefixes: T +) => { + for (let key in idPrefixes) { + let idPrefix = idPrefixes[key]!; + if (!idPrefix.prefix.endsWith('_')) { + idPrefix.prefix = `${idPrefix.prefix}_`; + } + } + + let seenPrefixes = new Set(); + for (let key in idPrefixes) { + let prefix = idPrefixes[key]!.prefix; + if (seenPrefixes.has(prefix)) { + throw new Error(`Prefix ${prefix} already exists`); + } + seenPrefixes.add(prefix); + } + + let getIdDescription = (prefix: keyof T) => { + let pf = idPrefixes[prefix]; + if (!pf) throw new Error(`Invalid prefix: ${prefix as string}`); + + return pf; + }; + + return { + generateId: async (prefix: keyof T) => { + let desc = getIdDescription(prefix); + let length = desc.length; + + if (desc.type == 'sorted') { + let date = idTime(); + + let remainingLength = length - date.length; + if (remainingLength < 10) remainingLength = 10; + + return `${desc.prefix}${date}${_defaultId(remainingLength)}`; + } else if (desc.type == 'unsorted') { + return `${desc.prefix}${_defaultId(length)}`; + } else { + let main = `${desc.prefix}${_defaultId(length)}`; + return `${main}${(await Hash.sha512(main)).slice(0, 6)}`; + } + }, + generateIdSync: (prefix: keyof T) => { + let desc = getIdDescription(prefix); + let length = desc.length; + + if (desc.type == 'sorted') { + let date = idTime(); + + let remainingLength = length - date.length; + if (remainingLength < 10) remainingLength = 10; + + return `${desc.prefix}${date}${_defaultId(remainingLength)}`; + } else if (desc.type == 'unsorted') { + return `${desc.prefix}${_defaultId(length)}`; + } else { + throw new Error('Cannot generate key id synchronously'); + } + }, + idPrefixes: Object.entries(idPrefixes).reduce( + (acc, [key, value]) => { + // @ts-ignore + acc[key] = value.prefix; + return acc; + }, + {} as { [key in keyof T]: string } + ), + + normalizeUUID: (prefix: keyof T, uuid: string) => { + let desc = getIdDescription(prefix); + + return `${desc.prefix}${translator.fromUUID(uuid)}`; + } + + // toUUID: (prefix: keyof T, id: string) => { + // let desc = getIdDescription(prefix); + + // if (!id.startsWith(desc.prefix)) { + // throw new ServiceError( + // badRequestError({ + // message: `ID ${id} does not start with prefix ${desc.prefix}` + // }) + // ); + // } + + // return translator.toUUID(id.slice(desc.prefix.length)); + // } + }; +}; + +export let createUuidTranslator = (prefix: string) => { + if (!prefix.endsWith('_')) prefix = `${prefix}_`; + + if (seenPrefixes.has(prefix)) { + throw new Error(`Prefix ${prefix} already exists`); + } + seenPrefixes.add(prefix); + + return { + fromUUID: (uuid: string) => `${prefix}${translator.fromUUID(uuid)}`, + toUUID: (id: string) => { + if (!id.startsWith(prefix)) { + throw new ServiceError( + badRequestError({ + message: `ID ${id} does not start with prefix ${prefix}` + }) + ); + } + + return translator.toUUID(id.slice(prefix.length)); + } + }; +}; + +export let generateCustomId = (prefix?: string, length: number = 20) => { + if (prefix && !prefix.endsWith('_')) prefix = `${prefix}_`; + + return `${prefix}${_defaultId(length)}`; +}; + +export let generatePlainId = (length: number = 20) => { + return _defaultId(length); +}; + +export let generateId = (prefix: string, length: number = 20) => { + let date = idTime(); + + let remainingLength = length - date.length; + if (remainingLength < 10) remainingLength = 10; + + return `${prefix}${date}${_defaultId(remainingLength)}`; +}; + +export let generateCode = (length: number = 6) => { + return _code(length); +}; + +export let generateSnowflakeId = (prefix?: string) => { + if (prefix && !prefix.endsWith('_')) prefix = `${prefix}_`; + + return `${prefix}${snowflakeIdGenerator.nextId().toString(36)}`; +}; diff --git a/src/_shared/util/id/src/index.ts b/src/_shared/util/id/src/index.ts new file mode 100644 index 000000000..116cb6c06 --- /dev/null +++ b/src/_shared/util/id/src/index.ts @@ -0,0 +1 @@ +export * from './id'; diff --git a/src/_shared/util/id/tsconfig.json b/src/_shared/util/id/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/id/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/ip-info/package.json b/src/_shared/util/ip-info/package.json new file mode 100644 index 000000000..b74e1ef92 --- /dev/null +++ b/src/_shared/util/ip-info/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/ip-info", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/ip-info/src/index.ts b/src/_shared/util/ip-info/src/index.ts new file mode 100644 index 000000000..0d3b73201 --- /dev/null +++ b/src/_shared/util/ip-info/src/index.ts @@ -0,0 +1 @@ +export * from './ip'; diff --git a/src/_shared/util/ip-info/src/ip.test.ts b/src/_shared/util/ip-info/src/ip.test.ts new file mode 100644 index 000000000..224650ed9 --- /dev/null +++ b/src/_shared/util/ip-info/src/ip.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from 'vitest'; +import { ipInfo } from './ip'; + +describe('ipInfo', () => { + test('getMany returns correct IP info', async () => { + let ips = ['8.8.8.8', '1.1.1.1']; + let expected = [ + { + ip: '8.8.8.8', + country: 'US', + countryName: 'United States', + asn: 'AS15169', + organization: 'Google LLC', + timezone: 'America/Chicago' + }, + { + ip: '1.1.1.1', + asn: 'AS13335', + organization: 'Cloudflare, Inc.' + } + ]; + let result = await ipInfo.getMany(ips); + expect(result).toMatchObject(expected); + }); + + test('get returns correct IP info', async () => { + let ip = '8.8.8.8'; + let expected = { + ip: '8.8.8.8', + country: 'US', + asn: 'AS15169', + organization: 'Google LLC', + countryName: 'United States', + timezone: 'America/Chicago' + }; + let result = await ipInfo.get(ip); + expect(result).toMatchObject(expected); + }); +}); diff --git a/src/_shared/util/ip-info/src/ip.ts b/src/_shared/util/ip-info/src/ip.ts new file mode 100644 index 000000000..f287619df --- /dev/null +++ b/src/_shared/util/ip-info/src/ip.ts @@ -0,0 +1,59 @@ +interface IPInfoRaw { + country?: string; + timezone?: string; + organization?: string; + ip: string; + asn?: number; + area_code?: string; + organization_name?: string; + country_code?: string; + country_code3?: string; + continent_code?: string; + latitude?: string; + region?: string; + city?: string; + longitude?: string; +} + +let normalizeIpInfo = (info: IPInfoRaw) => { + return { + ip: info.ip, + country: info.country_code, + countryName: info.country, + city: info.city, + region: info.region, + asn: info.asn ? `AS${info.asn}` : undefined, + organization: info.organization_name, + timezone: info.timezone, + + latitude: info.latitude ? parseFloat(info.latitude) : undefined, + longitude: info.longitude ? parseFloat(info.longitude) : undefined + }; +}; + +export type IPInfo = ReturnType; + +export let ipInfo = { + getMany: async (ips: string[]): Promise => { + try { + let res = await fetch(`https://get.geojs.io/v1/ip/geo.json?ip=${ips.join(',')}`); + let data = (await res.json()) as IPInfoRaw[]; + + return data.map(normalizeIpInfo); + } catch (err) { + return []; + } + }, + + get: async (ip: string) => { + return (await ipInfo.getMany([ip]))[0]; + }, + + getSafe: async (ip: string) => { + try { + return await ipInfo.get(ip); + } catch (err) { + return undefined; + } + } +}; diff --git a/src/_shared/util/ip-info/tsconfig.json b/src/_shared/util/ip-info/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/ip-info/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/join-paths/package.json b/src/_shared/util/join-paths/package.json new file mode 100644 index 000000000..1e8567dd2 --- /dev/null +++ b/src/_shared/util/join-paths/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/join-paths", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/join-paths/src/index.ts b/src/_shared/util/join-paths/src/index.ts new file mode 100644 index 000000000..cd66f061b --- /dev/null +++ b/src/_shared/util/join-paths/src/index.ts @@ -0,0 +1 @@ +export * from './joinPaths'; diff --git a/src/_shared/util/join-paths/src/joinPaths.test.ts b/src/_shared/util/join-paths/src/joinPaths.test.ts new file mode 100644 index 000000000..ed332440c --- /dev/null +++ b/src/_shared/util/join-paths/src/joinPaths.test.ts @@ -0,0 +1,28 @@ +import { describe, expect, test } from 'vitest'; +import { joinPaths } from './joinPaths'; + +describe('joinPaths', () => { + test('should join paths with leading and trailing slashes', () => { + const result = joinPaths('/path1/', '/path2/'); + + expect(result).toBe('/path1/path2'); + }); + + test('should join paths without leading and trailing slashes', () => { + const result = joinPaths('path1', 'path2'); + + expect(result).toBe('/path1/path2'); + }); + + test('should join paths with empty strings', () => { + const result = joinPaths('', 'path2', ''); + + expect(result).toBe('/path2'); + }); + + test('should join multiple paths', () => { + const result = joinPaths('path1', 'path2', 'path3'); + + expect(result).toBe('/path1/path2/path3'); + }); +}); diff --git a/src/_shared/util/join-paths/src/joinPaths.ts b/src/_shared/util/join-paths/src/joinPaths.ts new file mode 100644 index 000000000..3f13950ee --- /dev/null +++ b/src/_shared/util/join-paths/src/joinPaths.ts @@ -0,0 +1,22 @@ +export let joinPaths = (...paths: (string | null | undefined | object)[]) => { + let path = `/${paths + .filter(p => Boolean(p) && typeof p != 'object') + .map(path => (path as string)!.replace(/(^\/+|\/+$)/g, '')) + .filter(path => path.length > 0) + .join('/')}`; + + let search: Record = {}; + for (let path of paths) { + if (path && typeof path == 'object') { + for (let [key, value] of Object.entries(path)) { + if (value !== undefined && value !== null) search[key] = String(value); + } + } + } + + if (Object.keys(search).length > 0) { + path += '?' + new URLSearchParams(search).toString(); + } + + return path; +}; diff --git a/src/_shared/util/join-paths/tsconfig.json b/src/_shared/util/join-paths/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/join-paths/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/jwt/package.json b/src/_shared/util/jwt/package.json new file mode 100644 index 000000000..295a947ba --- /dev/null +++ b/src/_shared/util/jwt/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/jwt", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "jose": "^5.6.3" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/jwt/src/index.ts b/src/_shared/util/jwt/src/index.ts new file mode 100644 index 000000000..511b15a14 --- /dev/null +++ b/src/_shared/util/jwt/src/index.ts @@ -0,0 +1 @@ +export * from './jwt'; diff --git a/src/_shared/util/jwt/src/jwt.test.ts b/src/_shared/util/jwt/src/jwt.test.ts new file mode 100644 index 000000000..14eff29fc --- /dev/null +++ b/src/_shared/util/jwt/src/jwt.test.ts @@ -0,0 +1,60 @@ +import { describe, expect, test } from 'vitest'; +import { JWT } from './jwt'; + +describe('jwt', () => { + test('hs256', async () => { + let token = await JWT.sign( + { test: 'test' }, + { issuer: 'test', audience: 'test', alg: 'HS256' }, + 'test' + ); + expect(typeof token).toBe('string'); + + let payload = await JWT.verify<{ test: string }>( + token, + { issuer: 'test', audience: 'test', alg: 'HS256' }, + 'test' + ); + expect(payload.test).toBe('test'); + }); + + test('rsa256', async () => { + let privateKey = { + alg: 'RS256', + d: 'BD5mCPcc-SX6LfzaQu6JnJDmJrQC6DOtI71pyXTmQL7HCvJp252KfVVyK5yPznvOSOip1jcA-xG7l49abph1bIzPvUQzwIFkrWBiv-g0PABJdL-WgGXbCPKK6q5IFnueEJo9b0lfZBJ0kCs1M9jmXVZ3rAzEmCH8bJHqocp45k672iB-MxvOxZwJccAX4-moBFjJ3d1SjIafzt40gZ2NtBSV4lSWxD5hN9T8YzODx2S5yEGksZHpW1nmyDjeJqQuNqtZLYTsPidPE-VbeupZJJSIkV3K19orv5o9PaC8sf7bAlmCSfb-oqrY5D133l13kYj5m4SzLej31Ei_Es-z8s7N7PVVUXMT0QxZVHskkmc88wUJ_ADEUqaDnhkWcSD9Ek0YexDvqVeFHVEjjXJG95KuXF3hNuWnBcqQzamz86avNrMQVgzSKnmUb5yH6tJE1K-SVEFnSIoscJaLDPffMlOjlxFcvNbTGfFBkfccrBVGC5C36H2xo8mIX0T4Lf65D8peZRw57eSTloLesKt_A-NOe-0FsMoINDbky5vVnQ0ijFr7KzDlAdB8dt8szfFUfwuHVFiJ1xA9k_Ne0fy_SATAEQgrTdWURqlAgOfpbq6F3GkaPcDlS-plO04PyqIJD-P87lbZQngrWAB-jDf2C7WQwodjRA66HGShKSB9TFE', + dp: 'yZF-qQJfJ-r1Et8ZZziDJVWX6eEzS_g6UpTvG9OjRTxrlvjIvTMtt0P3_LhL132gs0HefGl8f5OohN6zYKzaoU-DUFXke2e1zi8PYc54k1-ul-qAGSI85FdTW_dHuBZ65ShRfOVAf6JGcU8Bvej2PoulMjwUMow2oxGyCHXrYYy0Lh3vmRxoJDZKT8fK2A5fE3kNJEZ1rXYk7Hcf_CzkC3hoLhCsoMbL78HOl-4ScQREB1hoXcGrG80u8JcyUis6K04ZU3fnB0cfPOo0b7j26NvVCaDvNgh3TcrFvzuHRb5fsYIplHObE2eVO_yrmrIpdxX9ilZEy1Wf0l1xSSv2lw', + dq: 'wl539sWbwygHVmf_ouJMt2sh7TuNLh70IVRFOZa_9FqrWMBDvObCuPOvtqbpSlvgUqmbl4x3ydFyCCv_Pi311qjcFqvTDZsaHeRiSY39Xgg-F_K6NljpLm0pPsiqwQCmKS7ZCLNOCij7B7k00v0vc_yl8kClhSh2sBaPyKaK4p5YpUEP-bMS1ExI6QpQZWXetQenUIRe2oCPF190i_7RU4F7Uhx-00F3ZTcEq7u0RRHg6u3k4q3z2L-9sjm9DZbcHVxBZ-tyDTeIIOQkwgsFoFDhgOliqplDKSnpopH-ZoWbBXThM9EV2QXYq4FkKiu6IPrLGGEawab1mT93GvUsqQ', + e: 'AQAB', + ext: true, + key_ops: ['sign'], + kty: 'RSA', + n: 'oLonMw_o114cSA2He8xcELRM3w_6tKKy3XaUfFBwFoV426TeNtPPbTs42RxRpDfbxWCgy7GH0nrj55TUQrS6yzCRaNplTCcdDS0ckRDTxBJS4flhKqkLTaMSaFQ0TqlyIDzHxVtKxt8Su6z_-oL9fZQXkeCc89YREOp1uBXwQYOTATwNydqkP53c4GPlm6C26rJzUHqtEguHni6oReWf5sYtwtJb90sEHVKkxtILytC2xAcfmj7sij8LFZtlHsMOROBgd_eAofXiph1_CMq_z9dWcWCbpGzx8QbAqS8X9O02RCFaG6XnJ6GbQ5MDDXQJUhmOVay5BMGHlRfQAEraYs5A_asa-y_3DoJxOf9QFfdU61kx9AFc92vOAVzPI8RvyLGktAwd2Cb_SrW7vSvmDEpUin5XJNT4Xy5w0VZhph5GhwxwBoviGckxy12LgyTUbb3EyxM4RkoAYB6B4yws7SQHTGgbpkjJK7CmqhJziRQqNnyQGcBjFfPLq_gu3RC2H2yAQatUn3WnxM1qXFg-XlQ4knQZM2V9xjqZeWp9pS6LhtYR0KgWESrKXD9IA3_MYKMq1G3uvDsVfcv5HGxYvnHjpAoS7Ropzu9qwnpAKLeBLMtUHje66RJ1niddEjBcfgzmXOAVntiFZt70JBjO26PlPHaMQgResYWm4w_4ZCU', + p: 'ywShrXBsP8Jsqg5kh7V6bCwRo6amLlIF65wPYNBbLzbR1CppE6rLe6Q72d653NdVAPNNlM5teschWl8TsErTzovt4s3ygrCZXaq8BdyLtLLkThOFoGXv-1vAEqy0vRMc2UOM3zHlamPaOq5_X0V_7-SBlkZo3_DtsOIBYq75B8E7OdyrQ3gVT35yMGBaZL7_jgg5nm-flAba4-nP-bFeyEPHSwa38wO8h3jf2heDQ4rrdybLe1wR0fpWaWhsZx2nbveyfCm6np1_1DmWZ0vV-ShCVnm44z431h2rqiiut_9MJ854vN23_aZfIx75F8Qe7asDl-HgLY2EUFvbN4OErw', + q: 'yqwe6VPd0m4D77R-aC40AwedLDkhY73c162nMtTpzmrHM_AmTsypX3t7SvzSoZuFNzjm1Uxb6fIBHU09OASDVZPtr4QWlj1Sp5Nt4f2mR1msSo6AMRW_i5GikFMQacAhiXIJ1rNXAaySgLGBltupddvGIB9gwCzRv6JqtgKWrOX2RZt_h9dBWHrEV9xkGS5FOKQ1_kFk_bNNeCY80RNkpYpl11V05VSufArsaWE3QAmJ_6MAzPfMizcs7PwSFOcQQrOyyrH8BwMZ24XUyRxMW-otAahDug6fDgQE8EKbTLyKRLhj39DbZmETeYhALGEvN8F8qjSzrpxnCHGXSIjBaw', + qi: 'KahHXGJ8rsuxYyF1pTk4OyG7YeOGmJ_aNcC3YYpp1oB1OOkyMlKYOtx1blm7sTKNEMERTG9IUCIdH_7r3KKvgiwxJckUcauGEetwxQAuuNulmhOhT6fQIC68UKCcIr98uh3uCDXMauCxk_gAeKE1SYQsF28a_z1jhW_F4x2zAL4WP0c7UGpOaG86tOp9MCxHOSsdbkzwW2iV43Jde20-nfJMqCG-wyieHLLbLslzXNm-jGW8GiUc2SYd7Z-7aat3cpgLQgIcRAZcEThzcWlTVHMkXX3Nl8x7irbVNj5ZMOu0PKbtGt8k9OYzzUDCLmGaWlU46QiRune0WqLwpxSlEw' + }; + + let publicKey = { + alg: 'RS256', + e: 'AQAB', + ext: true, + key_ops: ['verify'], + kty: 'RSA', + n: 'oLonMw_o114cSA2He8xcELRM3w_6tKKy3XaUfFBwFoV426TeNtPPbTs42RxRpDfbxWCgy7GH0nrj55TUQrS6yzCRaNplTCcdDS0ckRDTxBJS4flhKqkLTaMSaFQ0TqlyIDzHxVtKxt8Su6z_-oL9fZQXkeCc89YREOp1uBXwQYOTATwNydqkP53c4GPlm6C26rJzUHqtEguHni6oReWf5sYtwtJb90sEHVKkxtILytC2xAcfmj7sij8LFZtlHsMOROBgd_eAofXiph1_CMq_z9dWcWCbpGzx8QbAqS8X9O02RCFaG6XnJ6GbQ5MDDXQJUhmOVay5BMGHlRfQAEraYs5A_asa-y_3DoJxOf9QFfdU61kx9AFc92vOAVzPI8RvyLGktAwd2Cb_SrW7vSvmDEpUin5XJNT4Xy5w0VZhph5GhwxwBoviGckxy12LgyTUbb3EyxM4RkoAYB6B4yws7SQHTGgbpkjJK7CmqhJziRQqNnyQGcBjFfPLq_gu3RC2H2yAQatUn3WnxM1qXFg-XlQ4knQZM2V9xjqZeWp9pS6LhtYR0KgWESrKXD9IA3_MYKMq1G3uvDsVfcv5HGxYvnHjpAoS7Ropzu9qwnpAKLeBLMtUHje66RJ1niddEjBcfgzmXOAVntiFZt70JBjO26PlPHaMQgResYWm4w_4ZCU' + }; + + let token = await JWT.sign( + { test: 'test' }, + { issuer: 'test', audience: 'test', alg: 'RS256' }, + privateKey + ); + expect(typeof token).toBe('string'); + + let payload = await JWT.verify<{ test: string }>( + token, + { issuer: 'test', audience: 'test', alg: 'RS256' }, + publicKey + ); + expect(payload.test).toBe('test'); + }); +}); diff --git a/src/_shared/util/jwt/src/jwt.ts b/src/_shared/util/jwt/src/jwt.ts new file mode 100644 index 000000000..a0b9ec1e3 --- /dev/null +++ b/src/_shared/util/jwt/src/jwt.ts @@ -0,0 +1,76 @@ +// @ts-ignore +import * as jose from 'jose'; + +let normalizeKey = (key: jose.JWK | string) => { + if (typeof key == 'string') return JSON.parse(key); + return key; +}; + +export let importKey = async (secret: string | jose.JWK, alg: 'HS256' | 'RS256' | 'ES384') => { + // @ts-ignore + if (secret instanceof CryptoKey) return secret; + + if (alg == 'HS256' && secret) { + return new TextEncoder().encode(secret as string); + } else if (alg == 'ES384' && secret) { + return await jose.importJWK(normalizeKey(secret) as jose.JWK, 'ES384'); + } else { + return await jose.importJWK(normalizeKey(secret) as jose.JWK, 'RS256'); + } +}; + +export let JWT = { + sign: async ( + data: any, + opts: { + issuer: string; + audience: string[] | string; + expiresIn?: string | number; + alg: 'HS256' | 'RS256' | 'ES384'; + }, + secret: string | jose.JWK + ) => { + if (!secret) { + throw new Error('Secret is required to sign JWT'); + } + + let jwt = new jose.SignJWT(data) + .setProtectedHeader({ alg: opts.alg }) + .setIssuedAt() + .setIssuer(opts.issuer) + .setAudience(opts.audience); + + if (opts.expiresIn) { + jwt = jwt.setExpirationTime( + typeof opts.expiresIn == 'number' + ? opts.expiresIn + Math.floor(Date.now() / 1000) + : opts.expiresIn + ); + } + + return await jwt.sign((await importKey(secret, opts.alg)) as any); + }, + verify: async ( + jwt: string, + opts: { + issuer?: string[] | string; + audience?: string[] | string; + alg: 'HS256' | 'RS256' | 'ES384'; + }, + secret: string | jose.JWK + ) => { + if (!secret) { + throw new Error('Secret is required to sign JWT'); + } + + let { payload } = await jose.jwtVerify(jwt, (await importKey(secret, opts.alg)) as any, { + issuer: opts.issuer, + audience: opts.audience + }); + + return payload as T & jose.JWTPayload; + }, + decode: (jwt: string) => { + return jose.decodeJwt(jwt) as T & jose.JWTPayload; + } +}; diff --git a/src/_shared/util/jwt/tsconfig.json b/src/_shared/util/jwt/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/jwt/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/memo/package.json b/src/_shared/util/memo/package.json new file mode 100644 index 000000000..93f6e0c22 --- /dev/null +++ b/src/_shared/util/memo/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/memo", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "vitest": "^3.1.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3" + } +} diff --git a/src/_shared/util/memo/src/index.ts b/src/_shared/util/memo/src/index.ts new file mode 100644 index 000000000..ba556f3f1 --- /dev/null +++ b/src/_shared/util/memo/src/index.ts @@ -0,0 +1 @@ +export * from './memo'; diff --git a/src/_shared/util/memo/src/memo.test.ts b/src/_shared/util/memo/src/memo.test.ts new file mode 100644 index 000000000..27e0bd9bb --- /dev/null +++ b/src/_shared/util/memo/src/memo.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, test, vi } from 'vitest'; +import { memo } from './memo'; + +describe('memo function', () => { + test('should memoize function calls', () => { + let testFunction = vi.fn((x: number, y: number) => x + y); + + let memoizedFunction = memo(testFunction); + + let result1 = memoizedFunction(2, 3); + let result2 = memoizedFunction(2, 3); + + expect(testFunction).toHaveBeenCalledTimes(1); + + expect(result1).toEqual(5); + expect(result2).toEqual(5); + }); + + test('should memoize function calls with different arguments', () => { + let testFunction = vi.fn((x: number, y: number) => x + y); + + let memoizedFunction = memo(testFunction); + + let result1 = memoizedFunction(2, 3); + let result2 = memoizedFunction(4, 5); + + expect(testFunction).toHaveBeenCalledTimes(2); + + expect(result1).toEqual(5); + expect(result2).toEqual(9); + }); + + test('should support memoization for functions with different argument types', () => { + let testFunction = vi.fn( + (x: string | number, y: string | number) => x.toString() + y.toString() + ); + + let memoizedFunction = memo(testFunction); + + let result1 = memoizedFunction(1, '1'); + let result2 = memoizedFunction('1', 1); + let result3 = memoizedFunction('1', '1'); + let result4 = memoizedFunction(1, 1); + + expect(testFunction).toHaveBeenCalledTimes(4); + + expect(result1).toEqual('11'); + expect(result2).toEqual('11'); + expect(result3).toEqual('11'); + expect(result4).toEqual('11'); + }); +}); diff --git a/src/_shared/util/memo/src/memo.ts b/src/_shared/util/memo/src/memo.ts new file mode 100644 index 000000000..b434ee8ba --- /dev/null +++ b/src/_shared/util/memo/src/memo.ts @@ -0,0 +1,23 @@ +export let memo = any>(func: Func) => { + let cache: { + args: Parameters; + result: ReturnType; + }[] = []; + + return (...args: Parameters): ReturnType => { + let cached = cache.find(c => c.args.every((arg, i) => arg === args[i])); + + if (cached) { + return cached.result; + } else { + let result = func(...args); + + cache.push({ + args, + result + }); + + return result; + } + }; +}; diff --git a/src/_shared/util/memo/tsconfig.json b/src/_shared/util/memo/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/memo/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/merge/package.json b/src/_shared/util/merge/package.json new file mode 100644 index 000000000..9d388588a --- /dev/null +++ b/src/_shared/util/merge/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/merge", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/merge/src/index.ts b/src/_shared/util/merge/src/index.ts new file mode 100644 index 000000000..38f297684 --- /dev/null +++ b/src/_shared/util/merge/src/index.ts @@ -0,0 +1 @@ +export * from './merge'; diff --git a/src/_shared/util/merge/src/merge.test.ts b/src/_shared/util/merge/src/merge.test.ts new file mode 100644 index 000000000..81b93c46d --- /dev/null +++ b/src/_shared/util/merge/src/merge.test.ts @@ -0,0 +1,55 @@ +import { describe, expect, test } from 'vitest'; +import { merge } from './merge'; + +describe('merge', () => { + test('merges objects recursively', () => { + let target = { a: 1, b: 2 }; + let source = { b: 3, c: 4 }; + + expect(merge(target, source)).toEqual({ + a: 1, + b: 3, + c: 4 + }); + }); + + test('overrides values in target with source values', () => { + let target = { a: 1, b: 2 }; + let source = { a: 3 }; + + expect(merge(target, source)).toEqual({ + a: 3, + b: 2 + }); + }); + + test('handles multiple sources', () => { + let target = { a: 1 }; + let source1 = { b: 2 }; + let source2 = { c: 3 }; + + expect(merge(target, source1, source2)).toEqual({ + a: 1, + b: 2, + c: 3 + }); + }); + + test('works with nested objects', () => { + let target = { a: { b: 1 } }; + let source = { a: { c: 2 } }; + + expect(merge(target, source)).toEqual({ + a: { + b: 1, + c: 2 + } + }); + }); + + test('does not mutate target', () => { + let target = { a: 1 }; + merge(target, { b: 2 }); + expect(target).toEqual({ a: 1, b: 2 }); + }); +}); diff --git a/src/_shared/util/merge/src/merge.ts b/src/_shared/util/merge/src/merge.ts new file mode 100644 index 000000000..46021e793 --- /dev/null +++ b/src/_shared/util/merge/src/merge.ts @@ -0,0 +1,22 @@ +export let merge = (target: any, ...sources: any[]): any => { + if (!sources.length) return target; + + let source = sources.shift(); + + if (isObject(target) && isObject(source)) { + for (let key in source) { + if (isObject(source[key])) { + if (!target[key]) Object.assign(target, { [key]: {} }); + merge(target[key], source[key]); + } else { + Object.assign(target, { [key]: source[key] }); + } + } + } + + return merge(target, ...sources); +}; + +export let isObject = (item: any) => { + return item && typeof item === 'object' && !Array.isArray(item); +}; diff --git a/src/_shared/util/merge/tsconfig.json b/src/_shared/util/merge/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/merge/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/murmur3/package.json b/src/_shared/util/murmur3/package.json new file mode 100644 index 000000000..fa113d9f0 --- /dev/null +++ b/src/_shared/util/murmur3/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/murmur3", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/murmur3/src/index.ts b/src/_shared/util/murmur3/src/index.ts new file mode 100644 index 000000000..f6ecb0db7 --- /dev/null +++ b/src/_shared/util/murmur3/src/index.ts @@ -0,0 +1 @@ +export * from './murmur3'; diff --git a/src/_shared/util/murmur3/src/murmur3.test.ts b/src/_shared/util/murmur3/src/murmur3.test.ts new file mode 100644 index 000000000..1f8ce2ce6 --- /dev/null +++ b/src/_shared/util/murmur3/src/murmur3.test.ts @@ -0,0 +1,50 @@ +import { describe, expect, it } from 'vitest'; +import { murmur3_32 } from './murmur3'; + +describe('murmur3_32', () => { + it('returns 0 for empty string with default seed', () => { + expect(murmur3_32('')).toBe(0); + }); + + it('returns correct hash for known input with default seed', () => { + expect(murmur3_32('foo')).toBe(4138058784); + expect(murmur3_32('bar')).toBe(1158584717); + expect(murmur3_32('baz')).toBe(4050152682); + expect(murmur3_32('The quick brown fox jumps over the lazy dog')).toBe(776992547); + }); + + it('returns correct hash for known input with custom seed', () => { + expect(murmur3_32('foo', 42)).toBe(2972666014); + expect(murmur3_32('bar', 1234)).toBe(1767229408); + expect(murmur3_32('baz', 999)).toBe(1947074607); + }); + + it('produces different hashes for different strings', () => { + const hash1 = murmur3_32('hello'); + const hash2 = murmur3_32('world'); + expect(hash1).not.toBe(hash2); + }); + + it('produces different hashes for different seeds', () => { + const str = 'seeded'; + const hash1 = murmur3_32(str, 1); + const hash2 = murmur3_32(str, 2); + expect(hash1).not.toBe(hash2); + }); + + it('returns a 32-bit unsigned integer', () => { + const hash = murmur3_32('test'); + expect(hash).toBeGreaterThanOrEqual(0); + expect(hash).toBeLessThanOrEqual(0xffffffff); + }); + + it('handles unicode characters', () => { + expect(murmur3_32('你好')).toBe(3865246988); + expect(murmur3_32('😀😃😄😁')).toBe(3773368581); + }); + + it('handles long strings', () => { + const longStr = 'a'.repeat(1000); + expect(typeof murmur3_32(longStr)).toBe('number'); + }); +}); diff --git a/src/_shared/util/murmur3/src/murmur3.ts b/src/_shared/util/murmur3/src/murmur3.ts new file mode 100644 index 000000000..593785d5e --- /dev/null +++ b/src/_shared/util/murmur3/src/murmur3.ts @@ -0,0 +1,53 @@ +export let murmur3_32 = (key: string, seed: number = 0): number => { + let remainder = key.length & 3; // key.length % 4 + let bytes = key.length - remainder; + let h1 = seed; + let c1 = 0xcc9e2d51; + let c2 = 0x1b873593; + let i = 0; + + while (i < bytes) { + let k1 = + (key.charCodeAt(i) & 0xff) | + ((key.charCodeAt(i + 1) & 0xff) << 8) | + ((key.charCodeAt(i + 2) & 0xff) << 16) | + ((key.charCodeAt(i + 3) & 0xff) << 24); + + i += 4; + + k1 = Math.imul(k1, c1); + k1 = (k1 << 15) | (k1 >>> 17); + k1 = Math.imul(k1, c2); + + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1 = Math.imul(h1, 5) + 0xe6546b64; + } + + let k1 = 0; + + switch (remainder) { + case 3: + k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16; + // fall through + case 2: + k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8; + // fall through + case 1: + k1 ^= key.charCodeAt(i) & 0xff; + k1 = Math.imul(k1, c1); + k1 = (k1 << 15) | (k1 >>> 17); + k1 = Math.imul(k1, c2); + h1 ^= k1; + } + + h1 ^= key.length; + + h1 ^= h1 >>> 16; + h1 = Math.imul(h1, 0x85ebca6b); + h1 ^= h1 >>> 13; + h1 = Math.imul(h1, 0xc2b2ae35); + h1 ^= h1 >>> 16; + + return h1 >>> 0; // Convert to unsigned +}; diff --git a/src/_shared/util/murmur3/tsconfig.json b/src/_shared/util/murmur3/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/murmur3/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/normalize-email/package.json b/src/_shared/util/normalize-email/package.json new file mode 100644 index 000000000..89606894d --- /dev/null +++ b/src/_shared/util/normalize-email/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/normalize-email", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/normalize-email/src/index.ts b/src/_shared/util/normalize-email/src/index.ts new file mode 100644 index 000000000..03d7d87e6 --- /dev/null +++ b/src/_shared/util/normalize-email/src/index.ts @@ -0,0 +1 @@ +export * from './normalizeEmail'; diff --git a/src/_shared/util/normalize-email/src/normalizeEmail.test.ts b/src/_shared/util/normalize-email/src/normalizeEmail.test.ts new file mode 100644 index 000000000..2f6803633 --- /dev/null +++ b/src/_shared/util/normalize-email/src/normalizeEmail.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, it } from 'vitest'; +import { normalizeEmail } from './normalizeEmail'; + +describe('normalizeEmail', () => { + it('should normalize a lowercase email with no dots or plus signs', () => { + const email = 'test@example.com'; + const normalizedEmail = normalizeEmail(email); + expect(normalizedEmail).toBe('test@example.com'); + }); + + it('should not normalize a lowercase email with dots', () => { + const email = 'test.first.last@example.com'; + const normalizedEmail = normalizeEmail(email); + expect(normalizedEmail).toBe('test.first.last@example.com'); + }); + + it('should normalize a lowercase email with plus sign', () => { + const email = 'test+extra@example.com'; + const normalizedEmail = normalizeEmail(email); + expect(normalizedEmail).toBe('test@example.com'); + }); + + it('should normalize a lowercase email with googlemail.com domain', () => { + const email = 'test@googlemail.com'; + const normalizedEmail = normalizeEmail(email); + expect(normalizedEmail).toBe('test@gmail.com'); + }); + + it('should normalize a lowercase email with gmail.com domain', () => { + const email = 'test.first.last@gmail.com'; + const normalizedEmail = normalizeEmail(email); + expect(normalizedEmail).toBe('testfirstlast@gmail.com'); + }); + + it('should normalize an uppercase email with no dots or plus signs', () => { + const email = 'TEST@gMail.COM'; + const normalizedEmail = normalizeEmail(email); + expect(normalizedEmail).toBe('test@gmail.com'); + }); +}); diff --git a/src/_shared/util/normalize-email/src/normalizeEmail.ts b/src/_shared/util/normalize-email/src/normalizeEmail.ts new file mode 100644 index 000000000..c6a167d0b --- /dev/null +++ b/src/_shared/util/normalize-email/src/normalizeEmail.ts @@ -0,0 +1,16 @@ +export let normalizeEmail = (email: string) => { + email = email.toLowerCase().trim(); + + let [local, domain] = email.split('@'); + + if (domain === 'googlemail.com') domain = 'gmail.com'; + + if (domain == 'gmail.com') { + // gmail ignores dots in email addresses: https://gmail.googleblog.com/2008/03/2-hidden-ways-to-get-more-from-your.html + local = local.replaceAll('.', ''); + } + + local = local.split('+')[0]; + + return `${local}@${domain}`; +}; diff --git a/src/_shared/util/normalize-email/tsconfig.json b/src/_shared/util/normalize-email/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/normalize-email/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/once/package.json b/src/_shared/util/once/package.json new file mode 100644 index 000000000..b772116ad --- /dev/null +++ b/src/_shared/util/once/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/once", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/once/src/index.ts b/src/_shared/util/once/src/index.ts new file mode 100644 index 000000000..30a15b83a --- /dev/null +++ b/src/_shared/util/once/src/index.ts @@ -0,0 +1 @@ +export * from './once'; diff --git a/src/_shared/util/once/src/once.test.ts b/src/_shared/util/once/src/once.test.ts new file mode 100644 index 000000000..215a4dcdb --- /dev/null +++ b/src/_shared/util/once/src/once.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, it, vi } from 'vitest'; +import { once } from './once'; + +describe('once', () => { + it('calls the original function only once', () => { + const fn = vi.fn(() => 42); + const wrapped = once(fn); + + expect(fn).toHaveBeenCalledTimes(0); + expect(wrapped()).toBe(42); + expect(fn).toHaveBeenCalledTimes(1); + expect(wrapped()).toBe(42); + expect(fn).toHaveBeenCalledTimes(1); + expect(wrapped()).toBe(42); + expect(fn).toHaveBeenCalledTimes(1); + }); + + it('forwards arguments to the original function', () => { + const fn = vi.fn(() => 5); + const wrapped = once(fn); + + expect(wrapped()).toBe(5); + expect(fn).toHaveBeenCalledTimes(1); + }); + + it('returns the exact same reference on subsequent calls', () => { + const obj = { value: Math.random() }; + const fn = vi.fn(() => obj); + const wrapped = once(fn); + + const first = wrapped(); + const second = wrapped(); + expect(first).toBe(obj); + expect(second).toBe(obj); + expect(first).toBe(second); + expect(fn).toHaveBeenCalledTimes(1); + }); + + it('if the wrapped function throws on first call, it is not called again (subsequent calls return undefined)', () => { + const fn = vi.fn(() => { + throw new Error('boom'); + }); + const wrapped = once(fn); + + expect(() => wrapped()).toThrow('boom'); + // implementation marks called = true before invoking fn, so it won't be called again + expect(fn).toHaveBeenCalledTimes(1); + // subsequent call returns the cached result (which is undefined because the first call threw) + expect(wrapped()).toBeUndefined(); + expect(fn).toHaveBeenCalledTimes(1); + }); +}); diff --git a/src/_shared/util/once/src/once.ts b/src/_shared/util/once/src/once.ts new file mode 100644 index 000000000..380f4250a --- /dev/null +++ b/src/_shared/util/once/src/once.ts @@ -0,0 +1,13 @@ +export let once = (fn: () => Res): (() => Res) => { + let called = false; + let result: Res; + + return (): Res => { + if (!called) { + called = true; + result = fn(); + } + + return result; + }; +}; diff --git a/src/_shared/util/once/tsconfig.json b/src/_shared/util/once/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/once/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/programmable-promise/.gitignore b/src/_shared/util/programmable-promise/.gitignore new file mode 100644 index 000000000..a14702c40 --- /dev/null +++ b/src/_shared/util/programmable-promise/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/src/_shared/util/programmable-promise/package.json b/src/_shared/util/programmable-promise/package.json new file mode 100644 index 000000000..c4fcd69a6 --- /dev/null +++ b/src/_shared/util/programmable-promise/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/programmable-promise", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/programmable-promise/src/index.test.ts b/src/_shared/util/programmable-promise/src/index.test.ts new file mode 100644 index 000000000..6cdcddf3b --- /dev/null +++ b/src/_shared/util/programmable-promise/src/index.test.ts @@ -0,0 +1,32 @@ +import { describe, expect, it } from 'vitest'; +import { ProgrammablePromise } from './index'; + +describe('ProgrammablePromise', () => { + it('should resolve with the provided value', async () => { + const promise = new ProgrammablePromise(); + promise.resolve(42); + const result = await promise.promise; + expect(result).toBe(42); + expect(promise.value).toBe(42); + }); + + it('should reject with the provided reason', async () => { + const promise = new ProgrammablePromise(); + const error = new Error('Test error'); + promise.reject(error); + + await expect(promise.promise).rejects.toThrow('Test error'); + }); + + it('should allow accessing the resolved value after resolution', async () => { + const promise = new ProgrammablePromise(); + promise.resolve('Hello, world!'); + await promise.promise; + expect(promise.value).toBe('Hello, world!'); + }); + + it('should not have a value before resolution', () => { + const promise = new ProgrammablePromise(); + expect(promise.value).toBeUndefined(); + }); +}); diff --git a/src/_shared/util/programmable-promise/src/index.ts b/src/_shared/util/programmable-promise/src/index.ts new file mode 100644 index 000000000..142bd421e --- /dev/null +++ b/src/_shared/util/programmable-promise/src/index.ts @@ -0,0 +1,30 @@ +export class ProgrammablePromise { + private _resolve!: (value: T | PromiseLike) => void; + private _reject!: (reason?: any) => void; + private _promise: Promise; + private _value!: T; + + constructor() { + this._promise = new Promise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + }); + } + + get promise() { + return this._promise; + } + + resolve(value: T | PromiseLike) { + this._resolve(value); + this._value = value as T; + } + + get reject() { + return this._reject; + } + + get value() { + return this._value; + } +} diff --git a/src/_shared/util/programmable-promise/tsconfig.json b/src/_shared/util/programmable-promise/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/programmable-promise/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/proxy/package.json b/src/_shared/util/proxy/package.json new file mode 100644 index 000000000..58707dbae --- /dev/null +++ b/src/_shared/util/proxy/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/proxy", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "vitest": "^3.1.2", + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3" + } +} diff --git a/src/_shared/util/proxy/src/index.ts b/src/_shared/util/proxy/src/index.ts new file mode 100644 index 000000000..9bcd86890 --- /dev/null +++ b/src/_shared/util/proxy/src/index.ts @@ -0,0 +1 @@ +export * from './proxy'; diff --git a/src/_shared/util/proxy/src/proxy.test.ts b/src/_shared/util/proxy/src/proxy.test.ts new file mode 100644 index 000000000..26d0a3bb4 --- /dev/null +++ b/src/_shared/util/proxy/src/proxy.test.ts @@ -0,0 +1,41 @@ +import { describe, expect, it, vitest } from 'vitest'; +import { proxy } from './proxy'; + +describe('proxy', () => { + it('should throw an error if root controller is called', async () => { + const cb = vitest.fn(); + const client = proxy(cb); + + expect(() => client()).toThrowError('Cannot call root controller'); + expect(cb).not.toHaveBeenCalled(); + }); + + it('should call the provided callback with the correct path and options', async () => { + const cb = vitest.fn(); + const client = proxy(cb); + + await client.some.path({ foo: 'bar' }); + + expect(cb).toHaveBeenCalledWith(['some', 'path'], { foo: 'bar' }); + }); + + it('should return a client with the correct path when a property is accessed', async () => { + const cb = vitest.fn(); + const client = proxy(cb); + + const subClient = client.some.path; + + expect(subClient).toBeInstanceOf(Function); + expect(subClient.toString()).toBe('Client(some.path)'); + }); + + it('should return a client with the correct path when a nested property is accessed', async () => { + const cb = vitest.fn(); + const client = proxy(cb); + + const subClient = client.some.path.to.nested.property; + + expect(subClient).toBeInstanceOf(Function); + expect(subClient.toString()).toBe('Client(some.path.to.nested.property)'); + }); +}); diff --git a/src/_shared/util/proxy/src/proxy.ts b/src/_shared/util/proxy/src/proxy.ts new file mode 100644 index 000000000..2942546bb --- /dev/null +++ b/src/_shared/util/proxy/src/proxy.ts @@ -0,0 +1,18 @@ +export let proxy = ( + cb: (path: string[], ...args: any[]) => Promise +): T => { + let proxy: any = (path: string[]) => + new Proxy((() => {}) as any, { + get: (target, prop: string) => { + if (prop == 'toString') return () => `Client(${path.join('.')})`; + return proxy([...path, prop]); + }, + apply: (target, thisArg, args: any[]) => { + if (path.length == 0) throw new Error('Cannot call root controller'); + + return cb(path, ...args); + } + }); + + return proxy([]); +}; diff --git a/src/_shared/util/proxy/tsconfig.json b/src/_shared/util/proxy/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/proxy/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/random-from-array/.gitignore b/src/_shared/util/random-from-array/.gitignore new file mode 100644 index 000000000..a14702c40 --- /dev/null +++ b/src/_shared/util/random-from-array/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/src/_shared/util/random-from-array/package.json b/src/_shared/util/random-from-array/package.json new file mode 100644 index 000000000..068a49f6f --- /dev/null +++ b/src/_shared/util/random-from-array/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/random-from-array", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/random-from-array/src/index.test.ts b/src/_shared/util/random-from-array/src/index.test.ts new file mode 100644 index 000000000..252d9ec49 --- /dev/null +++ b/src/_shared/util/random-from-array/src/index.test.ts @@ -0,0 +1,34 @@ +import { describe, expect, it } from 'vitest'; +import { randomFromArray } from './index'; + +describe('randomFromArray', () => { + it('should return null for an empty array', () => { + const input: number[] = []; + const output = randomFromArray(input); + expect(output).toBeNull(); + }); + + it('should return an element from the array', () => { + const input = [1, 2, 3, 4, 5]; + const output = randomFromArray(input); + expect(input).toContain(output); + }); + + it('should work with strings', () => { + const input = ['a', 'b', 'c', 'd']; + const output = randomFromArray(input); + expect(input).toContain(output); + }); + + it('should work with mixed types', () => { + const input = [1, 'a', true, null]; + const output = randomFromArray(input); + expect(input).toContain(output); + }); + + it('should return the only element if the array has one element', () => { + const input = [42]; + const output = randomFromArray(input); + expect(output).toBe(42); + }); +}); diff --git a/src/_shared/util/random-from-array/src/index.ts b/src/_shared/util/random-from-array/src/index.ts new file mode 100644 index 000000000..2de318e56 --- /dev/null +++ b/src/_shared/util/random-from-array/src/index.ts @@ -0,0 +1,6 @@ +export let randomFromArray = (array: T[]): T | null => { + if (array.length === 0) return null; + + let randomIndex = Math.floor(Math.random() * array.length); + return array[randomIndex]; +}; diff --git a/src/_shared/util/random-from-array/tsconfig.json b/src/_shared/util/random-from-array/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/random-from-array/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/random-number/package.json b/src/_shared/util/random-number/package.json new file mode 100644 index 000000000..9b65c75a2 --- /dev/null +++ b/src/_shared/util/random-number/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/random-number", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/random-number/src/index.ts b/src/_shared/util/random-number/src/index.ts new file mode 100644 index 000000000..7a95ef133 --- /dev/null +++ b/src/_shared/util/random-number/src/index.ts @@ -0,0 +1 @@ +export * from './randomNumber'; diff --git a/src/_shared/util/random-number/src/randomNumber.test.ts b/src/_shared/util/random-number/src/randomNumber.test.ts new file mode 100644 index 000000000..b6d30a169 --- /dev/null +++ b/src/_shared/util/random-number/src/randomNumber.test.ts @@ -0,0 +1,33 @@ +import { describe, expect, test } from 'vitest'; +import { randomNumber } from './randomNumber'; + +describe('randomNumber', () => { + test('should return a random number within the specified range', () => { + const min = 1; + const max = 10; + + const result = randomNumber(min, max); + + expect(result).toBeGreaterThanOrEqual(min); + expect(result).toBeLessThanOrEqual(max); + }); + + test('should return the minimum value when min and max are the same', () => { + const min = 5; + const max = 5; + + const result = randomNumber(min, max); + + expect(result).toBe(min); + }); + + test('should return a random number when min and max are negative', () => { + const min = -10; + const max = -1; + + const result = randomNumber(min, max); + + expect(result).toBeGreaterThanOrEqual(min); + expect(result).toBeLessThanOrEqual(max); + }); +}); diff --git a/src/_shared/util/random-number/src/randomNumber.ts b/src/_shared/util/random-number/src/randomNumber.ts new file mode 100644 index 000000000..406beb890 --- /dev/null +++ b/src/_shared/util/random-number/src/randomNumber.ts @@ -0,0 +1,3 @@ +export let randomNumber = (min: number, max: number) => { + return Math.floor(Math.random() * (max - min + 1)) + min; +}; diff --git a/src/_shared/util/random-number/tsconfig.json b/src/_shared/util/random-number/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/random-number/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/sentry/package.json b/src/_shared/util/sentry/package.json new file mode 100644 index 000000000..b33fcd060 --- /dev/null +++ b/src/_shared/util/sentry/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/sentry", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@sentry/core": "^10.32.1" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/sentry/src/index.ts b/src/_shared/util/sentry/src/index.ts new file mode 100644 index 000000000..19dd51091 --- /dev/null +++ b/src/_shared/util/sentry/src/index.ts @@ -0,0 +1,9 @@ +import * as SentryBase from '@sentry/core'; + +let sentryRef = { current: SentryBase }; + +export let setSentry = (sentry: typeof SentryBase) => { + sentryRef.current = sentry; +}; + +export let getSentry = (): typeof SentryBase => sentryRef.current; diff --git a/src/_shared/util/sentry/tsconfig.json b/src/_shared/util/sentry/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/sentry/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/serialize/package.json b/src/_shared/util/serialize/package.json new file mode 100644 index 000000000..107ce5442 --- /dev/null +++ b/src/_shared/util/serialize/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/serialize", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "superjson": "^2.2.5" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/serialize/src/index.ts b/src/_shared/util/serialize/src/index.ts new file mode 100644 index 000000000..7828ade84 --- /dev/null +++ b/src/_shared/util/serialize/src/index.ts @@ -0,0 +1 @@ +export * from './json'; diff --git a/src/_shared/util/serialize/src/json.test.ts b/src/_shared/util/serialize/src/json.test.ts new file mode 100644 index 000000000..efcc17d53 --- /dev/null +++ b/src/_shared/util/serialize/src/json.test.ts @@ -0,0 +1,30 @@ +import { describe, expect, test } from 'vitest'; +import { serialize } from './json'; + +describe('serialize', () => { + test('encode should return encoded data', () => { + let data = { foo: 'bar' }; + let result = serialize.encode(data); + + expect(JSON.parse(result)).toEqual({ + $$TYPES$$: { + __mode: 'object' + }, + value: undefined, + foo: 'bar' + }); + }); + + test('decode should return decoded data', () => { + let data = { + $$TYPES$$: { + __mode: 'object' + }, + value: undefined, + foo: 'bar' + }; + let result = serialize.decode(data); + + expect(result).toEqual({ foo: 'bar' }); + }); +}); diff --git a/src/_shared/util/serialize/src/json.ts b/src/_shared/util/serialize/src/json.ts new file mode 100644 index 000000000..9de52d616 --- /dev/null +++ b/src/_shared/util/serialize/src/json.ts @@ -0,0 +1,38 @@ +// @ts-ignore +import SuperJSON from 'superjson'; + +export let serialize = { + encode: (data: any) => { + let sup = SuperJSON.serialize(data); + + if (sup.meta?.referentialEqualities) { + delete sup.meta.referentialEqualities; + } + + return JSON.stringify({ + $$TYPES$$: { + __mode: typeof sup.json == 'object' ? 'object' : 'value', + ...sup.meta + }, + + data: typeof sup.json != 'object' ? sup.json : undefined, + + ...(typeof sup.json == 'object' ? sup.json : {}) + }); + }, + + decode: (data: any) => { + if (typeof data == 'string') data = JSON.parse(data); + + if (typeof data != 'object') return data; + + let { $$TYPES$$, ...rest } = data; + + if (typeof $$TYPES$$ != 'object' || !$$TYPES$$.__mode) return data; + + let { __mode, ...meta } = $$TYPES$$; + let json = __mode == 'value' ? rest.data : rest; + + return SuperJSON.deserialize({ json, meta }); + } +}; diff --git a/src/_shared/util/serialize/tsconfig.json b/src/_shared/util/serialize/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/serialize/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/shadow-id/package.json b/src/_shared/util/shadow-id/package.json new file mode 100644 index 000000000..6a354616f --- /dev/null +++ b/src/_shared/util/shadow-id/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/shadow-id", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/base62": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/shadow-id/src/index.ts b/src/_shared/util/shadow-id/src/index.ts new file mode 100644 index 000000000..6579ecef2 --- /dev/null +++ b/src/_shared/util/shadow-id/src/index.ts @@ -0,0 +1,15 @@ +import { base62 } from '@mtsrc/base62'; +import { createHash } from 'crypto'; + +export let shadowId = ( + prefix: string, + otherIds: string[], + otherStrings: (string | number | bigint | Date)[] = [] +) => { + let time = otherIds[0]?.split('_')[1]?.substring(0, 9) ?? ''; + let value = prefix + otherIds.join('') + otherStrings.join(''); + + let hash = createHash('sha256').update(value).digest(); + + return prefix + time + base62.encode(hash).slice(0, time.length ? 11 : 20); +}; diff --git a/src/_shared/util/shadow-id/tsconfig.json b/src/_shared/util/shadow-id/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/shadow-id/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/sign/package.json b/src/_shared/util/sign/package.json new file mode 100644 index 000000000..4b235283f --- /dev/null +++ b/src/_shared/util/sign/package.json @@ -0,0 +1,19 @@ +{ + "name": "@mtsrc/sign", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/base62": "1.0.0", + "@mtsrc/id": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/sign/src/index.ts b/src/_shared/util/sign/src/index.ts new file mode 100644 index 000000000..4baa8dbe5 --- /dev/null +++ b/src/_shared/util/sign/src/index.ts @@ -0,0 +1 @@ +export * from './sign'; diff --git a/src/_shared/util/sign/src/sign.test.ts b/src/_shared/util/sign/src/sign.test.ts new file mode 100644 index 000000000..4ab336ee0 --- /dev/null +++ b/src/_shared/util/sign/src/sign.test.ts @@ -0,0 +1,87 @@ +import { describe, expect, test } from 'vitest'; +import { signature } from './sign'; + +describe('sign', () => { + test('sign + verify', async () => { + let key = 'Luw6icRYtGAiWuWp3Qen'; + let data = 'test'; + + let sign = await signature({ prefix: 'abc_', expirationMs: 1000, key }).sign({ + data + }); + + expect( + await signature({ prefix: 'abc_', expirationMs: 1000, key }).verify({ + data, + signature: sign + }) + ).toBeTruthy(); + }); + + test('expired', async () => { + let key = 'Luw6icRYtGAiWuWp3Qen'; + let data = 'test'; + + let sign = await signature({ prefix: 'abc_', expirationMs: 1000, key }).sign({ + data + }); + + expect( + await signature({ prefix: 'abc_', expirationMs: 1000, key }).verify({ + data, + signature: sign + }) + ).toBeTruthy(); + + await new Promise(resolve => setTimeout(resolve, 1000 * 2)); + + expect( + await signature({ prefix: 'abc_', expirationMs: 1000, key }).verify({ + data, + signature: sign + }) + ).toBeFalsy(); + }, 10_000); + + test('acceptExpired', async () => { + let key = 'Luw6icRYtGAiWuWp3Qen'; + let data = 'test'; + + let sign = await signature({ prefix: 'abc_', expirationMs: 1000, key }).sign({ + data + }); + + expect( + await signature({ prefix: 'abc_', expirationMs: 1000, key }).verify({ + data, + signature: sign + }) + ).toBeTruthy(); + + await new Promise(resolve => setTimeout(resolve, 1000 * 2)); + + expect( + await signature({ prefix: 'abc_', expirationMs: 1000, key }).verify({ + data, + signature: sign, + acceptExpired: true + }) + ).toBeTruthy(); + expect( + await signature({ prefix: 'abc_', expirationMs: 1000, key }).verify({ + data, + signature: sign + }) + ).toBeFalsy(); + }, 10_000); + + test('start with prefix', async () => { + let key = 'Luw6icRYtGAiWuWp3Qen'; + let data = 'test'; + + let sign = await signature({ prefix: 'abc_', expirationMs: 1000, key }).sign({ + data + }); + expect(sign.startsWith('abc_')).toBeTruthy(); + }); +}); diff --git a/src/_shared/util/sign/src/sign.ts b/src/_shared/util/sign/src/sign.ts new file mode 100644 index 000000000..673b6ae75 --- /dev/null +++ b/src/_shared/util/sign/src/sign.ts @@ -0,0 +1,90 @@ +import { base62 } from '@mtsrc/base62'; +import { generatePlainId } from '@mtsrc/id'; + +let importedKeys = new Map(); +let importKey = async (keyStr: string) => { + if (importedKeys.has(keyStr)) return importedKeys.get(keyStr)!; + + let encoder = new TextEncoder(); + let secretKeyData = encoder.encode(keyStr); + let ck = await crypto.subtle.importKey( + 'raw', + secretKeyData, + { name: 'HMAC', hash: 'SHA-512' }, + true, + ['sign', 'verify'] + ); + + importedKeys.set(keyStr, ck); + + return ck; +}; + +let exp = { + stringify: (expiry: number) => expiry.toString(36), + parse: (expiry: string) => parseInt(expiry, 36) +}; + +let encode = (data: string) => new TextEncoder().encode(data); + +export let signature = (opts: { prefix: string; expirationMs: number; key: string }) => ({ + sign: async ({ + data, + expirationMs = opts.expirationMs + }: { + data: string; + + expirationMs?: number; + }) => { + let key = await importKey(opts.key); + let expiry = Date.now() + expirationMs; + + let id = generatePlainId(10); + + let dataToAuthenticate = JSON.stringify([id, data, expiry]); + let signature = await crypto.subtle.sign('HMAC', key, encode(dataToAuthenticate)); + + let hmac = base62.encode(new Uint8Array(signature)); + + return `${opts.prefix}${hmac}_${exp.stringify(expiry)}_${id}`; + }, + + verify: async ({ + data, + signature, + acceptExpired = false + }: { + data: string; + signature: string; + acceptExpired?: boolean; + }) => { + let key = await importKey(opts.key); + + let sigStr = signature.slice(opts.prefix.length); + let [encodedHmac, expiry, id] = sigStr.split('_'); + + let hmac = base62.decodeRaw(encodedHmac); + + let dataToAuthenticate = JSON.stringify([id, data, exp.parse(expiry)]); + + let isValid = await crypto.subtle.verify('HMAC', key, hmac, encode(dataToAuthenticate)); + + if (!isValid) return false; + if (acceptExpired) return true; + + return Date.now() < exp.parse(expiry); + } +}); + +export let signatureBasic = { + sign: async (data: string, key: string) => { + let signature = await crypto.subtle.sign('HMAC', await importKey(key), encode(data)); + let hmac = base62.encode(new Uint8Array(signature)); + return hmac; + }, + + verify: async (data: string, signature: string, key: string) => { + let hmac = base62.decodeRaw(signature); + return crypto.subtle.verify('HMAC', await importKey(key), hmac, encode(data)); + } +}; diff --git a/src/_shared/util/sign/tsconfig.json b/src/_shared/util/sign/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/sign/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/slugify/package.json b/src/_shared/util/slugify/package.json new file mode 100644 index 000000000..5511ac9ab --- /dev/null +++ b/src/_shared/util/slugify/package.json @@ -0,0 +1,19 @@ +{ + "name": "@mtsrc/slugify", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/id": "1.0.0", + "slugify": "^1.6.6" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/slugify/src/index.ts b/src/_shared/util/slugify/src/index.ts new file mode 100644 index 000000000..deb072bb9 --- /dev/null +++ b/src/_shared/util/slugify/src/index.ts @@ -0,0 +1,61 @@ +import { generateCode, generatePlainId } from '@mtsrc/id'; +import _slugify from 'slugify'; + +export let slugify = (slug: string) => + _slugify(slug, { + lower: true, + strict: true, + replacement: '-', + remove: /[*+~.()'"!:@]/g + }); + +export let createSlugGenerator = + (cb: (slug: string, opts: Opts) => Promise) => + async (d: { input: string; current?: string }, opts: Opts) => { + let slug = slugify(d.input); + + if (slug.length < 5) { + slug += generateCode(5 - slug.length); + } + + for (let i = 0; i < 10; i++) { + if (d.current && slug == d.current) return slug; + + let ok = false; + + try { + ok = await cb(slug, opts); + } catch (e) {} + + if (ok) return slug; + + slug = `${slug}${i == 0 ? '-' : ''}${generateCode(2)}`; + } + + slug = generatePlainId(20); + return slug; + }; + +export let createShortIdGenerator = + (cb: (id: string, opts: Opts) => Promise, d?: { length?: number }) => + async (opts: Opts) => { + let length = d?.length ?? 6; + + let id = generatePlainId(length).toLowerCase(); + + for (let i = 0; i < 10; i++) { + let ok = false; + + try { + ok = await cb(id, opts); + } catch (e) {} + + if (ok) return id; + + id = generatePlainId(length).toLowerCase(); + } + + id = generatePlainId(20).toLowerCase(); + + return id; + }; diff --git a/src/_shared/util/slugify/tsconfig.json b/src/_shared/util/slugify/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/slugify/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/snowflake/package.json b/src/_shared/util/snowflake/package.json new file mode 100644 index 000000000..3e49a2052 --- /dev/null +++ b/src/_shared/util/snowflake/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/snowflake", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/snowflake/src/index.ts b/src/_shared/util/snowflake/src/index.ts new file mode 100644 index 000000000..1e7f2093f --- /dev/null +++ b/src/_shared/util/snowflake/src/index.ts @@ -0,0 +1 @@ +export * from './snowflake'; diff --git a/src/_shared/util/snowflake/src/snowflake.ts b/src/_shared/util/snowflake/src/snowflake.ts new file mode 100644 index 000000000..29a9d3e30 --- /dev/null +++ b/src/_shared/util/snowflake/src/snowflake.ts @@ -0,0 +1,140 @@ +type Num = bigint | number; + +interface SnowflakeGeneratorOptions { + workerId: Num; + datacenterId: Num; + epoch?: Date; + workerIdBits?: Num; + datacenterIdBits?: Num; + initialSequence?: Num; + sequenceBits?: Num; +} + +export class Snowflake { + private customEpoch: bigint; + private workerIdBitLength: bigint; + private datacenterIdBitLength: bigint; + private sequenceBitLength: bigint; + + private workerId: bigint; + private datacenterId: bigint; + + private maxWorkerId: bigint; + private maxDatacenterId: bigint; + + private currentSequence: bigint; + private sequenceBitmask: bigint; + private lastGeneratedTimestamp: bigint = -1n; + + private workerIdBitShift: bigint; + private datacenterIdBitShift: bigint; + private timestampBitShift: bigint; + + constructor(options?: SnowflakeGeneratorOptions) { + this.customEpoch = BigInt(options?.epoch ? options.epoch.getTime() : 1609459200000); + + this.workerIdBitLength = BigInt(options?.workerIdBits ?? 5); + this.datacenterIdBitLength = BigInt(options?.datacenterIdBits ?? 5); + this.sequenceBitLength = BigInt(options?.sequenceBits ?? 12); + + this.maxWorkerId = this.calculateMaxValue(this.workerIdBitLength); + this.maxDatacenterId = this.calculateMaxValue(this.datacenterIdBitLength); + this.sequenceBitmask = this.calculateMaxValue(this.sequenceBitLength); + + this.workerId = BigInt(options?.workerId ?? 0n); + this.validateId(this.workerId, this.maxWorkerId, 'worker', this.workerIdBitLength); + + this.datacenterId = BigInt(options?.datacenterId ?? 0n); + this.validateId( + this.datacenterId, + this.maxDatacenterId, + 'datacenter', + this.datacenterIdBitLength + ); + + this.currentSequence = BigInt(options?.initialSequence ?? 0); + + this.workerIdBitShift = this.sequenceBitLength; + this.datacenterIdBitShift = this.sequenceBitLength + this.workerIdBitLength; + this.timestampBitShift = + this.sequenceBitLength + this.workerIdBitLength + this.datacenterIdBitLength; + } + + nextId(): bigint { + let currentTimestamp = Snowflake.now(); + + this.validateTimestamp(currentTimestamp); + + if (this.isWithinSameMillisecond(currentTimestamp)) { + this.incrementSequence(); + + if (this.hasSequenceOverflowed()) { + currentTimestamp = this.waitForNextMillisecond(this.lastGeneratedTimestamp); + } + } else { + this.resetSequence(); + } + + this.lastGeneratedTimestamp = currentTimestamp; + + return this.composeSnowflakeId(currentTimestamp); + } + + private calculateMaxValue(bitLength: bigint): bigint { + return -1n ^ (-1n << bitLength); + } + + private validateId(id: bigint, maxId: bigint, idType: string, bitLength: bigint): void { + if (id < 0 || id > maxId) { + throw new Error(`With ${bitLength} bits, ${idType} id must be between 0 and ${maxId}`); + } + } + + private validateTimestamp(currentTimestamp: bigint): void { + if (currentTimestamp < this.lastGeneratedTimestamp) { + let timeDrift = this.lastGeneratedTimestamp - currentTimestamp; + throw new Error( + `Clock moved backwards. Cannot generate new ID for ${timeDrift} milliseconds.` + ); + } + } + + private isWithinSameMillisecond(timestamp: bigint): boolean { + return timestamp === this.lastGeneratedTimestamp; + } + + private incrementSequence(): void { + this.currentSequence = (this.currentSequence + 1n) & this.sequenceBitmask; + } + + private hasSequenceOverflowed(): boolean { + return this.currentSequence === 0n; + } + + private resetSequence(): void { + this.currentSequence = 0n; + } + + private waitForNextMillisecond(lastTimestamp: bigint): bigint { + let timestamp: bigint; + + do { + timestamp = Snowflake.now(); + } while (timestamp <= lastTimestamp); + + return timestamp; + } + + private composeSnowflakeId(timestamp: bigint): bigint { + let timestampComponent = (timestamp - this.customEpoch) << this.timestampBitShift; + let datacenterComponent = this.datacenterId << this.datacenterIdBitShift; + let workerComponent = this.workerId << this.workerIdBitShift; + let sequenceComponent = this.currentSequence; + + return timestampComponent | datacenterComponent | workerComponent | sequenceComponent; + } + + static now(): bigint { + return BigInt(Date.now()); + } +} diff --git a/src/_shared/util/snowflake/tsconfig.json b/src/_shared/util/snowflake/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/snowflake/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/timezone/package.json b/src/_shared/util/timezone/package.json new file mode 100644 index 000000000..523bd368a --- /dev/null +++ b/src/_shared/util/timezone/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/timezone", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/timezone/src/data.ts b/src/_shared/util/timezone/src/data.ts new file mode 100644 index 000000000..c70411b2e --- /dev/null +++ b/src/_shared/util/timezone/src/data.ts @@ -0,0 +1,2982 @@ +import { getUtcOffsetInMinutes } from './getUtcOffset'; + +export let data = [ + { + label: 'UTC (GMT+00:00)', + tzCode: 'utc', + name: 'UTC', + utc: '+00:00', + id: 0 + }, + { + label: 'Pacific/Midway (GMT-11:00)', + tzCode: 'pacific/midway', + name: '(GMT-11:00) Midway', + utc: '-11:00', + id: 1 + }, + { + label: 'Pacific/Niue (GMT-11:00)', + tzCode: 'pacific/niue', + name: '(GMT-11:00) Alofi', + utc: '-11:00', + id: 2 + }, + { + label: 'Pacific/Pago_Pago (GMT-11:00)', + tzCode: 'pacific/pago_pago', + name: '(GMT-11:00) Pago Pago, Tāfuna, Ta`ū, Taulaga', + utc: '-11:00', + id: 3 + }, + { + label: 'America/Adak (GMT-10:00)', + tzCode: 'america/adak', + name: '(GMT-10:00) Adak', + utc: '-10:00', + id: 4 + }, + { + label: 'Pacific/Honolulu (GMT-10:00)', + tzCode: 'pacific/honolulu', + name: '(GMT-10:00) Honolulu, East Honolulu, Pearl City, Hilo, Kailua', + utc: '-10:00', + id: 5 + }, + { + label: 'Pacific/Rarotonga (GMT-10:00)', + tzCode: 'pacific/rarotonga', + name: '(GMT-10:00) Avarua', + utc: '-10:00', + id: 6 + }, + { + label: 'Pacific/Tahiti (GMT-10:00)', + tzCode: 'pacific/tahiti', + name: '(GMT-10:00) Faaa, Papeete, Punaauia, Pirae, Mahina', + utc: '-10:00', + id: 7 + }, + { + label: 'Pacific/Marquesas (GMT-09:30)', + tzCode: 'pacific/marquesas', + name: '(GMT-09:30) Taiohae', + utc: '-09:30', + id: 8 + }, + { + label: 'America/Anchorage (GMT-09:00)', + tzCode: 'america/anchorage', + name: '(GMT-09:00) Anchorage, Fairbanks, Eagle River, Badger, Knik-Fairview', + utc: '-09:00', + id: 9 + }, + { + label: 'America/Juneau (GMT-09:00)', + tzCode: 'america/juneau', + name: '(GMT-09:00) Juneau', + utc: '-09:00', + id: 10 + }, + { + label: 'America/Metlakatla (GMT-09:00)', + tzCode: 'america/metlakatla', + name: '(GMT-09:00) Metlakatla', + utc: '-09:00', + id: 11 + }, + { + label: 'America/Nome (GMT-09:00)', + tzCode: 'america/nome', + name: '(GMT-09:00) Nome', + utc: '-09:00', + id: 12 + }, + { + label: 'America/Sitka (GMT-09:00)', + tzCode: 'america/sitka', + name: '(GMT-09:00) Sitka, Ketchikan', + utc: '-09:00', + id: 13 + }, + { + label: 'America/Yakutat (GMT-09:00)', + tzCode: 'america/yakutat', + name: '(GMT-09:00) Yakutat', + utc: '-09:00', + id: 14 + }, + { + label: 'Pacific/Gambier (GMT-09:00)', + tzCode: 'pacific/gambier', + name: '(GMT-09:00) Gambier', + utc: '-09:00', + id: 15 + }, + { + label: 'America/Los_Angeles (GMT-08:00)', + tzCode: 'america/los_angeles', + name: '(GMT-08:00) Los Angeles, San Diego, San Jose, San Francisco, Seattle', + utc: '-08:00', + id: 16 + }, + { + label: 'America/Tijuana (GMT-08:00)', + tzCode: 'america/tijuana', + name: '(GMT-08:00) Tijuana, Mexicali, Ensenada, Rosarito, Tecate', + utc: '-08:00', + id: 17 + }, + { + label: 'America/Vancouver (GMT-08:00)', + tzCode: 'america/vancouver', + name: '(GMT-08:00) Vancouver, Surrey, Okanagan, Victoria, Burnaby', + utc: '-08:00', + id: 18 + }, + { + label: 'Pacific/Pitcairn (GMT-08:00)', + tzCode: 'pacific/pitcairn', + name: '(GMT-08:00) Adamstown', + utc: '-08:00', + id: 19 + }, + { + label: 'America/Boise (GMT-07:00)', + tzCode: 'america/boise', + name: '(GMT-07:00) Boise, Meridian, Nampa, Idaho Falls, Pocatello', + utc: '-07:00', + id: 20 + }, + { + label: 'America/Cambridge_Bay (GMT-07:00)', + tzCode: 'america/cambridge_bay', + name: '(GMT-07:00) Cambridge Bay', + utc: '-07:00', + id: 21 + }, + { + label: 'America/Chihuahua (GMT-07:00)', + tzCode: 'america/chihuahua', + name: '(GMT-07:00) Chihuahua, Ciudad Delicias, Cuauhtémoc, Parral, Nuevo Casas Grandes', + utc: '-07:00', + id: 22 + }, + { + label: 'America/Creston (GMT-07:00)', + tzCode: 'america/creston', + name: '(GMT-07:00) Creston', + utc: '-07:00', + id: 23 + }, + { + label: 'America/Dawson (GMT-07:00)', + tzCode: 'america/dawson', + name: '(GMT-07:00) Dawson', + utc: '-07:00', + id: 24 + }, + { + label: 'America/Dawson_Creek (GMT-07:00)', + tzCode: 'america/dawson_creek', + name: '(GMT-07:00) Fort St. John, Dawson Creek', + utc: '-07:00', + id: 25 + }, + { + label: 'America/Denver (GMT-07:00)', + tzCode: 'america/denver', + name: '(GMT-07:00) Denver, El Paso, Albuquerque, Colorado Springs, Aurora', + utc: '-07:00', + id: 26 + }, + { + label: 'America/Edmonton (GMT-07:00)', + tzCode: 'america/edmonton', + name: '(GMT-07:00) Calgary, Edmonton, Fort McMurray, Red Deer, Lethbridge', + utc: '-07:00', + id: 27 + }, + { + label: 'America/Fort_Nelson (GMT-07:00)', + tzCode: 'america/fort_nelson', + name: '(GMT-07:00) Fort Nelson', + utc: '-07:00', + id: 28 + }, + { + label: 'America/Hermosillo (GMT-07:00)', + tzCode: 'america/hermosillo', + name: '(GMT-07:00) Hermosillo, Ciudad Obregón, Nogales, San Luis Río Colorado, Navojoa', + utc: '-07:00', + id: 29 + }, + { + label: 'America/Inuvik (GMT-07:00)', + tzCode: 'america/inuvik', + name: '(GMT-07:00) Inuvik', + utc: '-07:00', + id: 30 + }, + { + label: 'America/Mazatlan (GMT-07:00)', + tzCode: 'america/mazatlan', + name: '(GMT-07:00) Culiacán, Mazatlán, Tepic, Los Mochis, La Paz', + utc: '-07:00', + id: 31 + }, + { + label: 'America/Ojinaga (GMT-07:00)', + tzCode: 'america/ojinaga', + name: '(GMT-07:00) Ciudad Juárez, Manuel Ojinaga, Ojinaga', + utc: '-07:00', + id: 32 + }, + { + label: 'America/Phoenix (GMT-07:00)', + tzCode: 'america/phoenix', + name: '(GMT-07:00) Phoenix, Tucson, Mesa, Chandler, Gilbert', + utc: '-07:00', + id: 33 + }, + { + label: 'America/Whitehorse (GMT-07:00)', + tzCode: 'america/whitehorse', + name: '(GMT-07:00) Whitehorse', + utc: '-07:00', + id: 34 + }, + { + label: 'America/Yellowknife (GMT-07:00)', + tzCode: 'america/yellowknife', + name: '(GMT-07:00) Yellowknife', + utc: '-07:00', + id: 35 + }, + { + label: 'America/Bahia_Banderas (GMT-06:00)', + tzCode: 'america/bahia_banderas', + name: '(GMT-06:00) Mezcales, San Vicente, Bucerías, Valle de Banderas', + utc: '-06:00', + id: 36 + }, + { + label: 'America/Belize (GMT-06:00)', + tzCode: 'america/belize', + name: '(GMT-06:00) Belize City, San Ignacio, Orange Walk, Belmopan, Dangriga', + utc: '-06:00', + id: 37 + }, + { + label: 'America/Chicago (GMT-06:00)', + tzCode: 'america/chicago', + name: '(GMT-06:00) Chicago, Houston, San Antonio, Dallas, Austin', + utc: '-06:00', + id: 38 + }, + { + label: 'America/Costa_Rica (GMT-06:00)', + tzCode: 'america/costa_rica', + name: '(GMT-06:00) San José, Limón, San Francisco, Alajuela, Liberia', + utc: '-06:00', + id: 39 + }, + { + label: 'America/El_Salvador (GMT-06:00)', + tzCode: 'america/el_salvador', + name: '(GMT-06:00) San Salvador, Soyapango, Santa Ana, San Miguel, Mejicanos', + utc: '-06:00', + id: 40 + }, + { + label: 'America/Guatemala (GMT-06:00)', + tzCode: 'america/guatemala', + name: '(GMT-06:00) Guatemala City, Mixco, Villa Nueva, Petapa, San Juan Sacatepéquez', + utc: '-06:00', + id: 41 + }, + { + label: 'America/Indiana/Knox (GMT-06:00)', + tzCode: 'america/indiana/knox', + name: '(GMT-06:00) Knox', + utc: '-06:00', + id: 42 + }, + { + label: 'America/Indiana/Tell_City (GMT-06:00)', + tzCode: 'america/indiana/tell_city', + name: '(GMT-06:00) Tell City', + utc: '-06:00', + id: 43 + }, + { + label: 'America/Managua (GMT-06:00)', + tzCode: 'america/managua', + name: '(GMT-06:00) Managua, León, Masaya, Chinandega, Matagalpa', + utc: '-06:00', + id: 44 + }, + { + label: 'America/Matamoros (GMT-06:00)', + tzCode: 'america/matamoros', + name: '(GMT-06:00) Reynosa, Heroica Matamoros, Nuevo Laredo, Piedras Negras, Ciudad Acuña', + utc: '-06:00', + id: 45 + }, + { + label: 'America/Menominee (GMT-06:00)', + tzCode: 'america/menominee', + name: '(GMT-06:00) Menominee, Iron Mountain, Kingsford, Ironwood, Iron River', + utc: '-06:00', + id: 46 + }, + { + label: 'America/Merida (GMT-06:00)', + tzCode: 'america/merida', + name: '(GMT-06:00) Mérida, Campeche, Ciudad del Carmen, Kanasín, Valladolid', + utc: '-06:00', + id: 47 + }, + { + label: 'America/Mexico_City (GMT-06:00)', + tzCode: 'america/mexico_city', + name: '(GMT-06:00) Mexico City, Iztapalapa, Ecatepec de Morelos, Guadalajara, Puebla', + utc: '-06:00', + id: 48 + }, + { + label: 'America/Monterrey (GMT-06:00)', + tzCode: 'america/monterrey', + name: '(GMT-06:00) Monterrey, Saltillo, Guadalupe, Torreón, Victoria de Durango', + utc: '-06:00', + id: 49 + }, + { + label: 'America/North_Dakota/Beulah (GMT-06:00)', + tzCode: 'america/north_dakota/beulah', + name: '(GMT-06:00) Beulah', + utc: '-06:00', + id: 50 + }, + { + label: 'America/North_Dakota/Center (GMT-06:00)', + tzCode: 'america/north_dakota/center', + name: '(GMT-06:00) Center', + utc: '-06:00', + id: 51 + }, + { + label: 'America/North_Dakota/New_Salem (GMT-06:00)', + tzCode: 'america/north_dakota/new_salem', + name: '(GMT-06:00) Mandan', + utc: '-06:00', + id: 52 + }, + { + label: 'America/Rainy_River (GMT-06:00)', + tzCode: 'america/rainy_river', + name: '(GMT-06:00) Rainy River', + utc: '-06:00', + id: 53 + }, + { + label: 'America/Rankin_Inlet (GMT-06:00)', + tzCode: 'america/rankin_inlet', + name: '(GMT-06:00) Rankin Inlet', + utc: '-06:00', + id: 54 + }, + { + label: 'America/Regina (GMT-06:00)', + tzCode: 'america/regina', + name: '(GMT-06:00) Saskatoon, Regina, Prince Albert, Moose Jaw, North Battleford', + utc: '-06:00', + id: 55 + }, + { + label: 'America/Resolute (GMT-06:00)', + tzCode: 'america/resolute', + name: '(GMT-06:00) Resolute', + utc: '-06:00', + id: 56 + }, + { + label: 'America/Swift_Current (GMT-06:00)', + tzCode: 'america/swift_current', + name: '(GMT-06:00) Swift Current', + utc: '-06:00', + id: 57 + }, + { + label: 'America/Tegucigalpa (GMT-06:00)', + tzCode: 'america/tegucigalpa', + name: '(GMT-06:00) Tegucigalpa, San Pedro Sula, Choloma, La Ceiba, El Progreso', + utc: '-06:00', + id: 58 + }, + { + label: 'America/Winnipeg (GMT-06:00)', + tzCode: 'america/winnipeg', + name: '(GMT-06:00) Winnipeg, Brandon, Kenora, Portage la Prairie, Thompson', + utc: '-06:00', + id: 59 + }, + { + label: 'Pacific/Easter (GMT-06:00)', + tzCode: 'pacific/easter', + name: '(GMT-06:00) Easter', + utc: '-06:00', + id: 60 + }, + { + label: 'Pacific/Galapagos (GMT-06:00)', + tzCode: 'pacific/galapagos', + name: '(GMT-06:00) Puerto Ayora, Puerto Baquerizo Moreno', + utc: '-06:00', + id: 61 + }, + { + label: 'America/Atikokan (GMT-05:00)', + tzCode: 'america/atikokan', + name: '(GMT-05:00) Atikokan', + utc: '-05:00', + id: 62 + }, + { + label: 'America/Bogota (GMT-05:00)', + tzCode: 'america/bogota', + name: '(GMT-05:00) Bogotá, Cali, Medellín, Barranquilla, Cartagena', + utc: '-05:00', + id: 63 + }, + { + label: 'America/Cancun (GMT-05:00)', + tzCode: 'america/cancun', + name: '(GMT-05:00) Cancún, Chetumal, Playa del Carmen, Cozumel, Felipe Carrillo Puerto', + utc: '-05:00', + id: 64 + }, + { + label: 'America/Cayman (GMT-05:00)', + tzCode: 'america/cayman', + name: '(GMT-05:00) George Town, West Bay, Bodden Town, East End, North Side', + utc: '-05:00', + id: 65 + }, + { + label: 'America/Detroit (GMT-05:00)', + tzCode: 'america/detroit', + name: '(GMT-05:00) Detroit, Grand Rapids, Warren, Sterling Heights, Ann Arbor', + utc: '-05:00', + id: 66 + }, + { + label: 'America/Eirunepe (GMT-05:00)', + tzCode: 'america/eirunepe', + name: '(GMT-05:00) Eirunepé, Benjamin Constant, Envira', + utc: '-05:00', + id: 67 + }, + { + label: 'America/Grand_Turk (GMT-05:00)', + tzCode: 'america/grand_turk', + name: '(GMT-05:00) Cockburn Town', + utc: '-05:00', + id: 68 + }, + { + label: 'America/Guayaquil (GMT-05:00)', + tzCode: 'america/guayaquil', + name: '(GMT-05:00) Guayaquil, Quito, Cuenca, Santo Domingo de los Colorados, Machala', + utc: '-05:00', + id: 69 + }, + { + label: 'America/Havana (GMT-05:00)', + tzCode: 'america/havana', + name: '(GMT-05:00) Havana, Santiago de Cuba, Camagüey, Holguín, Guantánamo', + utc: '-05:00', + id: 70 + }, + { + label: 'America/Indiana/Indianapolis (GMT-05:00)', + tzCode: 'america/indiana/indianapolis', + name: '(GMT-05:00) Indianapolis, Fort Wayne, South Bend, Carmel, Bloomington', + utc: '-05:00', + id: 71 + }, + { + label: 'America/Indiana/Marengo (GMT-05:00)', + tzCode: 'america/indiana/marengo', + name: '(GMT-05:00) Marengo', + utc: '-05:00', + id: 72 + }, + { + label: 'America/Indiana/Petersburg (GMT-05:00)', + tzCode: 'america/indiana/petersburg', + name: '(GMT-05:00) Petersburg', + utc: '-05:00', + id: 73 + }, + { + label: 'America/Indiana/Vevay (GMT-05:00)', + tzCode: 'america/indiana/vevay', + name: '(GMT-05:00) Vevay', + utc: '-05:00', + id: 74 + }, + { + label: 'America/Indiana/Vincennes (GMT-05:00)', + tzCode: 'america/indiana/vincennes', + name: '(GMT-05:00) Vincennes, Jasper, Washington, Huntingburg', + utc: '-05:00', + id: 75 + }, + { + label: 'America/Indiana/Winamac (GMT-05:00)', + tzCode: 'america/indiana/winamac', + name: '(GMT-05:00) Winamac', + utc: '-05:00', + id: 76 + }, + { + label: 'America/Iqaluit (GMT-05:00)', + tzCode: 'america/iqaluit', + name: '(GMT-05:00) Iqaluit', + utc: '-05:00', + id: 77 + }, + { + label: 'America/Jamaica (GMT-05:00)', + tzCode: 'america/jamaica', + name: '(GMT-05:00) Kingston, New Kingston, Spanish Town, Portmore, Montego Bay', + utc: '-05:00', + id: 78 + }, + { + label: 'America/Kentucky/Louisville (GMT-05:00)', + tzCode: 'america/kentucky/louisville', + name: '(GMT-05:00) Louisville, Jeffersonville, New Albany, Jeffersontown, Pleasure Ridge Park', + utc: '-05:00', + id: 79 + }, + { + label: 'America/Kentucky/Monticello (GMT-05:00)', + tzCode: 'america/kentucky/monticello', + name: '(GMT-05:00) Monticello', + utc: '-05:00', + id: 80 + }, + { + label: 'America/Lima (GMT-05:00)', + tzCode: 'america/lima', + name: '(GMT-05:00) Lima, Arequipa, Callao, Trujillo, Chiclayo', + utc: '-05:00', + id: 81 + }, + { + label: 'America/Nassau (GMT-05:00)', + tzCode: 'america/nassau', + name: '(GMT-05:00) Nassau, Lucaya, Freeport, West End, Cooper’s Town', + utc: '-05:00', + id: 82 + }, + { + label: 'America/New_York (GMT-05:00)', + tzCode: 'america/new_york', + name: '(GMT-05:00) New York City, Brooklyn, Queens, Philadelphia, Manhattan', + utc: '-05:00', + id: 83 + }, + { + label: 'America/Nipigon (GMT-05:00)', + tzCode: 'america/nipigon', + name: '(GMT-05:00) Nipigon', + utc: '-05:00', + id: 84 + }, + { + label: 'America/Panama (GMT-05:00)', + tzCode: 'america/panama', + name: '(GMT-05:00) Panamá, San Miguelito, Juan Díaz, David, Arraiján', + utc: '-05:00', + id: 85 + }, + { + label: 'America/Pangnirtung (GMT-05:00)', + tzCode: 'america/pangnirtung', + name: '(GMT-05:00) Pangnirtung', + utc: '-05:00', + id: 86 + }, + { + label: 'America/Port-au-Prince (GMT-05:00)', + tzCode: 'america/port-au-prince', + name: '(GMT-05:00) Port-au-Prince, Carrefour, Delmas 73, Pétionville, Port-de-Paix', + utc: '-05:00', + id: 87 + }, + { + label: 'America/Rio_Branco (GMT-05:00)', + tzCode: 'america/rio_branco', + name: '(GMT-05:00) Rio Branco, Cruzeiro do Sul, Sena Madureira, Tarauacá, Feijó', + utc: '-05:00', + id: 88 + }, + { + label: 'America/Thunder_Bay (GMT-05:00)', + tzCode: 'america/thunder_bay', + name: '(GMT-05:00) Thunder Bay', + utc: '-05:00', + id: 89 + }, + { + label: 'America/Toronto (GMT-05:00)', + tzCode: 'america/toronto', + name: '(GMT-05:00) Toronto, Montréal, Ottawa, Mississauga, Québec', + utc: '-05:00', + id: 90 + }, + { + label: 'America/Anguilla (GMT-04:00)', + tzCode: 'america/anguilla', + name: '(GMT-04:00) The Valley, Blowing Point Village, Sandy Ground Village, The Quarter, Sandy Hill', + utc: '-04:00', + id: 91 + }, + { + label: 'America/Antigua (GMT-04:00)', + tzCode: 'america/antigua', + name: '(GMT-04:00) Saint John’s, Piggotts, Bolands, Codrington, Parham', + utc: '-04:00', + id: 92 + }, + { + label: 'America/Aruba (GMT-04:00)', + tzCode: 'america/aruba', + name: '(GMT-04:00) Oranjestad, Tanki Leendert, San Nicolas, Santa Cruz, Paradera', + utc: '-04:00', + id: 93 + }, + { + label: 'America/Asuncion (GMT-04:00)', + tzCode: 'america/asuncion', + name: '(GMT-04:00) Asunción, Ciudad del Este, San Lorenzo, Capiatá, Lambaré', + utc: '-04:00', + id: 94 + }, + { + label: 'America/Barbados (GMT-04:00)', + tzCode: 'america/barbados', + name: '(GMT-04:00) Bridgetown, Speightstown, Oistins, Bathsheba, Holetown', + utc: '-04:00', + id: 95 + }, + { + label: 'America/Blanc-Sablon (GMT-04:00)', + tzCode: 'america/blanc-sablon', + name: '(GMT-04:00) Lévis', + utc: '-04:00', + id: 96 + }, + { + label: 'America/Boa_Vista (GMT-04:00)', + tzCode: 'america/boa_vista', + name: '(GMT-04:00) Boa Vista', + utc: '-04:00', + id: 97 + }, + { + label: 'America/Campo_Grande (GMT-04:00)', + tzCode: 'america/campo_grande', + name: '(GMT-04:00) Campo Grande, Dourados, Corumbá, Três Lagoas, Ponta Porã', + utc: '-04:00', + id: 98 + }, + { + label: 'America/Caracas (GMT-04:00)', + tzCode: 'america/caracas', + name: '(GMT-04:00) Caracas, Maracaibo, Maracay, Valencia, Barquisimeto', + utc: '-04:00', + id: 99 + }, + { + label: 'America/Cuiaba (GMT-04:00)', + tzCode: 'america/cuiaba', + name: '(GMT-04:00) Cuiabá, Várzea Grande, Rondonópolis, Sinop, Barra do Garças', + utc: '-04:00', + id: 100 + }, + { + label: 'America/Curacao (GMT-04:00)', + tzCode: 'america/curacao', + name: '(GMT-04:00) Willemstad, Sint Michiel Liber', + utc: '-04:00', + id: 101 + }, + { + label: 'America/Dominica (GMT-04:00)', + tzCode: 'america/dominica', + name: '(GMT-04:00) Roseau, Portsmouth, Berekua, Saint Joseph, Wesley', + utc: '-04:00', + id: 102 + }, + { + label: 'America/Glace_Bay (GMT-04:00)', + tzCode: 'america/glace_bay', + name: '(GMT-04:00) Sydney, Glace Bay, Sydney Mines', + utc: '-04:00', + id: 103 + }, + { + label: 'America/Goose_Bay (GMT-04:00)', + tzCode: 'america/goose_bay', + name: '(GMT-04:00) Labrador City, Happy Valley-Goose Bay', + utc: '-04:00', + id: 104 + }, + { + label: 'America/Grenada (GMT-04:00)', + tzCode: 'america/grenada', + name: "(GMT-04:00) Saint George's, Gouyave, Grenville, Victoria, Saint David’s", + utc: '-04:00', + id: 105 + }, + { + label: 'America/Guadeloupe (GMT-04:00)', + tzCode: 'america/guadeloupe', + name: '(GMT-04:00) Les Abymes, Baie-Mahault, Le Gosier, Petit-Bourg, Sainte-Anne', + utc: '-04:00', + id: 106 + }, + { + label: 'America/Guyana (GMT-04:00)', + tzCode: 'america/guyana', + name: '(GMT-04:00) Georgetown, Linden, New Amsterdam, Anna Regina, Bartica', + utc: '-04:00', + id: 107 + }, + { + label: 'America/Halifax (GMT-04:00)', + tzCode: 'america/halifax', + name: '(GMT-04:00) Halifax, Dartmouth, Charlottetown, Lower Sackville, Truro', + utc: '-04:00', + id: 108 + }, + { + label: 'America/Kralendijk (GMT-04:00)', + tzCode: 'america/kralendijk', + name: '(GMT-04:00) Kralendijk, Oranjestad, The Bottom', + utc: '-04:00', + id: 109 + }, + { + label: 'America/La_Paz (GMT-04:00)', + tzCode: 'america/la_paz', + name: '(GMT-04:00) Santa Cruz de la Sierra, Cochabamba, La Paz, Sucre, Oruro', + utc: '-04:00', + id: 110 + }, + { + label: 'America/Lower_Princes (GMT-04:00)', + tzCode: 'america/lower_princes', + name: '(GMT-04:00) Cul de Sac, Lower Prince’s Quarter, Koolbaai, Philipsburg', + utc: '-04:00', + id: 111 + }, + { + label: 'America/Manaus (GMT-04:00)', + tzCode: 'america/manaus', + name: '(GMT-04:00) Manaus, Itacoatiara, Parintins, Manacapuru, Coari', + utc: '-04:00', + id: 112 + }, + { + label: 'America/Marigot (GMT-04:00)', + tzCode: 'america/marigot', + name: '(GMT-04:00) Marigot', + utc: '-04:00', + id: 113 + }, + { + label: 'America/Martinique (GMT-04:00)', + tzCode: 'america/martinique', + name: '(GMT-04:00) Fort-de-France, Le Lamentin, Le Robert, Sainte-Marie, Le François', + utc: '-04:00', + id: 114 + }, + { + label: 'America/Moncton (GMT-04:00)', + tzCode: 'america/moncton', + name: '(GMT-04:00) Moncton, Saint John, Fredericton, Dieppe, Miramichi', + utc: '-04:00', + id: 115 + }, + { + label: 'America/Montserrat (GMT-04:00)', + tzCode: 'america/montserrat', + name: '(GMT-04:00) Brades, Saint Peters, Plymouth', + utc: '-04:00', + id: 116 + }, + { + label: 'America/Porto_Velho (GMT-04:00)', + tzCode: 'america/porto_velho', + name: '(GMT-04:00) Porto Velho, Ji Paraná, Vilhena, Ariquemes, Cacoal', + utc: '-04:00', + id: 117 + }, + { + label: 'America/Port_of_Spain (GMT-04:00)', + tzCode: 'america/port_of_spain', + name: '(GMT-04:00) Chaguanas, Mon Repos, San Fernando, Port of Spain, Rio Claro', + utc: '-04:00', + id: 118 + }, + { + label: 'America/Puerto_Rico (GMT-04:00)', + tzCode: 'america/puerto_rico', + name: '(GMT-04:00) San Juan, Bayamón, Carolina, Ponce, Caguas', + utc: '-04:00', + id: 119 + }, + { + label: 'America/Santiago (GMT-04:00)', + tzCode: 'america/santiago', + name: '(GMT-04:00) Santiago, Puente Alto, Antofagasta, Viña del Mar, Valparaíso', + utc: '-04:00', + id: 120 + }, + { + label: 'America/Santo_Domingo (GMT-04:00)', + tzCode: 'america/santo_domingo', + name: '(GMT-04:00) Santo Domingo, Santiago de los Caballeros, Santo Domingo Oeste, Santo Domingo Este, San Pedro de Macorís', + utc: '-04:00', + id: 121 + }, + { + label: 'America/St_Barthelemy (GMT-04:00)', + tzCode: 'america/st_barthelemy', + name: '(GMT-04:00) Gustavia', + utc: '-04:00', + id: 122 + }, + { + label: 'America/St_Kitts (GMT-04:00)', + tzCode: 'america/st_kitts', + name: '(GMT-04:00) Basseterre, Fig Tree, Market Shop, Saint Paul’s, Middle Island', + utc: '-04:00', + id: 123 + }, + { + label: 'America/St_Lucia (GMT-04:00)', + tzCode: 'america/st_lucia', + name: '(GMT-04:00) Castries, Bisee, Vieux Fort, Micoud, Soufrière', + utc: '-04:00', + id: 124 + }, + { + label: 'America/St_Thomas (GMT-04:00)', + tzCode: 'america/st_thomas', + name: '(GMT-04:00) Saint Croix, Charlotte Amalie, Cruz Bay', + utc: '-04:00', + id: 125 + }, + { + label: 'America/St_Vincent (GMT-04:00)', + tzCode: 'america/st_vincent', + name: '(GMT-04:00) Kingstown, Kingstown Park, Georgetown, Barrouallie, Port Elizabeth', + utc: '-04:00', + id: 126 + }, + { + label: 'America/Thule (GMT-04:00)', + tzCode: 'america/thule', + name: '(GMT-04:00) Thule', + utc: '-04:00', + id: 127 + }, + { + label: 'America/Tortola (GMT-04:00)', + tzCode: 'america/tortola', + name: '(GMT-04:00) Road Town', + utc: '-04:00', + id: 128 + }, + { + label: 'Atlantic/Bermuda (GMT-04:00)', + tzCode: 'atlantic/bermuda', + name: '(GMT-04:00) Hamilton', + utc: '-04:00', + id: 129 + }, + { + label: 'America/St_Johns (GMT-03:30)', + tzCode: 'america/st_johns', + name: "(GMT-03:30) St. John's, Mount Pearl, Corner Brook, Conception Bay South, Bay Roberts", + utc: '-03:30', + id: 130 + }, + { + label: 'America/Araguaina (GMT-03:00)', + tzCode: 'america/araguaina', + name: '(GMT-03:00) Palmas, Araguaína, Gurupi, Miracema do Tocantins, Porto Franco', + utc: '-03:00', + id: 131 + }, + { + label: 'America/Argentina/Buenos_Aires (GMT-03:00)', + tzCode: 'america/argentina/buenos_aires', + name: '(GMT-03:00) Buenos Aires, La Plata, Mar del Plata, Morón, Bahía Blanca', + utc: '-03:00', + id: 132 + }, + { + label: 'America/Argentina/Catamarca (GMT-03:00)', + tzCode: 'america/argentina/catamarca', + name: '(GMT-03:00) San Fernando del Valle de Catamarca, Trelew, Puerto Madryn, Esquel, Rawson', + utc: '-03:00', + id: 133 + }, + { + label: 'America/Argentina/Cordoba (GMT-03:00)', + tzCode: 'america/argentina/cordoba', + name: '(GMT-03:00) Córdoba, Rosario, Santa Fe, Resistencia, Santiago del Estero', + utc: '-03:00', + id: 134 + }, + { + label: 'America/Argentina/Jujuy (GMT-03:00)', + tzCode: 'america/argentina/jujuy', + name: '(GMT-03:00) San Salvador de Jujuy, San Pedro de Jujuy, Libertador General San Martín, Palpalá, La Quiaca', + utc: '-03:00', + id: 135 + }, + { + label: 'America/Argentina/La_Rioja (GMT-03:00)', + tzCode: 'america/argentina/la_rioja', + name: '(GMT-03:00) La Rioja, Chilecito, Arauco, Chamical', + utc: '-03:00', + id: 136 + }, + { + label: 'America/Argentina/Mendoza (GMT-03:00)', + tzCode: 'america/argentina/mendoza', + name: '(GMT-03:00) Mendoza, San Rafael, San Martín', + utc: '-03:00', + id: 137 + }, + { + label: 'America/Argentina/Rio_Gallegos (GMT-03:00)', + tzCode: 'america/argentina/rio_gallegos', + name: '(GMT-03:00) Comodoro Rivadavia, Río Gallegos, Caleta Olivia, Pico Truncado, Puerto Deseado', + utc: '-03:00', + id: 138 + }, + { + label: 'America/Argentina/Salta (GMT-03:00)', + tzCode: 'america/argentina/salta', + name: '(GMT-03:00) Salta, Neuquén, Santa Rosa, San Carlos de Bariloche, Cipolletti', + utc: '-03:00', + id: 139 + }, + { + label: 'America/Argentina/San_Juan (GMT-03:00)', + tzCode: 'america/argentina/san_juan', + name: '(GMT-03:00) San Juan, Chimbas, Santa Lucía, Pocito, Caucete', + utc: '-03:00', + id: 140 + }, + { + label: 'America/Argentina/San_Luis (GMT-03:00)', + tzCode: 'america/argentina/san_luis', + name: '(GMT-03:00) San Luis, Villa Mercedes, La Punta, Merlo, Justo Daract', + utc: '-03:00', + id: 141 + }, + { + label: 'America/Argentina/Tucuman (GMT-03:00)', + tzCode: 'america/argentina/tucuman', + name: '(GMT-03:00) San Miguel de Tucumán, Yerba Buena, Tafí Viejo, Alderetes, Aguilares', + utc: '-03:00', + id: 142 + }, + { + label: 'America/Argentina/Ushuaia (GMT-03:00)', + tzCode: 'america/argentina/ushuaia', + name: '(GMT-03:00) Ushuaia, Río Grande', + utc: '-03:00', + id: 143 + }, + { + label: 'America/Bahia (GMT-03:00)', + tzCode: 'america/bahia', + name: '(GMT-03:00) Salvador, Feira de Santana, Vitória da Conquista, Itabuna, Camaçari', + utc: '-03:00', + id: 144 + }, + { + label: 'America/Belem (GMT-03:00)', + tzCode: 'america/belem', + name: '(GMT-03:00) Belém, Ananindeua, Macapá, Parauapebas, Marabá', + utc: '-03:00', + id: 145 + }, + { + label: 'America/Cayenne (GMT-03:00)', + tzCode: 'america/cayenne', + name: '(GMT-03:00) Cayenne, Matoury, Saint-Laurent-du-Maroni, Kourou, Rémire-Montjoly', + utc: '-03:00', + id: 146 + }, + { + label: 'America/Fortaleza (GMT-03:00)', + tzCode: 'america/fortaleza', + name: '(GMT-03:00) Fortaleza, São Luís, Natal, Teresina, João Pessoa', + utc: '-03:00', + id: 147 + }, + { + label: 'America/Godthab (GMT-03:00)', + tzCode: 'america/godthab', + name: '(GMT-03:00) Nuuk, Sisimiut, Ilulissat, Qaqortoq, Aasiaat', + utc: '-03:00', + id: 148 + }, + { + label: 'America/Maceio (GMT-03:00)', + tzCode: 'america/maceio', + name: '(GMT-03:00) Maceió, Aracaju, Arapiraca, Nossa Senhora do Socorro, São Cristóvão', + utc: '-03:00', + id: 149 + }, + { + label: 'America/Miquelon (GMT-03:00)', + tzCode: 'america/miquelon', + name: '(GMT-03:00) Saint-Pierre, Miquelon', + utc: '-03:00', + id: 150 + }, + { + label: 'America/Montevideo (GMT-03:00)', + tzCode: 'america/montevideo', + name: '(GMT-03:00) Montevideo, Salto, Paysandú, Las Piedras, Rivera', + utc: '-03:00', + id: 151 + }, + { + label: 'America/Paramaribo (GMT-03:00)', + tzCode: 'america/paramaribo', + name: '(GMT-03:00) Paramaribo, Lelydorp, Brokopondo, Nieuw Nickerie, Moengo', + utc: '-03:00', + id: 152 + }, + { + label: 'America/Punta_Arenas (GMT-03:00)', + tzCode: 'america/punta_arenas', + name: '(GMT-03:00) Punta Arenas, Puerto Natales', + utc: '-03:00', + id: 153 + }, + { + label: 'America/Recife (GMT-03:00)', + tzCode: 'america/recife', + name: '(GMT-03:00) Recife, Jaboatão, Jaboatão dos Guararapes, Olinda, Paulista', + utc: '-03:00', + id: 154 + }, + { + label: 'America/Santarem (GMT-03:00)', + tzCode: 'america/santarem', + name: '(GMT-03:00) Santarém, Altamira, Itaituba, Oriximiná, Alenquer', + utc: '-03:00', + id: 155 + }, + { + label: 'America/Sao_Paulo (GMT-03:00)', + tzCode: 'america/sao_paulo', + name: '(GMT-03:00) São Paulo, Rio de Janeiro, Belo Horizonte, Brasília, Curitiba', + utc: '-03:00', + id: 156 + }, + { + label: 'Antarctica/Palmer (GMT-03:00)', + tzCode: 'antarctica/palmer', + name: '(GMT-03:00) Palmer', + utc: '-03:00', + id: 157 + }, + { + label: 'Antarctica/Rothera (GMT-03:00)', + tzCode: 'antarctica/rothera', + name: '(GMT-03:00) Rothera', + utc: '-03:00', + id: 158 + }, + { + label: 'Atlantic/Stanley (GMT-03:00)', + tzCode: 'atlantic/stanley', + name: '(GMT-03:00) Stanley', + utc: '-03:00', + id: 159 + }, + { + label: 'America/Noronha (GMT-02:00)', + tzCode: 'america/noronha', + name: '(GMT-02:00) Itamaracá', + utc: '-02:00', + id: 160 + }, + { + label: 'Atlantic/South_Georgia (GMT-02:00)', + tzCode: 'atlantic/south_georgia', + name: '(GMT-02:00) Grytviken', + utc: '-02:00', + id: 161 + }, + { + label: 'America/Scoresbysund (GMT-01:00)', + tzCode: 'america/scoresbysund', + name: '(GMT-01:00) Scoresbysund', + utc: '-01:00', + id: 162 + }, + { + label: 'Atlantic/Azores (GMT-01:00)', + tzCode: 'atlantic/azores', + name: '(GMT-01:00) Ponta Delgada, Lagoa, Angra do Heroísmo, Rosto de Cão, Rabo de Peixe', + utc: '-01:00', + id: 163 + }, + { + label: 'Atlantic/Cape_Verde (GMT-01:00)', + tzCode: 'atlantic/cape_verde', + name: '(GMT-01:00) Praia, Mindelo, Santa Maria, Cova Figueira, Santa Cruz', + utc: '-01:00', + id: 164 + }, + { + label: 'Africa/Abidjan (GMT+00:00)', + tzCode: 'africa/abidjan', + name: '(GMT+00:00) Abidjan, Abobo, Bouaké, Daloa, San-Pédro', + utc: '+00:00', + id: 165 + }, + { + label: 'Africa/Accra (GMT+00:00)', + tzCode: 'africa/accra', + name: '(GMT+00:00) Accra, Kumasi, Tamale, Takoradi, Atsiaman', + utc: '+00:00', + id: 166 + }, + { + label: 'Africa/Bamako (GMT+00:00)', + tzCode: 'africa/bamako', + name: '(GMT+00:00) Bamako, Sikasso, Mopti, Koutiala, Ségou', + utc: '+00:00', + id: 167 + }, + { + label: 'Africa/Banjul (GMT+00:00)', + tzCode: 'africa/banjul', + name: '(GMT+00:00) Serekunda, Brikama, Bakau, Banjul, Farafenni', + utc: '+00:00', + id: 168 + }, + { + label: 'Africa/Bissau (GMT+00:00)', + tzCode: 'africa/bissau', + name: '(GMT+00:00) Bissau, Bafatá, Gabú, Bissorã, Bolama', + utc: '+00:00', + id: 169 + }, + { + label: 'Africa/Casablanca (GMT+00:00)', + tzCode: 'africa/casablanca', + name: '(GMT+00:00) Casablanca, Rabat, Fès, Sale, Marrakesh', + utc: '+00:00', + id: 170 + }, + { + label: 'Africa/Conakry (GMT+00:00)', + tzCode: 'africa/conakry', + name: '(GMT+00:00) Camayenne, Conakry, Nzérékoré, Kindia, Kankan', + utc: '+00:00', + id: 171 + }, + { + label: 'Africa/Dakar (GMT+00:00)', + tzCode: 'africa/dakar', + name: '(GMT+00:00) Dakar, Pikine, Touba, Thiès, Thiès Nones', + utc: '+00:00', + id: 172 + }, + { + label: 'Africa/El_Aaiun (GMT+00:00)', + tzCode: 'africa/el_aaiun', + name: '(GMT+00:00) Laayoune, Dakhla, Laayoune Plage', + utc: '+00:00', + id: 173 + }, + { + label: 'Africa/Freetown (GMT+00:00)', + tzCode: 'africa/freetown', + name: '(GMT+00:00) Freetown, Bo, Kenema, Koidu, Makeni', + utc: '+00:00', + id: 174 + }, + { + label: 'Africa/Lome (GMT+00:00)', + tzCode: 'africa/lome', + name: '(GMT+00:00) Lomé, Sokodé, Kara, Atakpamé, Kpalimé', + utc: '+00:00', + id: 175 + }, + { + label: 'Africa/Monrovia (GMT+00:00)', + tzCode: 'africa/monrovia', + name: '(GMT+00:00) Monrovia, Gbarnga, Kakata, Bensonville, Harper', + utc: '+00:00', + id: 176 + }, + { + label: 'Africa/Nouakchott (GMT+00:00)', + tzCode: 'africa/nouakchott', + name: '(GMT+00:00) Nouakchott, Nouadhibou, Néma, Kaédi, Rosso', + utc: '+00:00', + id: 177 + }, + { + label: 'Africa/Ouagadougou (GMT+00:00)', + tzCode: 'africa/ouagadougou', + name: '(GMT+00:00) Ouagadougou, Bobo-Dioulasso, Koudougou, Ouahigouya, Banfora', + utc: '+00:00', + id: 178 + }, + { + label: 'Africa/Sao_Tome (GMT+00:00)', + tzCode: 'africa/sao_tome', + name: '(GMT+00:00) São Tomé, Santo António', + utc: '+00:00', + id: 179 + }, + { + label: 'America/Danmarkshavn (GMT+00:00)', + tzCode: 'america/danmarkshavn', + name: '(GMT+00:00) Danmarkshavn', + utc: '+00:00', + id: 180 + }, + { + label: 'Antarctica/Troll (GMT+00:00)', + tzCode: 'antarctica/troll', + name: '(GMT+00:00) Troll', + utc: '+00:00', + id: 181 + }, + { + label: 'Atlantic/Canary (GMT+00:00)', + tzCode: 'atlantic/canary', + name: '(GMT+00:00) Las Palmas de Gran Canaria, Santa Cruz de Tenerife, La Laguna, Telde, Arona', + utc: '+00:00', + id: 182 + }, + { + label: 'Atlantic/Faroe (GMT+00:00)', + tzCode: 'atlantic/faroe', + name: '(GMT+00:00) Tórshavn, Klaksvík, Fuglafjørður, Tvøroyri, Miðvágur', + utc: '+00:00', + id: 183 + }, + { + label: 'Atlantic/Madeira (GMT+00:00)', + tzCode: 'atlantic/madeira', + name: '(GMT+00:00) Funchal, Câmara de Lobos, São Martinho, Caniço, Machico', + utc: '+00:00', + id: 184 + }, + { + label: 'Atlantic/Reykjavik (GMT+00:00)', + tzCode: 'atlantic/reykjavik', + name: '(GMT+00:00) Reykjavík, Kópavogur, Hafnarfjörður, Akureyri, Garðabær', + utc: '+00:00', + id: 185 + }, + { + label: 'Atlantic/St_Helena (GMT+00:00)', + tzCode: 'atlantic/st_helena', + name: '(GMT+00:00) Jamestown, Georgetown, Edinburgh of the Seven Seas', + utc: '+00:00', + id: 186 + }, + { + label: 'Europe/Dublin (GMT+00:00)', + tzCode: 'europe/dublin', + name: '(GMT+00:00) Dublin, Cork, Luimneach, Gaillimh, Tallaght', + utc: '+00:00', + id: 187 + }, + { + label: 'Europe/Guernsey (GMT+00:00)', + tzCode: 'europe/guernsey', + name: '(GMT+00:00) Saint Peter Port, St Martin, Saint Sampson, St Anne, Saint Saviour', + utc: '+00:00', + id: 188 + }, + { + label: 'Europe/Isle_of_Man (GMT+00:00)', + tzCode: 'europe/isle_of_man', + name: '(GMT+00:00) Douglas, Ramsey, Peel, Port Erin, Castletown', + utc: '+00:00', + id: 189 + }, + { + label: 'Europe/Jersey (GMT+00:00)', + tzCode: 'europe/jersey', + name: '(GMT+00:00) Saint Helier, Le Hocq', + utc: '+00:00', + id: 190 + }, + { + label: 'Europe/Lisbon (GMT+00:00)', + tzCode: 'europe/lisbon', + name: '(GMT+00:00) Lisbon, Porto, Amadora, Braga, Setúbal', + utc: '+00:00', + id: 191 + }, + { + label: 'Europe/London (GMT+00:00)', + tzCode: 'europe/london', + name: '(GMT+00:00) London, Birmingham, Liverpool, Sheffield, Bristol', + utc: '+00:00', + id: 192 + }, + { + label: 'Africa/Algiers (GMT+01:00)', + tzCode: 'africa/algiers', + name: '(GMT+01:00) Algiers, Boumerdas, Oran, Tébessa, Constantine', + utc: '+01:00', + id: 193 + }, + { + label: 'Africa/Bangui (GMT+01:00)', + tzCode: 'africa/bangui', + name: '(GMT+01:00) Bangui, Bimbo, Mbaïki, Berbérati, Kaga Bandoro', + utc: '+01:00', + id: 194 + }, + { + label: 'Africa/Brazzaville (GMT+01:00)', + tzCode: 'africa/brazzaville', + name: '(GMT+01:00) Brazzaville, Pointe-Noire, Dolisie, Kayes, Owando', + utc: '+01:00', + id: 195 + }, + { + label: 'Africa/Ceuta (GMT+01:00)', + tzCode: 'africa/ceuta', + name: '(GMT+01:00) Ceuta, Melilla', + utc: '+01:00', + id: 196 + }, + { + label: 'Africa/Douala (GMT+01:00)', + tzCode: 'africa/douala', + name: '(GMT+01:00) Douala, Yaoundé, Garoua, Kousséri, Bamenda', + utc: '+01:00', + id: 197 + }, + { + label: 'Africa/Kinshasa (GMT+01:00)', + tzCode: 'africa/kinshasa', + name: '(GMT+01:00) Kinshasa, Masina, Kikwit, Mbandaka, Matadi', + utc: '+01:00', + id: 198 + }, + { + label: 'Africa/Lagos (GMT+01:00)', + tzCode: 'africa/lagos', + name: '(GMT+01:00) Lagos, Kano, Ibadan, Kaduna, Port Harcourt', + utc: '+01:00', + id: 199 + }, + { + label: 'Africa/Libreville (GMT+01:00)', + tzCode: 'africa/libreville', + name: '(GMT+01:00) Libreville, Port-Gentil, Franceville, Oyem, Moanda', + utc: '+01:00', + id: 200 + }, + { + label: 'Africa/Luanda (GMT+01:00)', + tzCode: 'africa/luanda', + name: '(GMT+01:00) Luanda, N’dalatando, Huambo, Lobito, Benguela', + utc: '+01:00', + id: 201 + }, + { + label: 'Africa/Malabo (GMT+01:00)', + tzCode: 'africa/malabo', + name: '(GMT+01:00) Bata, Malabo, Ebebiyin, Aconibe, Añisoc', + utc: '+01:00', + id: 202 + }, + { + label: 'Africa/Ndjamena (GMT+01:00)', + tzCode: 'africa/ndjamena', + name: "(GMT+01:00) N'Djamena, Moundou, Sarh, Abéché, Kelo", + utc: '+01:00', + id: 203 + }, + { + label: 'Africa/Niamey (GMT+01:00)', + tzCode: 'africa/niamey', + name: '(GMT+01:00) Niamey, Zinder, Maradi, Agadez, Alaghsas', + utc: '+01:00', + id: 204 + }, + { + label: 'Africa/Porto-Novo (GMT+01:00)', + tzCode: 'africa/porto-novo', + name: '(GMT+01:00) Cotonou, Abomey-Calavi, Djougou, Porto-Novo, Parakou', + utc: '+01:00', + id: 205 + }, + { + label: 'Africa/Tunis (GMT+01:00)', + tzCode: 'africa/tunis', + name: '(GMT+01:00) Tunis, Sfax, Sousse, Kairouan, Bizerte', + utc: '+01:00', + id: 206 + }, + { + label: 'Africa/Windhoek (GMT+01:00)', + tzCode: 'africa/windhoek', + name: '(GMT+01:00) Windhoek, Rundu, Walvis Bay, Oshakati, Swakopmund', + utc: '+01:00', + id: 207 + }, + { + label: 'Arctic/Longyearbyen (GMT+01:00)', + tzCode: 'arctic/longyearbyen', + name: '(GMT+01:00) Longyearbyen, Olonkinbyen', + utc: '+01:00', + id: 208 + }, + { + label: 'Europe/Amsterdam (GMT+01:00)', + tzCode: 'europe/amsterdam', + name: '(GMT+01:00) Amsterdam, Rotterdam, The Hague, Utrecht, Eindhoven', + utc: '+01:00', + id: 209 + }, + { + label: 'Europe/Andorra (GMT+01:00)', + tzCode: 'europe/andorra', + name: '(GMT+01:00) Andorra la Vella, les Escaldes, Encamp, Sant Julià de Lòria, la Massana', + utc: '+01:00', + id: 210 + }, + { + label: 'Europe/Belgrade (GMT+01:00)', + tzCode: 'europe/belgrade', + name: '(GMT+01:00) Belgrade, Pristina, Niš, Novi Sad, Prizren', + utc: '+01:00', + id: 211 + }, + { + label: 'Europe/Berlin (GMT+01:00)', + tzCode: 'europe/berlin', + name: '(GMT+01:00) Berlin, Hamburg, Munich, Köln, Frankfurt am Main', + utc: '+01:00', + id: 212 + }, + { + label: 'Europe/Bratislava (GMT+01:00)', + tzCode: 'europe/bratislava', + name: '(GMT+01:00) Bratislava, Košice, Prešov, Nitra, Žilina', + utc: '+01:00', + id: 213 + }, + { + label: 'Europe/Brussels (GMT+01:00)', + tzCode: 'europe/brussels', + name: '(GMT+01:00) Brussels, Antwerpen, Gent, Charleroi, Liège', + utc: '+01:00', + id: 214 + }, + { + label: 'Europe/Budapest (GMT+01:00)', + tzCode: 'europe/budapest', + name: '(GMT+01:00) Budapest, Debrecen, Miskolc, Szeged, Pécs', + utc: '+01:00', + id: 215 + }, + { + label: 'Europe/Copenhagen (GMT+01:00)', + tzCode: 'europe/copenhagen', + name: '(GMT+01:00) Copenhagen, Århus, Odense, Aalborg, Frederiksberg', + utc: '+01:00', + id: 216 + }, + { + label: 'Europe/Gibraltar (GMT+01:00)', + tzCode: 'europe/gibraltar', + name: '(GMT+01:00) Gibraltar', + utc: '+01:00', + id: 217 + }, + { + label: 'Europe/Ljubljana (GMT+01:00)', + tzCode: 'europe/ljubljana', + name: '(GMT+01:00) Ljubljana, Maribor, Celje, Kranj, Velenje', + utc: '+01:00', + id: 218 + }, + { + label: 'Europe/Luxembourg (GMT+01:00)', + tzCode: 'europe/luxembourg', + name: '(GMT+01:00) Luxembourg, Esch-sur-Alzette, Dudelange, Schifflange, Bettembourg', + utc: '+01:00', + id: 219 + }, + { + label: 'Europe/Madrid (GMT+01:00)', + tzCode: 'europe/madrid', + name: '(GMT+01:00) Madrid, Barcelona, Valencia, Sevilla, Zaragoza', + utc: '+01:00', + id: 220 + }, + { + label: 'Europe/Malta (GMT+01:00)', + tzCode: 'europe/malta', + name: '(GMT+01:00) Birkirkara, Qormi, Mosta, Żabbar, San Pawl il-Baħar', + utc: '+01:00', + id: 221 + }, + { + label: 'Europe/Monaco (GMT+01:00)', + tzCode: 'europe/monaco', + name: '(GMT+01:00) Monaco, Monte-Carlo, La Condamine', + utc: '+01:00', + id: 222 + }, + { + label: 'Europe/Oslo (GMT+01:00)', + tzCode: 'europe/oslo', + name: '(GMT+01:00) Oslo, Bergen, Trondheim, Stavanger, Drammen', + utc: '+01:00', + id: 223 + }, + { + label: 'Europe/Paris (GMT+01:00)', + tzCode: 'europe/paris', + name: '(GMT+01:00) Paris, Marseille, Lyon, Toulouse, Nice', + utc: '+01:00', + id: 224 + }, + { + label: 'Europe/Podgorica (GMT+01:00)', + tzCode: 'europe/podgorica', + name: '(GMT+01:00) Podgorica, Nikšić, Herceg Novi, Pljevlja, Budva', + utc: '+01:00', + id: 225 + }, + { + label: 'Europe/Prague (GMT+01:00)', + tzCode: 'europe/prague', + name: '(GMT+01:00) Prague, Brno, Ostrava, Pilsen, Olomouc', + utc: '+01:00', + id: 226 + }, + { + label: 'Europe/Rome (GMT+01:00)', + tzCode: 'europe/rome', + name: '(GMT+01:00) Rome, Milan, Naples, Turin, Palermo', + utc: '+01:00', + id: 227 + }, + { + label: 'Europe/San_Marino (GMT+01:00)', + tzCode: 'europe/san_marino', + name: '(GMT+01:00) Serravalle, Borgo Maggiore, San Marino, Domagnano, Fiorentino', + utc: '+01:00', + id: 228 + }, + { + label: 'Europe/Sarajevo (GMT+01:00)', + tzCode: 'europe/sarajevo', + name: '(GMT+01:00) Sarajevo, Banja Luka, Zenica, Tuzla, Mostar', + utc: '+01:00', + id: 229 + }, + { + label: 'Europe/Skopje (GMT+01:00)', + tzCode: 'europe/skopje', + name: '(GMT+01:00) Skopje, Bitola, Kumanovo, Prilep, Tetovo', + utc: '+01:00', + id: 230 + }, + { + label: 'Europe/Stockholm (GMT+01:00)', + tzCode: 'europe/stockholm', + name: '(GMT+01:00) Stockholm, Göteborg, Malmö, Uppsala, Sollentuna', + utc: '+01:00', + id: 231 + }, + { + label: 'Europe/Tirane (GMT+01:00)', + tzCode: 'europe/tirane', + name: '(GMT+01:00) Tirana, Durrës, Elbasan, Vlorë, Shkodër', + utc: '+01:00', + id: 232 + }, + { + label: 'Europe/Vaduz (GMT+01:00)', + tzCode: 'europe/vaduz', + name: '(GMT+01:00) Schaan, Vaduz, Triesen, Balzers, Eschen', + utc: '+01:00', + id: 233 + }, + { + label: 'Europe/Vatican (GMT+01:00)', + tzCode: 'europe/vatican', + name: '(GMT+01:00) Vatican City', + utc: '+01:00', + id: 234 + }, + { + label: 'Europe/Vienna (GMT+01:00)', + tzCode: 'europe/vienna', + name: '(GMT+01:00) Vienna, Graz, Linz', + utc: '+01:00', + id: 235 + }, + { + label: 'Europe/Warsaw (GMT+01:00)', + tzCode: 'europe/warsaw', + name: '(GMT+01:00) Warsaw, Łódź, Kraków, Wrocław, Poznań', + utc: '+01:00', + id: 236 + }, + { + label: 'Europe/Zagreb (GMT+01:00)', + tzCode: 'europe/zagreb', + name: '(GMT+01:00) Zagreb, Split, Rijeka, Osijek, Zadar', + utc: '+01:00', + id: 237 + }, + { + label: 'Europe/Zurich (GMT+01:00)', + tzCode: 'europe/zurich', + name: '(GMT+01:00) Zürich, Genève, Basel, Lausanne, Bern', + utc: '+01:00', + id: 238 + }, + { + label: 'Africa/Blantyre (GMT+02:00)', + tzCode: 'africa/blantyre', + name: '(GMT+02:00) Lilongwe, Blantyre, Mzuzu, Zomba, Kasungu', + utc: '+02:00', + id: 239 + }, + { + label: 'Africa/Bujumbura (GMT+02:00)', + tzCode: 'africa/bujumbura', + name: '(GMT+02:00) Bujumbura, Muyinga, Gitega, Ruyigi, Ngozi', + utc: '+02:00', + id: 240 + }, + { + label: 'Africa/Cairo (GMT+02:00)', + tzCode: 'africa/cairo', + name: '(GMT+02:00) Cairo, Alexandria, Giza, Port Said, Suez', + utc: '+02:00', + id: 241 + }, + { + label: 'Africa/Gaborone (GMT+02:00)', + tzCode: 'africa/gaborone', + name: '(GMT+02:00) Gaborone, Francistown, Molepolole, Selebi-Phikwe, Maun', + utc: '+02:00', + id: 242 + }, + { + label: 'Africa/Harare (GMT+02:00)', + tzCode: 'africa/harare', + name: '(GMT+02:00) Harare, Bulawayo, Chitungwiza, Mutare, Gweru', + utc: '+02:00', + id: 243 + }, + { + label: 'Africa/Johannesburg (GMT+02:00)', + tzCode: 'africa/johannesburg', + name: '(GMT+02:00) Cape Town, Durban, Johannesburg, Soweto, Pretoria', + utc: '+02:00', + id: 244 + }, + { + label: 'Africa/Juba (GMT+02:00)', + tzCode: 'africa/juba', + name: '(GMT+02:00) Juba, Winejok, Malakal, Wau, Kuacjok', + utc: '+02:00', + id: 245 + }, + { + label: 'Africa/Khartoum (GMT+02:00)', + tzCode: 'africa/khartoum', + name: '(GMT+02:00) Khartoum, Omdurman, Nyala, Port Sudan, Kassala', + utc: '+02:00', + id: 246 + }, + { + label: 'Africa/Kigali (GMT+02:00)', + tzCode: 'africa/kigali', + name: '(GMT+02:00) Kigali, Butare, Gitarama, Musanze, Gisenyi', + utc: '+02:00', + id: 247 + }, + { + label: 'Africa/Lubumbashi (GMT+02:00)', + tzCode: 'africa/lubumbashi', + name: '(GMT+02:00) Lubumbashi, Mbuji-Mayi, Kisangani, Kananga, Likasi', + utc: '+02:00', + id: 248 + }, + { + label: 'Africa/Lusaka (GMT+02:00)', + tzCode: 'africa/lusaka', + name: '(GMT+02:00) Lusaka, Kitwe, Ndola, Kabwe, Chingola', + utc: '+02:00', + id: 249 + }, + { + label: 'Africa/Maputo (GMT+02:00)', + tzCode: 'africa/maputo', + name: '(GMT+02:00) Maputo, Matola, Beira, Nampula, Chimoio', + utc: '+02:00', + id: 250 + }, + { + label: 'Africa/Maseru (GMT+02:00)', + tzCode: 'africa/maseru', + name: '(GMT+02:00) Maseru, Mafeteng, Leribe, Maputsoe, Mohale’s Hoek', + utc: '+02:00', + id: 251 + }, + { + label: 'Africa/Mbabane (GMT+02:00)', + tzCode: 'africa/mbabane', + name: '(GMT+02:00) Manzini, Mbabane, Big Bend, Malkerns, Nhlangano', + utc: '+02:00', + id: 252 + }, + { + label: 'Africa/Tripoli (GMT+02:00)', + tzCode: 'africa/tripoli', + name: '(GMT+02:00) Tripoli, Benghazi, Mişrātah, Tarhuna, Al Khums', + utc: '+02:00', + id: 253 + }, + { + label: 'Asia/Amman (GMT+02:00)', + tzCode: 'asia/amman', + name: '(GMT+02:00) Amman, Zarqa, Irbid, Russeifa, Wādī as Sīr', + utc: '+02:00', + id: 254 + }, + { + label: 'Asia/Beirut (GMT+02:00)', + tzCode: 'asia/beirut', + name: '(GMT+02:00) Beirut, Ra’s Bayrūt, Tripoli, Sidon, Tyre', + utc: '+02:00', + id: 255 + }, + { + label: 'Asia/Damascus (GMT+02:00)', + tzCode: 'asia/damascus', + name: '(GMT+02:00) Aleppo, Damascus, Homs, Ḩamāh, Latakia', + utc: '+02:00', + id: 256 + }, + { + label: 'Asia/Famagusta (GMT+02:00)', + tzCode: 'asia/famagusta', + name: '(GMT+02:00) Famagusta, Kyrenia, Protaras, Paralímni, Lápithos', + utc: '+02:00', + id: 257 + }, + { + label: 'Asia/Gaza (GMT+02:00)', + tzCode: 'asia/gaza', + name: '(GMT+02:00) Gaza, Khān Yūnis, Jabālyā, Rafaḩ, Dayr al Balaḩ', + utc: '+02:00', + id: 258 + }, + { + label: 'Asia/Hebron (GMT+02:00)', + tzCode: 'asia/hebron', + name: '(GMT+02:00) East Jerusalem, Hebron, Nablus, Battir, Ţūlkarm', + utc: '+02:00', + id: 259 + }, + { + label: 'Asia/Jerusalem (GMT+02:00)', + tzCode: 'asia/jerusalem', + name: '(GMT+02:00) Jerusalem, Tel Aviv, West Jerusalem, Haifa, Ashdod', + utc: '+02:00', + id: 260 + }, + { + label: 'Asia/Nicosia (GMT+02:00)', + tzCode: 'asia/nicosia', + name: '(GMT+02:00) Nicosia, Limassol, Larnaca, Stróvolos, Paphos', + utc: '+02:00', + id: 261 + }, + { + label: 'Europe/Athens (GMT+02:00)', + tzCode: 'europe/athens', + name: '(GMT+02:00) Athens, Thessaloníki, Pátra, Piraeus, Lárisa', + utc: '+02:00', + id: 262 + }, + { + label: 'Europe/Bucharest (GMT+02:00)', + tzCode: 'europe/bucharest', + name: '(GMT+02:00) Bucharest, Sector 3, Sector 6, Sector 2, Iaşi', + utc: '+02:00', + id: 263 + }, + { + label: 'Europe/Chisinau (GMT+02:00)', + tzCode: 'europe/chisinau', + name: '(GMT+02:00) Chisinau, Tiraspol, Bălţi, Bender, Rîbniţa', + utc: '+02:00', + id: 264 + }, + { + label: 'Europe/Helsinki (GMT+02:00)', + tzCode: 'europe/helsinki', + name: '(GMT+02:00) Helsinki, Espoo, Tampere, Vantaa, Turku', + utc: '+02:00', + id: 265 + }, + { + label: 'Europe/Kaliningrad (GMT+02:00)', + tzCode: 'europe/kaliningrad', + name: '(GMT+02:00) Kaliningrad, Chernyakhovsk, Sovetsk, Baltiysk, Gusev', + utc: '+02:00', + id: 266 + }, + { + label: 'Europe/Kyiv (GMT+02:00)', + tzCode: 'europe/kyiv', + name: '(GMT+02:00) Kyiv, Kharkiv, Donetsk, Odesa, Dnipro', + utc: '+02:00', + id: 267 + }, + { + label: 'Europe/Mariehamn (GMT+02:00)', + tzCode: 'europe/mariehamn', + name: '(GMT+02:00) Mariehamn', + utc: '+02:00', + id: 268 + }, + { + label: 'Europe/Riga (GMT+02:00)', + tzCode: 'europe/riga', + name: '(GMT+02:00) Riga, Daugavpils, Liepāja, Jelgava, Jūrmala', + utc: '+02:00', + id: 269 + }, + { + label: 'Europe/Sofia (GMT+02:00)', + tzCode: 'europe/sofia', + name: '(GMT+02:00) Sofia, Plovdiv, Varna, Burgas, Ruse', + utc: '+02:00', + id: 270 + }, + { + label: 'Europe/Tallinn (GMT+02:00)', + tzCode: 'europe/tallinn', + name: '(GMT+02:00) Tallinn, Tartu, Narva, Kohtla-Järve, Pärnu', + utc: '+02:00', + id: 271 + }, + { + label: 'Europe/Uzhgorod (GMT+02:00)', + tzCode: 'europe/uzhgorod', + name: '(GMT+02:00) Uzhgorod, Mukachevo, Khust, Berehove, Tyachiv', + utc: '+02:00', + id: 272 + }, + { + label: 'Europe/Vilnius (GMT+02:00)', + tzCode: 'europe/vilnius', + name: '(GMT+02:00) Vilnius, Kaunas, Klaipėda, Šiauliai, Panevėžys', + utc: '+02:00', + id: 273 + }, + { + label: 'Europe/Zaporizhzhia (GMT+02:00)', + tzCode: 'europe/zaporizhzhia', + name: '(GMT+02:00) Luhansk, Sevastopol, Sievierodonetsk, Alchevsk, Lysychansk', + utc: '+02:00', + id: 274 + }, + { + label: 'Africa/Addis_Ababa (GMT+03:00)', + tzCode: 'africa/addis_ababa', + name: "(GMT+03:00) Addis Ababa, Dire Dawa, Mek'ele, Nazrēt, Bahir Dar", + utc: '+03:00', + id: 275 + }, + { + label: 'Africa/Asmara (GMT+03:00)', + tzCode: 'africa/asmara', + name: '(GMT+03:00) Asmara, Keren, Massawa, Assab, Mendefera', + utc: '+03:00', + id: 276 + }, + { + label: 'Africa/Dar_es_Salaam (GMT+03:00)', + tzCode: 'africa/dar_es_salaam', + name: '(GMT+03:00) Dar es Salaam, Mwanza, Zanzibar, Arusha, Mbeya', + utc: '+03:00', + id: 277 + }, + { + label: 'Africa/Djibouti (GMT+03:00)', + tzCode: 'africa/djibouti', + name: "(GMT+03:00) Djibouti, 'Ali Sabieh, Tadjourah, Obock, Dikhil", + utc: '+03:00', + id: 278 + }, + { + label: 'Africa/Kampala (GMT+03:00)', + tzCode: 'africa/kampala', + name: '(GMT+03:00) Kampala, Gulu, Lira, Mbarara, Jinja', + utc: '+03:00', + id: 279 + }, + { + label: 'Africa/Mogadishu (GMT+03:00)', + tzCode: 'africa/mogadishu', + name: '(GMT+03:00) Mogadishu, Hargeysa, Berbera, Kismayo, Marka', + utc: '+03:00', + id: 280 + }, + { + label: 'Africa/Nairobi (GMT+03:00)', + tzCode: 'africa/nairobi', + name: '(GMT+03:00) Nairobi, Mombasa, Nakuru, Eldoret, Kisumu', + utc: '+03:00', + id: 281 + }, + { + label: 'Antarctica/Syowa (GMT+03:00)', + tzCode: 'antarctica/syowa', + name: '(GMT+03:00) Syowa', + utc: '+03:00', + id: 282 + }, + { + label: 'Asia/Aden (GMT+03:00)', + tzCode: 'asia/aden', + name: '(GMT+03:00) Sanaa, Al Ḩudaydah, Taiz, Aden, Mukalla', + utc: '+03:00', + id: 283 + }, + { + label: 'Asia/Baghdad (GMT+03:00)', + tzCode: 'asia/baghdad', + name: '(GMT+03:00) Baghdad, Basrah, Al Mawşil al Jadīdah, Al Başrah al Qadīmah, Mosul', + utc: '+03:00', + id: 284 + }, + { + label: 'Asia/Bahrain (GMT+03:00)', + tzCode: 'asia/bahrain', + name: '(GMT+03:00) Manama, Al Muharraq, Ar Rifā‘, Dār Kulayb, Madīnat Ḩamad', + utc: '+03:00', + id: 285 + }, + { + label: 'Asia/Kuwait (GMT+03:00)', + tzCode: 'asia/kuwait', + name: '(GMT+03:00) Al Aḩmadī, Ḩawallī, As Sālimīyah, Şabāḩ as Sālim, Al Farwānīyah', + utc: '+03:00', + id: 286 + }, + { + label: 'Asia/Qatar (GMT+03:00)', + tzCode: 'asia/qatar', + name: '(GMT+03:00) Doha, Ar Rayyān, Umm Şalāl Muḩammad, Al Wakrah, Al Khawr', + utc: '+03:00', + id: 287 + }, + { + label: 'Asia/Riyadh (GMT+03:00)', + tzCode: 'asia/riyadh', + name: '(GMT+03:00) Riyadh, Jeddah, Mecca, Medina, Sulţānah', + utc: '+03:00', + id: 288 + }, + { + label: 'Europe/Istanbul (GMT+03:00)', + tzCode: 'europe/istanbul', + name: '(GMT+03:00) Istanbul, Ankara, İzmir, Bursa, Adana', + utc: '+03:00', + id: 289 + }, + { + label: 'Europe/Kirov (GMT+03:00)', + tzCode: 'europe/kirov', + name: '(GMT+03:00) Kirov, Kirovo-Chepetsk, Vyatskiye Polyany, Slobodskoy, Kotel’nich', + utc: '+03:00', + id: 290 + }, + { + label: 'Europe/Minsk (GMT+03:00)', + tzCode: 'europe/minsk', + name: "(GMT+03:00) Minsk, Homyel', Mahilyow, Vitebsk, Hrodna", + utc: '+03:00', + id: 291 + }, + { + label: 'Europe/Moscow (GMT+03:00)', + tzCode: 'europe/moscow', + name: '(GMT+03:00) Moscow, Saint Petersburg, Nizhniy Novgorod, Kazan, Rostov-na-Donu', + utc: '+03:00', + id: 292 + }, + { + label: 'Europe/Simferopol (GMT+03:00)', + tzCode: 'europe/simferopol', + name: '(GMT+03:00) Simferopol, Kerch, Yevpatoriya, Yalta, Feodosiya', + utc: '+03:00', + id: 293 + }, + { + label: 'Europe/Volgograd (GMT+03:00)', + tzCode: 'europe/volgograd', + name: '(GMT+03:00) Volgograd, Volzhskiy, Kamyshin, Mikhaylovka, Uryupinsk', + utc: '+03:00', + id: 294 + }, + { + label: 'Indian/Antananarivo (GMT+03:00)', + tzCode: 'indian/antananarivo', + name: '(GMT+03:00) Antananarivo, Toamasina, Antsirabe, Fianarantsoa, Mahajanga', + utc: '+03:00', + id: 295 + }, + { + label: 'Indian/Comoro (GMT+03:00)', + tzCode: 'indian/comoro', + name: '(GMT+03:00) Moroni, Moutsamoudou, Fomboni, Domoni, Tsimbeo', + utc: '+03:00', + id: 296 + }, + { + label: 'Indian/Mayotte (GMT+03:00)', + tzCode: 'indian/mayotte', + name: '(GMT+03:00) Mamoudzou, Koungou, Dzaoudzi, Dembeni, Sada', + utc: '+03:00', + id: 297 + }, + { + label: 'Asia/Tehran (GMT+03:30)', + tzCode: 'asia/tehran', + name: '(GMT+03:30) Tehran, Mashhad, Isfahan, Karaj, Tabriz', + utc: '+03:30', + id: 298 + }, + { + label: 'Asia/Baku (GMT+04:00)', + tzCode: 'asia/baku', + name: '(GMT+04:00) Baku, Ganja, Sumqayıt, Lankaran, Yevlakh', + utc: '+04:00', + id: 299 + }, + { + label: 'Asia/Dubai (GMT+04:00)', + tzCode: 'asia/dubai', + name: '(GMT+04:00) Dubai, Sharjah, Abu Dhabi, Ajman City, Ras Al Khaimah City', + utc: '+04:00', + id: 300 + }, + { + label: 'Asia/Muscat (GMT+04:00)', + tzCode: 'asia/muscat', + name: '(GMT+04:00) Muscat, Seeb, Şalālah, Bawshar, Sohar', + utc: '+04:00', + id: 301 + }, + { + label: 'Asia/Tbilisi (GMT+04:00)', + tzCode: 'asia/tbilisi', + name: '(GMT+04:00) Tbilisi, Kutaisi, Batumi, Sokhumi, Zugdidi', + utc: '+04:00', + id: 302 + }, + { + label: 'Asia/Yerevan (GMT+04:00)', + tzCode: 'asia/yerevan', + name: '(GMT+04:00) Yerevan, Gyumri, Vanadzor, Vagharshapat, Hrazdan', + utc: '+04:00', + id: 303 + }, + { + label: 'Europe/Astrakhan (GMT+04:00)', + tzCode: 'europe/astrakhan', + name: '(GMT+04:00) Astrakhan, Akhtubinsk, Znamensk, Kharabali, Kamyzyak', + utc: '+04:00', + id: 304 + }, + { + label: 'Europe/Samara (GMT+04:00)', + tzCode: 'europe/samara', + name: '(GMT+04:00) Samara, Togliatti-on-the-Volga, Izhevsk, Syzran’, Novokuybyshevsk', + utc: '+04:00', + id: 305 + }, + { + label: 'Europe/Saratov (GMT+04:00)', + tzCode: 'europe/saratov', + name: '(GMT+04:00) Saratov, Balakovo, Engel’s, Balashov, Vol’sk', + utc: '+04:00', + id: 306 + }, + { + label: 'Europe/Ulyanovsk (GMT+04:00)', + tzCode: 'europe/ulyanovsk', + name: '(GMT+04:00) Ulyanovsk, Dimitrovgrad, Inza, Barysh, Novoul’yanovsk', + utc: '+04:00', + id: 307 + }, + { + label: 'Indian/Mahe (GMT+04:00)', + tzCode: 'indian/mahe', + name: '(GMT+04:00) Victoria, Anse Boileau, Bel Ombre, Beau Vallon, Cascade', + utc: '+04:00', + id: 308 + }, + { + label: 'Indian/Mauritius (GMT+04:00)', + tzCode: 'indian/mauritius', + name: '(GMT+04:00) Port Louis, Beau Bassin-Rose Hill, Vacoas, Curepipe, Quatre Bornes', + utc: '+04:00', + id: 309 + }, + { + label: 'Indian/Reunion (GMT+04:00)', + tzCode: 'indian/reunion', + name: '(GMT+04:00) Saint-Denis, Saint-Paul, Saint-Pierre, Le Tampon, Saint-André', + utc: '+04:00', + id: 310 + }, + { + label: 'Asia/Kabul (GMT+04:30)', + tzCode: 'asia/kabul', + name: '(GMT+04:30) Kabul, Kandahār, Mazār-e Sharīf, Herāt, Jalālābād', + utc: '+04:30', + id: 311 + }, + { + label: 'Antarctica/Mawson (GMT+05:00)', + tzCode: 'antarctica/mawson', + name: '(GMT+05:00) Mawson', + utc: '+05:00', + id: 312 + }, + { + label: 'Asia/Aqtau (GMT+05:00)', + tzCode: 'asia/aqtau', + name: '(GMT+05:00) Shevchenko, Zhanaozen, Beyneu, Shetpe, Yeraliyev', + utc: '+05:00', + id: 313 + }, + { + label: 'Asia/Aqtobe (GMT+05:00)', + tzCode: 'asia/aqtobe', + name: '(GMT+05:00) Aktobe, Kandyagash, Shalqar, Khromtau, Embi', + utc: '+05:00', + id: 314 + }, + { + label: 'Asia/Ashgabat (GMT+05:00)', + tzCode: 'asia/ashgabat', + name: '(GMT+05:00) Ashgabat, Türkmenabat, Daşoguz, Mary, Balkanabat', + utc: '+05:00', + id: 315 + }, + { + label: 'Asia/Atyrau (GMT+05:00)', + tzCode: 'asia/atyrau', + name: '(GMT+05:00) Atyrau, Qulsary, Shalkar, Balykshi, Maqat', + utc: '+05:00', + id: 316 + }, + { + label: 'Asia/Dushanbe (GMT+05:00)', + tzCode: 'asia/dushanbe', + name: '(GMT+05:00) Dushanbe, Khujand, Kŭlob, Bokhtar, Istaravshan', + utc: '+05:00', + id: 317 + }, + { + label: 'Asia/Karachi (GMT+05:00)', + tzCode: 'asia/karachi', + name: '(GMT+05:00) Karachi, Lahore, Faisalabad, Rawalpindi, Multan', + utc: '+05:00', + id: 318 + }, + { + label: 'Asia/Oral (GMT+05:00)', + tzCode: 'asia/oral', + name: '(GMT+05:00) Oral, Aqsay, Zhänibek, Tasqala, Zhumysker', + utc: '+05:00', + id: 319 + }, + { + label: 'Asia/Qyzylorda (GMT+05:00)', + tzCode: 'asia/qyzylorda', + name: '(GMT+05:00) Kyzylorda, Baikonur, Novokazalinsk, Aral, Chiili', + utc: '+05:00', + id: 320 + }, + { + label: 'Asia/Samarkand (GMT+05:00)', + tzCode: 'asia/samarkand', + name: '(GMT+05:00) Samarkand, Bukhara, Nukus, Qarshi, Jizzax', + utc: '+05:00', + id: 321 + }, + { + label: 'Asia/Tashkent (GMT+05:00)', + tzCode: 'asia/tashkent', + name: '(GMT+05:00) Tashkent, Namangan, Andijon, Qo‘qon, Chirchiq', + utc: '+05:00', + id: 322 + }, + { + label: 'Asia/Yekaterinburg (GMT+05:00)', + tzCode: 'asia/yekaterinburg', + name: '(GMT+05:00) Yekaterinburg, Chelyabinsk, Ufa, Perm, Orenburg', + utc: '+05:00', + id: 323 + }, + { + label: 'Indian/Kerguelen (GMT+05:00)', + tzCode: 'indian/kerguelen', + name: '(GMT+05:00) Port-aux-Français', + utc: '+05:00', + id: 324 + }, + { + label: 'Indian/Maldives (GMT+05:00)', + tzCode: 'indian/maldives', + name: '(GMT+05:00) Male, Fuvahmulah, Hithadhoo, Kulhudhuffushi, Thinadhoo', + utc: '+05:00', + id: 325 + }, + { + label: 'Asia/Colombo (GMT+05:30)', + tzCode: 'asia/colombo', + name: '(GMT+05:30) Colombo, Dehiwala-Mount Lavinia, Moratuwa, Jaffna, Negombo', + utc: '+05:30', + id: 326 + }, + { + label: 'Asia/Kolkata (GMT+05:30)', + tzCode: 'asia/kolkata', + name: '(GMT+05:30) Mumbai, Delhi, Bengaluru, Kolkata, Chennai', + utc: '+05:30', + id: 327 + }, + { + label: 'Asia/Kathmandu (GMT+05:45)', + tzCode: 'asia/kathmandu', + name: '(GMT+05:45) Kathmandu, Pokhara, Pātan, Biratnagar, Birgañj', + utc: '+05:45', + id: 328 + }, + { + label: 'Antarctica/Vostok (GMT+06:00)', + tzCode: 'antarctica/vostok', + name: '(GMT+06:00) Vostok', + utc: '+06:00', + id: 329 + }, + { + label: 'Asia/Almaty (GMT+06:00)', + tzCode: 'asia/almaty', + name: '(GMT+06:00) Almaty, Karagandy, Shymkent, Taraz, Nur-Sultan', + utc: '+06:00', + id: 330 + }, + { + label: 'Asia/Bishkek (GMT+06:00)', + tzCode: 'asia/bishkek', + name: '(GMT+06:00) Bishkek, Osh, Jalal-Abad, Karakol, Tokmok', + utc: '+06:00', + id: 331 + }, + { + label: 'Asia/Dhaka (GMT+06:00)', + tzCode: 'asia/dhaka', + name: '(GMT+06:00) Dhaka, Chattogram, Khulna, Rājshāhi, Comilla', + utc: '+06:00', + id: 332 + }, + { + label: 'Asia/Omsk (GMT+06:00)', + tzCode: 'asia/omsk', + name: '(GMT+06:00) Omsk, Tara, Kalachinsk, Znamenskoye, Tavricheskoye', + utc: '+06:00', + id: 333 + }, + { + label: 'Asia/Qostanay (GMT+06:00)', + tzCode: 'asia/qostanay', + name: '(GMT+06:00) Kostanay, Rudnyy, Dzhetygara, Arkalyk, Lisakovsk', + utc: '+06:00', + id: 334 + }, + { + label: 'Asia/Thimphu (GMT+06:00)', + tzCode: 'asia/thimphu', + name: '(GMT+06:00) himphu, Punākha, Tsirang, Phuntsholing, Pemagatshel', + utc: '+06:00', + id: 335 + }, + { + label: 'Asia/Urumqi (GMT+06:00)', + tzCode: 'asia/urumqi', + name: '(GMT+06:00) Zhongshan, Ürümqi, Zhanjiang, Shihezi, Huocheng', + utc: '+06:00', + id: 336 + }, + { + label: 'Indian/Chagos (GMT+06:00)', + tzCode: 'indian/chagos', + name: '(GMT+06:00) British Indian Ocean Territory', + utc: '+06:00', + id: 337 + }, + { + label: 'Asia/Yangon (GMT+06:30)', + tzCode: 'asia/yangon', + name: '(GMT+06:30) Yangon, Mandalay, Nay Pyi Taw, Mawlamyine, Kyain Seikgyi Township', + utc: '+06:30', + id: 338 + }, + { + label: 'Indian/Cocos (GMT+06:30)', + tzCode: 'indian/cocos', + name: '(GMT+06:30) West Island', + utc: '+06:30', + id: 339 + }, + { + label: 'Antarctica/Davis (GMT+07:00)', + tzCode: 'antarctica/davis', + name: '(GMT+07:00) Davis', + utc: '+07:00', + id: 340 + }, + { + label: 'Asia/Bangkok (GMT+07:00)', + tzCode: 'asia/bangkok', + name: '(GMT+07:00) Bangkok, Hanoi, Haiphong, Samut Prakan, Mueang Nonthaburi', + utc: '+07:00', + id: 341 + }, + { + label: 'Asia/Barnaul (GMT+07:00)', + tzCode: 'asia/barnaul', + name: '(GMT+07:00) Barnaul, Biysk, Rubtsovsk, Novoaltaysk, Gorno-Altaysk', + utc: '+07:00', + id: 342 + }, + { + label: 'Asia/Hovd (GMT+07:00)', + tzCode: 'asia/hovd', + name: '(GMT+07:00) Khovd, Ölgii, Ulaangom, Uliastay, Altai', + utc: '+07:00', + id: 343 + }, + { + label: 'Asia/Ho_Chi_Minh (GMT+07:00)', + tzCode: 'asia/ho_chi_minh', + name: '(GMT+07:00) Ho Chi Minh City, Da Nang, Biên Hòa, Nha Trang, Cần Thơ', + utc: '+07:00', + id: 344 + }, + { + label: 'Asia/Jakarta (GMT+07:00)', + tzCode: 'asia/jakarta', + name: '(GMT+07:00) Jakarta, Surabaya, Medan, Bandung, Bekasi', + utc: '+07:00', + id: 345 + }, + { + label: 'Asia/Krasnoyarsk (GMT+07:00)', + tzCode: 'asia/krasnoyarsk', + name: '(GMT+07:00) Krasnoyarsk, Abakan, Norilsk, Achinsk, Kyzyl', + utc: '+07:00', + id: 346 + }, + { + label: 'Asia/Novokuznetsk (GMT+07:00)', + tzCode: 'asia/novokuznetsk', + name: '(GMT+07:00) Novokuznetsk, Kemerovo, Prokop’yevsk, Leninsk-Kuznetsky, Kiselëvsk', + utc: '+07:00', + id: 347 + }, + { + label: 'Asia/Novosibirsk (GMT+07:00)', + tzCode: 'asia/novosibirsk', + name: '(GMT+07:00) Novosibirsk, Berdsk, Iskitim, Akademgorodok, Kuybyshev', + utc: '+07:00', + id: 348 + }, + { + label: 'Asia/Phnom_Penh (GMT+07:00)', + tzCode: 'asia/phnom_penh', + name: '(GMT+07:00) Phnom Penh, Takeo, Sihanoukville, Battambang, Siem Reap', + utc: '+07:00', + id: 349 + }, + { + label: 'Asia/Pontianak (GMT+07:00)', + tzCode: 'asia/pontianak', + name: '(GMT+07:00) Pontianak, Tanjung Pinang, Palangkaraya, Singkawang, Sampit', + utc: '+07:00', + id: 350 + }, + { + label: 'Asia/Tomsk (GMT+07:00)', + tzCode: 'asia/tomsk', + name: '(GMT+07:00) Tomsk, Seversk, Strezhevoy, Kolpashevo, Asino', + utc: '+07:00', + id: 351 + }, + { + label: 'Asia/Vientiane (GMT+07:00)', + tzCode: 'asia/vientiane', + name: '(GMT+07:00) Vientiane, Pakse, Thakhèk, Savannakhet, Luang Prabang', + utc: '+07:00', + id: 352 + }, + { + label: 'Indian/Christmas (GMT+07:00)', + tzCode: 'indian/christmas', + name: '(GMT+07:00) Flying Fish Cove', + utc: '+07:00', + id: 353 + }, + { + label: 'Asia/Brunei (GMT+08:00)', + tzCode: 'asia/brunei', + name: '(GMT+08:00) Bandar Seri Begawan, Kuala Belait, Seria, Tutong, Bangar', + utc: '+08:00', + id: 354 + }, + { + label: 'Asia/Choibalsan (GMT+08:00)', + tzCode: 'asia/choibalsan', + name: '(GMT+08:00) Baruun-Urt, Choibalsan', + utc: '+08:00', + id: 355 + }, + { + label: 'Asia/Hong_Kong (GMT+08:00)', + tzCode: 'asia/hong_kong', + name: '(GMT+08:00) Hong Kong, Kowloon, Tsuen Wan, Yuen Long Kau Hui, Tung Chung', + utc: '+08:00', + id: 356 + }, + { + label: 'Asia/Irkutsk (GMT+08:00)', + tzCode: 'asia/irkutsk', + name: '(GMT+08:00) Irkutsk, Ulan-Ude, Bratsk, Angarsk, Ust’-Ilimsk', + utc: '+08:00', + id: 357 + }, + { + label: 'Asia/Kuala_Lumpur (GMT+08:00)', + tzCode: 'asia/kuala_lumpur', + name: '(GMT+08:00) Kota Bharu, Kuala Lumpur, Klang, Kampung Baru Subang, Johor Bahru', + utc: '+08:00', + id: 358 + }, + { + label: 'Asia/Kuching (GMT+08:00)', + tzCode: 'asia/kuching', + name: '(GMT+08:00) Kuching, Kota Kinabalu, Sandakan, Tawau, Miri', + utc: '+08:00', + id: 359 + }, + { + label: 'Asia/Macau (GMT+08:00)', + tzCode: 'asia/macau', + name: '(GMT+08:00) Macau', + utc: '+08:00', + id: 360 + }, + { + label: 'Asia/Makassar (GMT+08:00)', + tzCode: 'asia/makassar', + name: '(GMT+08:00) Makassar, Denpasar, City of Balikpapan, Banjarmasin, Manado', + utc: '+08:00', + id: 361 + }, + { + label: 'Asia/Manila (GMT+08:00)', + tzCode: 'asia/manila', + name: '(GMT+08:00) Quezon City, Manila, Caloocan City, Budta, Davao', + utc: '+08:00', + id: 362 + }, + { + label: 'Asia/Shanghai (GMT+08:00)', + tzCode: 'asia/shanghai', + name: '(GMT+08:00) Shanghai, Beijing, Tianjin, Guangzhou, Shenzhen', + utc: '+08:00', + id: 363 + }, + { + label: 'Asia/Singapore (GMT+08:00)', + tzCode: 'asia/singapore', + name: '(GMT+08:00) Singapore, Woodlands', + utc: '+08:00', + id: 364 + }, + { + label: 'Asia/Taipei (GMT+08:00)', + tzCode: 'asia/taipei', + name: '(GMT+08:00) Taipei, Kaohsiung, Taichung, Tainan, Banqiao', + utc: '+08:00', + id: 365 + }, + { + label: 'Asia/Ulaanbaatar (GMT+08:00)', + tzCode: 'asia/ulaanbaatar', + name: '(GMT+08:00) Ulan Bator, Erdenet, Darhan, Hovd, Mörön', + utc: '+08:00', + id: 366 + }, + { + label: 'Australia/Perth (GMT+08:00)', + tzCode: 'australia/perth', + name: '(GMT+08:00) Perth, Rockingham, Mandurah, Bunbury, Albany', + utc: '+08:00', + id: 367 + }, + { + label: 'Australia/Eucla (GMT+08:45)', + tzCode: 'australia/eucla', + name: '(GMT+08:45) Eucla', + utc: '+08:45', + id: 368 + }, + { + label: 'Asia/Chita (GMT+09:00)', + tzCode: 'asia/chita', + name: '(GMT+09:00) Chita, Krasnokamensk, Borzya, Petrovsk-Zabaykal’skiy, Aginskoye', + utc: '+09:00', + id: 369 + }, + { + label: 'Asia/Dili (GMT+09:00)', + tzCode: 'asia/dili', + name: '(GMT+09:00) Dili, Maliana, Suai, Likisá, Aileu', + utc: '+09:00', + id: 370 + }, + { + label: 'Asia/Jayapura (GMT+09:00)', + tzCode: 'asia/jayapura', + name: '(GMT+09:00) Ambon, Jayapura, Sorong, Ternate, Abepura', + utc: '+09:00', + id: 371 + }, + { + label: 'Asia/Khandyga (GMT+09:00)', + tzCode: 'asia/khandyga', + name: '(GMT+09:00) Khandyga', + utc: '+09:00', + id: 372 + }, + { + label: 'Asia/Pyongyang (GMT+09:00)', + tzCode: 'asia/pyongyang', + name: '(GMT+09:00) Pyongyang, Hamhŭng, Namp’o, Sunch’ŏn, Hŭngnam', + utc: '+09:00', + id: 373 + }, + { + label: 'Asia/Seoul (GMT+09:00)', + tzCode: 'asia/seoul', + name: '(GMT+09:00) Seoul, Busan, Incheon, Daegu, Daejeon', + utc: '+09:00', + id: 374 + }, + { + label: 'Asia/Tokyo (GMT+09:00)', + tzCode: 'asia/tokyo', + name: '(GMT+09:00) Tokyo, Yokohama, Osaka, Nagoya, Sapporo', + utc: '+09:00', + id: 375 + }, + { + label: 'Asia/Yakutsk (GMT+09:00)', + tzCode: 'asia/yakutsk', + name: '(GMT+09:00) Yakutsk, Blagoveshchensk, Belogorsk, Neryungri, Svobodnyy', + utc: '+09:00', + id: 376 + }, + { + label: 'Pacific/Palau (GMT+09:00)', + tzCode: 'pacific/palau', + name: '(GMT+09:00) Koror, Koror Town, Kloulklubed, Ulimang, Mengellang', + utc: '+09:00', + id: 377 + }, + { + label: 'Australia/Adelaide (GMT+09:30)', + tzCode: 'australia/adelaide', + name: '(GMT+09:30) Adelaide, Adelaide Hills, Mount Gambier, Morphett Vale, Gawler', + utc: '+09:30', + id: 378 + }, + { + label: 'Australia/Broken_Hill (GMT+09:30)', + tzCode: 'australia/broken_hill', + name: '(GMT+09:30) Broken Hill', + utc: '+09:30', + id: 379 + }, + { + label: 'Australia/Darwin (GMT+09:30)', + tzCode: 'australia/darwin', + name: '(GMT+09:30) Darwin, Alice Springs, Palmerston, Howard Springs', + utc: '+09:30', + id: 380 + }, + { + label: 'Antarctica/DumontDUrville (GMT+10:00)', + tzCode: 'antarctica/dumontdurville', + name: '(GMT+10:00) DumontDUrville', + utc: '+10:00', + id: 381 + }, + { + label: 'Antarctica/Macquarie (GMT+10:00)', + tzCode: 'antarctica/macquarie', + name: '(GMT+10:00) Macquarie', + utc: '+10:00', + id: 382 + }, + { + label: 'Asia/Ust-Nera (GMT+10:00)', + tzCode: 'asia/ust-nera', + name: '(GMT+10:00) Ust-Nera', + utc: '+10:00', + id: 383 + }, + { + label: 'Asia/Vladivostok (GMT+10:00)', + tzCode: 'asia/vladivostok', + name: '(GMT+10:00) Vladivostok, Khabarovsk, Khabarovsk Vtoroy, Komsomolsk-on-Amur, Ussuriysk', + utc: '+10:00', + id: 384 + }, + { + label: 'Australia/Brisbane (GMT+10:00)', + tzCode: 'australia/brisbane', + name: '(GMT+10:00) Brisbane, Gold Coast, Logan City, Townsville, Cairns', + utc: '+10:00', + id: 385 + }, + { + label: 'Australia/Currie (GMT+10:00)', + tzCode: 'australia/currie', + name: '(GMT+10:00) Currie', + utc: '+10:00', + id: 386 + }, + { + label: 'Australia/Hobart (GMT+10:00)', + tzCode: 'australia/hobart', + name: '(GMT+10:00) Hobart, Launceston, Burnie, Devonport, Sandy Bay', + utc: '+10:00', + id: 387 + }, + { + label: 'Australia/Lindeman (GMT+10:00)', + tzCode: 'australia/lindeman', + name: '(GMT+10:00) Lindeman', + utc: '+10:00', + id: 388 + }, + { + label: 'Australia/Melbourne (GMT+10:00)', + tzCode: 'australia/melbourne', + name: '(GMT+10:00) Melbourne, Geelong, Bendigo, Ballarat, Melbourne City Centre', + utc: '+10:00', + id: 389 + }, + { + label: 'Australia/Sydney (GMT+10:00)', + tzCode: 'australia/sydney', + name: '(GMT+10:00) Sydney, Canberra, Newcastle, Wollongong, Maitland', + utc: '+10:00', + id: 390 + }, + { + label: 'Pacific/Chuuk (GMT+10:00)', + tzCode: 'pacific/chuuk', + name: '(GMT+10:00) Weno, Colonia', + utc: '+10:00', + id: 391 + }, + { + label: 'Pacific/Guam (GMT+10:00)', + tzCode: 'pacific/guam', + name: '(GMT+10:00) Dededo Village, Yigo Village, Tamuning, Tamuning-Tumon-Harmon Village, Mangilao Village', + utc: '+10:00', + id: 392 + }, + { + label: 'Pacific/Port_Moresby (GMT+10:00)', + tzCode: 'pacific/port_moresby', + name: '(GMT+10:00) Port Moresby, Lae, Mount Hagen, Popondetta, Madang', + utc: '+10:00', + id: 393 + }, + { + label: 'Pacific/Saipan (GMT+10:00)', + tzCode: 'pacific/saipan', + name: '(GMT+10:00) Saipan, San Jose Village', + utc: '+10:00', + id: 394 + }, + { + label: 'Australia/Lord_Howe (GMT+10:30)', + tzCode: 'australia/lord_howe', + name: '(GMT+10:30) Lord Howe', + utc: '+10:30', + id: 395 + }, + { + label: 'Antarctica/Casey (GMT+11:00)', + tzCode: 'antarctica/casey', + name: '(GMT+11:00) Casey', + utc: '+11:00', + id: 396 + }, + { + label: 'Asia/Magadan (GMT+11:00)', + tzCode: 'asia/magadan', + name: '(GMT+11:00) Magadan, Ust-Nera, Susuman, Ola', + utc: '+11:00', + id: 397 + }, + { + label: 'Asia/Sakhalin (GMT+11:00)', + tzCode: 'asia/sakhalin', + name: '(GMT+11:00) Yuzhno-Sakhalinsk, Korsakov, Kholmsk, Okha, Nevel’sk', + utc: '+11:00', + id: 398 + }, + { + label: 'Asia/Srednekolymsk (GMT+11:00)', + tzCode: 'asia/srednekolymsk', + name: '(GMT+11:00) Srednekolymsk', + utc: '+11:00', + id: 399 + }, + { + label: 'Pacific/Bougainville (GMT+11:00)', + tzCode: 'pacific/bougainville', + name: '(GMT+11:00) Arawa, Buka', + utc: '+11:00', + id: 400 + }, + { + label: 'Pacific/Efate (GMT+11:00)', + tzCode: 'pacific/efate', + name: '(GMT+11:00) Port-Vila, Luganville, Isangel, Sola, Lakatoro', + utc: '+11:00', + id: 401 + }, + { + label: 'Pacific/Guadalcanal (GMT+11:00)', + tzCode: 'pacific/guadalcanal', + name: '(GMT+11:00) Honiara, Malango, Auki, Gizo, Buala', + utc: '+11:00', + id: 402 + }, + { + label: 'Pacific/Kosrae (GMT+11:00)', + tzCode: 'pacific/kosrae', + name: '(GMT+11:00) Tofol', + utc: '+11:00', + id: 403 + }, + { + label: 'Pacific/Norfolk (GMT+11:00)', + tzCode: 'pacific/norfolk', + name: '(GMT+11:00) Kingston', + utc: '+11:00', + id: 404 + }, + { + label: 'Pacific/Noumea (GMT+11:00)', + tzCode: 'pacific/noumea', + name: '(GMT+11:00) Nouméa, Mont-Dore, Dumbéa, Païta, Wé', + utc: '+11:00', + id: 405 + }, + { + label: 'Pacific/Pohnpei (GMT+11:00)', + tzCode: 'pacific/pohnpei', + name: '(GMT+11:00) Kolonia, Kolonia Town, Palikir - National Government Center', + utc: '+11:00', + id: 406 + }, + { + label: 'Antarctica/McMurdo (GMT+12:00)', + tzCode: 'antarctica/mcmurdo', + name: '(GMT+12:00) McMurdo', + utc: '+12:00', + id: 407 + }, + { + label: 'Asia/Anadyr (GMT+12:00)', + tzCode: 'asia/anadyr', + name: '(GMT+12:00) Anadyr, Bilibino', + utc: '+12:00', + id: 408 + }, + { + label: 'Asia/Kamchatka (GMT+12:00)', + tzCode: 'asia/kamchatka', + name: '(GMT+12:00) Petropavlovsk-Kamchatsky, Yelizovo, Vilyuchinsk, Klyuchi, Mil’kovo', + utc: '+12:00', + id: 409 + }, + { + label: 'Pacific/Auckland (GMT+12:00)', + tzCode: 'pacific/auckland', + name: '(GMT+12:00) Auckland, Wellington, Christchurch, Manukau City, North Shore', + utc: '+12:00', + id: 410 + }, + { + label: 'Pacific/Fiji (GMT+12:00)', + tzCode: 'pacific/fiji', + name: '(GMT+12:00) Suva, Lautoka, Nadi, Labasa, Ba', + utc: '+12:00', + id: 411 + }, + { + label: 'Pacific/Funafuti (GMT+12:00)', + tzCode: 'pacific/funafuti', + name: '(GMT+12:00) Funafuti, Savave Village, Tanrake Village, Toga Village, Asau Village', + utc: '+12:00', + id: 412 + }, + { + label: 'Pacific/Kwajalein (GMT+12:00)', + tzCode: 'pacific/kwajalein', + name: '(GMT+12:00) Ebaye, Jabat', + utc: '+12:00', + id: 413 + }, + { + label: 'Pacific/Majuro (GMT+12:00)', + tzCode: 'pacific/majuro', + name: '(GMT+12:00) Majuro, Arno, Jabor, Wotje, Mili', + utc: '+12:00', + id: 414 + }, + { + label: 'Pacific/Nauru (GMT+12:00)', + tzCode: 'pacific/nauru', + name: '(GMT+12:00) Yaren, Baiti, Anabar, Uaboe, Ijuw', + utc: '+12:00', + id: 415 + }, + { + label: 'Pacific/Tarawa (GMT+12:00)', + tzCode: 'pacific/tarawa', + name: '(GMT+12:00) Tarawa, Betio Village, Bikenibeu Village', + utc: '+12:00', + id: 416 + }, + { + label: 'Pacific/Wake (GMT+12:00)', + tzCode: 'pacific/wake', + name: '(GMT+12:00) Wake', + utc: '+12:00', + id: 417 + }, + { + label: 'Pacific/Wallis (GMT+12:00)', + tzCode: 'pacific/wallis', + name: '(GMT+12:00) Mata-Utu, Leava, Alo', + utc: '+12:00', + id: 418 + }, + { + label: 'Pacific/Chatham (GMT+12:45)', + tzCode: 'pacific/chatham', + name: '(GMT+12:45) Waitangi', + utc: '+12:45', + id: 419 + }, + { + label: 'Pacific/Apia (GMT+13:00)', + tzCode: 'pacific/apia', + name: '(GMT+13:00) Apia, Asau, Mulifanua, Afega, Leulumoega', + utc: '+13:00', + id: 420 + }, + { + label: 'Pacific/Enderbury (GMT+13:00)', + tzCode: 'pacific/enderbury', + name: '(GMT+13:00) Enderbury', + utc: '+13:00', + id: 421 + }, + { + label: 'Pacific/Fakaofo (GMT+13:00)', + tzCode: 'pacific/fakaofo', + name: '(GMT+13:00) Atafu Village, Nukunonu, Fale old settlement', + utc: '+13:00', + id: 422 + }, + { + label: 'Pacific/Tongatapu (GMT+13:00)', + tzCode: 'pacific/tongatapu', + name: '(GMT+13:00) Nuku‘alofa, Lapaha, Neiafu, Pangai, ‘Ohonua', + utc: '+13:00', + id: 423 + }, + { + label: 'Pacific/Kiritimati (GMT+14:00)', + tzCode: 'pacific/kiritimati', + name: '(GMT+14:00) Kiritimati', + utc: '+14:00', + id: 424 + } +].map(tz => ({ + ...tz, + utcOffsetInMinutes: getUtcOffsetInMinutes(tz.utc) +})); diff --git a/src/_shared/util/timezone/src/getUtcOffset.ts b/src/_shared/util/timezone/src/getUtcOffset.ts new file mode 100644 index 000000000..30d06c923 --- /dev/null +++ b/src/_shared/util/timezone/src/getUtcOffset.ts @@ -0,0 +1,5 @@ +export let getUtcOffsetInMinutes = (utc: string) => { + let sign = utc[0] == '-' ? -1 : 1; + let [hours, minutes] = utc.slice(1).split(':').map(Number); + return sign * (hours * 60 + minutes); +}; diff --git a/src/_shared/util/timezone/src/index.ts b/src/_shared/util/timezone/src/index.ts new file mode 100644 index 000000000..d36fdbd8a --- /dev/null +++ b/src/_shared/util/timezone/src/index.ts @@ -0,0 +1,22 @@ +import { data } from './data'; + +export interface Timezone { + label: string; + tzCode: string; + name: string; + utc: string; + id: number; + utcOffsetInMinutes: number; +} + +export let getTimezones = (): Timezone[] => data; + +let tzCodeMap = new Map(data.map(tz => [tz.tzCode, tz])); + +export let getTimezone = (tzCode: string | number): Timezone | undefined => { + if (typeof tzCode === 'number') return data[tzCode]; + + return tzCodeMap.get(tzCode.toLowerCase()); +}; + +export let defaultTimezone = data[0]; diff --git a/src/_shared/util/timezone/tsconfig.json b/src/_shared/util/timezone/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/timezone/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/unique/.gitignore b/src/_shared/util/unique/.gitignore new file mode 100644 index 000000000..a14702c40 --- /dev/null +++ b/src/_shared/util/unique/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/src/_shared/util/unique/package.json b/src/_shared/util/unique/package.json new file mode 100644 index 000000000..f4034de2a --- /dev/null +++ b/src/_shared/util/unique/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/unique", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/unique/src/index.test.ts b/src/_shared/util/unique/src/index.test.ts new file mode 100644 index 000000000..81715df66 --- /dev/null +++ b/src/_shared/util/unique/src/index.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, it } from 'vitest'; +import { unique } from './index'; + +describe('unique', () => { + it('should return an array with unique elements', () => { + const input = [1, 2, 2, 3, 4, 4, 5]; + const output = unique(input); + expect(output).toEqual([1, 2, 3, 4, 5]); + }); + + it('should handle an empty array', () => { + const input: number[] = []; + const output = unique(input); + expect(output).toEqual([]); + }); + + it('should handle an array with all unique elements', () => { + const input = [1, 2, 3, 4, 5]; + const output = unique(input); + expect(output).toEqual([1, 2, 3, 4, 5]); + }); + + it('should handle an array with all duplicate elements', () => { + const input = [1, 1, 1, 1]; + const output = unique(input); + expect(output).toEqual([1]); + }); + + it('should work with strings', () => { + const input = ['a', 'b', 'b', 'c', 'a']; + const output = unique(input); + expect(output).toEqual(['a', 'b', 'c']); + }); + + it('should work with mixed types', () => { + const input = [1, '1', 2, '2', 1, '1']; + const output = unique(input); + expect(output).toEqual([1, '1', 2, '2']); + }); +}); diff --git a/src/_shared/util/unique/src/index.ts b/src/_shared/util/unique/src/index.ts new file mode 100644 index 000000000..ba7c3342a --- /dev/null +++ b/src/_shared/util/unique/src/index.ts @@ -0,0 +1 @@ +export let unique = (arr: T[]) => [...new Set(arr)]; diff --git a/src/_shared/util/unique/tsconfig.json b/src/_shared/util/unique/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/unique/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/validation/package.json b/src/_shared/util/validation/package.json new file mode 100644 index 000000000..a0b15c178 --- /dev/null +++ b/src/_shared/util/validation/package.json @@ -0,0 +1,15 @@ +{ + "name": "@mtsrc/validation", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/validation/src/index.ts b/src/_shared/util/validation/src/index.ts new file mode 100644 index 000000000..fd4645637 --- /dev/null +++ b/src/_shared/util/validation/src/index.ts @@ -0,0 +1,36 @@ +// export * from './lib/result'; +// export * from './lib/validator'; +// export * from './modifiers'; +// export * from './transformers'; +// export * from './validators'; + +export * from './lib/introspect'; +export * from './lib/types'; +export * from './lib/validator'; + +import * as introspect from './lib/introspect'; +import * as result from './lib/result'; +import * as validator from './lib/validator'; +import * as modifiers from './modifiers'; +import * as transformers from './transformers'; +import * as validators from './validators'; + +export type { UndefinedIsOptional } from './validators/object'; + +// export default { +// ...modifiers, +// ...introspect, +// ...transformers, +// ...validators, +// ...result, +// ...validator +// }; + +export let v = { + ...modifiers, + ...introspect, + ...transformers, + ...validators, + ...result, + ...validator +}; diff --git a/src/_shared/util/validation/src/lib/introspect.ts b/src/_shared/util/validation/src/lib/introspect.ts new file mode 100644 index 000000000..dd8f8b26a --- /dev/null +++ b/src/_shared/util/validation/src/lib/introspect.ts @@ -0,0 +1,33 @@ +import type { ValidationType } from './types'; + +export interface IntrospectedType { + examples: any[]; + items?: IntrospectedType[]; + properties?: Record; + type: string; + name?: string; + description?: string; + optional: boolean; + nullable: boolean; +} + +export let introspectType = (type: ValidationType): IntrospectedType => ({ + examples: type.examples ?? [], + items: type.items + ? Array.isArray(type.items) + ? type.items.map(introspectType) + : [introspectType(type.items)] + : undefined, + properties: type.properties + ? Object.fromEntries( + Object.entries(type.properties) + .filter(([_, v]) => !v.hidden) + .map(([key, value]) => [key, introspectType(value)]) + ) + : undefined, + type: type.type, + name: type.name, + description: type.description, + optional: !!type.optional, + nullable: !!type.nullable +}); diff --git a/src/_shared/util/validation/src/lib/result.test.ts b/src/_shared/util/validation/src/lib/result.test.ts new file mode 100644 index 000000000..d24dba1e6 --- /dev/null +++ b/src/_shared/util/validation/src/lib/result.test.ts @@ -0,0 +1,80 @@ +import { describe, expect, test } from 'vitest'; +import { error, success } from './result'; + +describe('Result', () => { + test('success should return a successful result', () => { + let s1 = success({ + foo: 'bar' + }); + + expect(s1).toEqual({ + success: true, + value: { + foo: 'bar' + } + }); + + let s2 = success(123); + + expect(s2).toEqual({ + success: true, + value: 123 + }); + }); + + test('error should return an error result', () => { + let e1 = error([ + { + code: 'invalid_type', + message: 'Invalid type', + received: 'string', + expected: 'number' + } + ]); + + expect(e1).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Invalid type', + received: 'string', + expected: 'number' + } + ] + }); + + let e2 = error([ + { + code: 'invalid_type', + message: 'Invalid type', + received: 'string', + expected: 'number' + }, + { + code: 'invalid_type', + message: 'Invalid type', + received: 'string', + expected: 'number' + } + ]); + + expect(e2).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Invalid type', + received: 'string', + expected: 'number' + }, + { + code: 'invalid_type', + message: 'Invalid type', + received: 'string', + expected: 'number' + } + ] + }); + }); +}); diff --git a/src/_shared/util/validation/src/lib/result.ts b/src/_shared/util/validation/src/lib/result.ts new file mode 100644 index 000000000..b48287f47 --- /dev/null +++ b/src/_shared/util/validation/src/lib/result.ts @@ -0,0 +1,11 @@ +import type { ValidationError, ValidationResult } from './types'; + +export let success = (value: T): ValidationResult => ({ + success: true, + value +}); + +export let error = (errors: ValidationError[]): ValidationResult => ({ + success: false, + errors +}); diff --git a/src/_shared/util/validation/src/lib/types.ts b/src/_shared/util/validation/src/lib/types.ts new file mode 100644 index 000000000..b295c8b01 --- /dev/null +++ b/src/_shared/util/validation/src/lib/types.ts @@ -0,0 +1,57 @@ +export interface ValidationError { + code: string; + message: string; + + expected?: any; + received?: any; + + path?: string[]; + + min?: number; + max?: number; + positive?: boolean; + negative?: boolean; +} + +export type ValidationResult = + | { + success: true; + value: T; + } + | { + success: false; + errors: ValidationError[]; + }; + +export type ValidationType = { + validate: (value: any) => ValidationResult; + examples?: T[]; + items?: ValidationType | ValidationType[]; + properties?: { [key: string]: ValidationType }; + type: string; + name?: string; + description?: string; + optional?: boolean; + nullable?: boolean; + hidden?: boolean; +}; + +export type ValidationTypeValue = T extends ValidationType ? U : never; + +export type ValidationModifier = (value: T) => ValidationError[]; + +export type Preprocessor = (value: any) => any; + +export type Transformer = (value: T) => T; + +export interface ValidatorOptions { + modifiers?: ValidationModifier[]; + transformers?: Transformer[]; + message?: string; + name?: string; + description?: string; + examples?: T[]; + preprocessors?: Preprocessor[]; + oneOf?: T[]; + hidden?: boolean; +} diff --git a/src/_shared/util/validation/src/lib/validator.test.ts b/src/_shared/util/validation/src/lib/validator.test.ts new file mode 100644 index 000000000..9fe7c99c7 --- /dev/null +++ b/src/_shared/util/validation/src/lib/validator.test.ts @@ -0,0 +1,82 @@ +import { describe, expect, test } from 'vitest'; +import { createValidator } from './validator'; + +describe('createValidator', () => { + test('should validate a string', () => { + let stringValidator = createValidator('string', (opts, value) => { + if (typeof value !== 'string') { + return { + success: false, + errors: [{ code: 'invalid_type', message: 'Value must be a string' }] + }; + } + + if (opts.minLength && value.length < opts.minLength) { + return { + success: false, + errors: [ + { + code: 'min_length', + message: `Value must be at least ${opts.minLength} characters long` + } + ] + }; + } + + return { success: true, value }; + }); + + let result: any = stringValidator({ minLength: 5 }).validate('hello'); + expect(result.success).toBe(true); + expect(result.value).toBe('hello'); + + let result2: any = stringValidator({ minLength: 5 }).validate('hi'); + expect(result2.success).toBe(false); + expect(result2.errors).toEqual([ + { code: 'min_length', message: 'Value must be at least 5 characters long' } + ]); + }); + + test('should validate a number', () => { + let numberValidator = createValidator('number', (opts, value) => { + if (typeof value !== 'number') { + return { + success: false, + errors: [{ code: 'invalid_type', message: 'Value must be a number' }] + }; + } + + if (opts.min && value < opts.min) { + return { + success: false, + errors: [{ code: 'min_value', message: `Value must be at least ${opts.min}` }] + }; + } + + return { success: true, value }; + }); + + let result: any = numberValidator({ min: 5 }).validate(10); + expect(result.success).toBe(true); + expect(result.value).toBe(10); + + let result2: any = numberValidator({ min: 5 }).validate(3); + expect(result2.success).toBe(false); + expect(result2.errors).toEqual([ + { code: 'min_value', message: 'Value must be at least 5' } + ]); + }); + + test('should handle throwing errors', () => { + let throwingValidator = createValidator('throwing', () => { + throw new Error('Something went wrong'); + }); + + let result: any = throwingValidator().validate('hello'); + + expect(result.success).toBe(false); + expect(result.errors).toEqual([ + { code: 'invalid_type', message: 'Unable to validate value' } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/lib/validator.ts b/src/_shared/util/validation/src/lib/validator.ts new file mode 100644 index 000000000..f927af72f --- /dev/null +++ b/src/_shared/util/validation/src/lib/validator.ts @@ -0,0 +1,55 @@ +import { error, success } from './result'; +import type { Preprocessor, Transformer, ValidationError, ValidationModifier, ValidationResult, ValidationType, ValidatorOptions } from './types'; + +let preprocess = (preprocessors: Preprocessor[], value: any) => { + return preprocessors.reduce((val, fn) => fn(val), value); +}; + +let modify = (modifiers: ValidationModifier[], value: T) => { + return modifiers.reduce((errors, fn) => errors.concat(fn(value)), [] as ValidationError[]); +}; + +let transform = (transformers: Transformer[], value: T) => { + return transformers.reduce((val, fn) => fn(val), value); +}; + +export let createValidator = + >( + type: string, + handler: (opts: Opts, value: any) => ValidationResult + ) => + (opts?: Opts): ValidationType => ({ + validate: rawValue => { + try { + let value = + !opts?.preprocessors || !opts?.preprocessors.length + ? rawValue + : preprocess(opts?.preprocessors, rawValue); + + let handlerRes = handler(opts ?? ({} as any), value); + if (handlerRes.success === false) return handlerRes; + + let modifierErrors = + !opts?.modifiers || !opts?.modifiers.length ? [] : modify(opts?.modifiers, value); + if (modifierErrors.length) return error(modifierErrors); + + return success( + !opts?.transformers || !opts?.transformers.length + ? handlerRes.value + : transform(opts?.transformers, handlerRes.value) + ); + } catch (err) { + return error([ + { + code: 'invalid_type', + message: opts?.message ?? 'Unable to validate value' + } + ]); + } + }, + examples: opts?.examples ?? [], + type, + name: opts?.name, + description: opts?.description, + hidden: !!opts?.hidden + }); diff --git a/src/_shared/util/validation/src/modifiers/color.test.ts b/src/_shared/util/validation/src/modifiers/color.test.ts new file mode 100644 index 000000000..fae40be9d --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/color.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, test } from 'vitest'; +import { color } from './color'; + +describe('color', () => { + test('returns an empty array for a valid color', () => { + let result = color()('#FF0000'); + expect(result).toEqual([]); + }); + + test('returns an error object for an invalid color', () => { + let result = color()('not_a_color'); + expect(result).toEqual([ + { + code: 'invalid_color', + message: 'Invalid color' + } + ]); + }); + + test('returns a custom error message if provided', () => { + let result = color({ message: 'Custom error message' })('not_a_color'); + expect(result).toEqual([ + { + code: 'invalid_color', + message: 'Custom error message' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/color.ts b/src/_shared/util/validation/src/modifiers/color.ts new file mode 100644 index 000000000..76b253ef1 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/color.ts @@ -0,0 +1,18 @@ +import type { ValidationModifier } from '../lib/types'; + +let colorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; + +export let color = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!colorRegex.test(value)) { + return [ + { + code: 'invalid_color', + message: opts?.message ?? 'Invalid color' + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/email.test.ts b/src/_shared/util/validation/src/modifiers/email.test.ts new file mode 100644 index 000000000..da1bdca06 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/email.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, test } from 'vitest'; +import { email } from './email'; + +describe('email', () => { + test('returns an empty array for a valid email address', () => { + let result = email()('test@example.com'); + expect(result).toEqual([]); + }); + + test('returns an error object for an invalid email address', () => { + let result = email()('not_an_email'); + expect(result).toEqual([ + { + code: 'invalid_email', + message: 'Invalid email address' + } + ]); + }); + + test('returns a custom error message if provided', () => { + let result = email({ message: 'Custom error message' })('not_an_email'); + expect(result).toEqual([ + { + code: 'invalid_email', + message: 'Custom error message' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/email.ts b/src/_shared/util/validation/src/modifiers/email.ts new file mode 100644 index 000000000..cbb3a1cca --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/email.ts @@ -0,0 +1,18 @@ +import type { ValidationModifier } from '../lib/types'; + +let emailRegex = /^[\w+-]+(?:\.[\w+-]+)*@[A-Z0-9]+(?:(?:\.|-)[A-Z0-9]+)*\.[A-Z]{2,}$/i; + +export let email = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!emailRegex.test(value)) { + return [ + { + code: 'invalid_email', + message: opts?.message ?? 'Invalid email address' + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/emoji.test.ts b/src/_shared/util/validation/src/modifiers/emoji.test.ts new file mode 100644 index 000000000..05c145cd2 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/emoji.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, test } from 'vitest'; +import { emoji } from './emoji'; + +describe('emoji', () => { + let validate = emoji(); + + test('should return no errors for valid emoji', () => { + let result = validate('😀'); + expect(result).toEqual([]); + }); + + test('should return an error for invalid emoji', () => { + let result = validate('not an emoji'); + expect(result).toEqual([ + { + code: 'invalid_emoji', + message: 'Invalid emoji' + } + ]); + }); + + test('should allow custom error messages', () => { + let result = emoji({ message: 'Custom error message' })('not an emoji'); + expect(result).toEqual([ + { + code: 'invalid_emoji', + message: 'Custom error message' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/emoji.ts b/src/_shared/util/validation/src/modifiers/emoji.ts new file mode 100644 index 000000000..1271882fc --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/emoji.ts @@ -0,0 +1,18 @@ +import type { ValidationModifier } from '../lib/types'; + +let emojiRegex = /^(\p{Extended_Pictographic}|\p{Emoji_Component})+$/u; + +export let emoji = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!emojiRegex.test(value)) { + return [ + { + code: 'invalid_emoji', + message: opts?.message ?? 'Invalid emoji' + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/endsWith.test.ts b/src/_shared/util/validation/src/modifiers/endsWith.test.ts new file mode 100644 index 000000000..a8eb2699c --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/endsWith.test.ts @@ -0,0 +1,50 @@ +import { describe, expect, test } from 'vitest'; +import { endsWith } from './endsWith'; + +describe('endsWith', () => { + test('returns an empty array if the value ends with the suffix', () => { + let suffix = 'world'; + let validate = endsWith(suffix); + + expect(validate('hello world')).toEqual([]); + expect(validate('goodbye world')).toEqual([]); + }); + + test('returns an error object if the value does not end with the suffix', () => { + let suffix = 'world'; + let validate = endsWith(suffix); + + expect(validate('hello')).toEqual([ + { + code: 'invalid_suffix', + message: `Invalid suffix, expected ${suffix}`, + expected: suffix, + received: 'hello' + } + ]); + + expect(validate('goodbye')).toEqual([ + { + code: 'invalid_suffix', + message: `Invalid suffix, expected ${suffix}`, + expected: suffix, + received: 'goodbye' + } + ]); + }); + + test('uses the provided error message if one is given', () => { + let suffix = 'world'; + let message = 'This value must end with "world"'; + let validate = endsWith(suffix, { message }); + + expect(validate('hello')).toEqual([ + { + code: 'invalid_suffix', + message, + expected: suffix, + received: 'hello' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/endsWith.ts b/src/_shared/util/validation/src/modifiers/endsWith.ts new file mode 100644 index 000000000..bc913b6a3 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/endsWith.ts @@ -0,0 +1,18 @@ +import type { ValidationModifier } from '../lib/types'; + +export let endsWith = + (suffix: string, opts?: { message?: string }): ValidationModifier => + value => { + if (!value.endsWith(suffix)) { + return [ + { + code: 'invalid_suffix', + message: opts?.message ?? `Invalid suffix, expected ${suffix}`, + expected: suffix, + received: value + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/equals.test.ts b/src/_shared/util/validation/src/modifiers/equals.test.ts new file mode 100644 index 000000000..ff1361963 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/equals.test.ts @@ -0,0 +1,70 @@ +import { describe, expect, test } from 'vitest'; +import { equals, notEquals } from './equals'; + +describe('equals', () => { + test('returns an empty array if the value equals the expected value', () => { + let validator = equals('hello'); + let result = validator('hello'); + expect(result).toEqual([]); + }); + + test('returns an error object if the value does not equal the expected value', () => { + let validator = equals('hello'); + let result = validator('world'); + expect(result).toEqual([ + { + code: 'invalid_equals', + message: 'Invalid value, expected hello', + expected: 'hello', + received: 'world' + } + ]); + }); + + test('uses the custom error message if provided', () => { + let validator = equals('hello', { message: 'This is a custom error message' }); + let result = validator('world'); + expect(result).toEqual([ + { + code: 'invalid_equals', + message: 'This is a custom error message', + expected: 'hello', + received: 'world' + } + ]); + }); +}); + +describe('notEquals', () => { + test('returns an empty array if the value does not equal the expected value', () => { + let validator = notEquals('hello'); + let result = validator('world'); + expect(result).toEqual([]); + }); + + test('returns an error object if the value equals the expected value', () => { + let validator = notEquals('hello'); + let result = validator('hello'); + expect(result).toEqual([ + { + code: 'invalid_not_equals', + message: 'Invalid value, expected not hello', + expected: 'hello', + received: 'hello' + } + ]); + }); + + test('uses the custom error message if provided', () => { + let validator = notEquals('hello', { message: 'This is a custom error message' }); + let result = validator('hello'); + expect(result).toEqual([ + { + code: 'invalid_not_equals', + message: 'This is a custom error message', + expected: 'hello', + received: 'hello' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/equals.ts b/src/_shared/util/validation/src/modifiers/equals.ts new file mode 100644 index 000000000..8458e38f5 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/equals.ts @@ -0,0 +1,41 @@ +import type { ValidationModifier } from '../lib/types'; + +export let equals = + ( + expected: string | number | boolean, + opts?: { message?: string } + ): ValidationModifier => + value => { + if (value !== expected) { + return [ + { + code: 'invalid_equals', + message: opts?.message ?? `Invalid value, expected ${expected}`, + expected: expected, + received: value + } + ]; + } + + return []; + }; + +export let notEquals = + ( + expected: string | number | boolean, + opts?: { message?: string } + ): ValidationModifier => + value => { + if (value === expected) { + return [ + { + code: 'invalid_not_equals', + message: opts?.message ?? `Invalid value, expected not ${expected}`, + expected: expected, + received: value + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/includes.test.ts b/src/_shared/util/validation/src/modifiers/includes.test.ts new file mode 100644 index 000000000..251fee236 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/includes.test.ts @@ -0,0 +1,64 @@ +import { describe, expect, test } from 'vitest'; +import { includes, notIncludes } from './includes'; + +describe('includes modifier', () => { + test('returns an empty array if the value includes the substring', () => { + let result = includes('foo')('foobar'); + expect(result).toEqual([]); + }); + + test('returns an error object if the value does not include the substring', () => { + let result = includes('foo')('bar'); + expect(result).toEqual([ + { + code: 'invalid_includes', + message: 'Invalid substring, expected foo', + expected: 'foo', + received: 'bar' + } + ]); + }); + + test('allows a custom error message to be provided', () => { + let result = includes('foo', { message: 'Custom error message' })('bar'); + expect(result).toEqual([ + { + code: 'invalid_includes', + message: 'Custom error message', + expected: 'foo', + received: 'bar' + } + ]); + }); +}); + +describe('notIncludes modifier', () => { + test('returns an empty array if the value does not include the substring', () => { + let result = notIncludes('foo')('bar'); + expect(result).toEqual([]); + }); + + test('returns an error object if the value includes the substring', () => { + let result = notIncludes('foo')('foobar'); + expect(result).toEqual([ + { + code: 'invalid_not_includes', + message: 'Invalid substring, expected not foo', + expected: 'foo', + received: 'foobar' + } + ]); + }); + + test('allows a custom error message to be provided', () => { + let result = notIncludes('foo', { message: 'Custom error message' })('foobar'); + expect(result).toEqual([ + { + code: 'invalid_not_includes', + message: 'Custom error message', + expected: 'foo', + received: 'foobar' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/includes.ts b/src/_shared/util/validation/src/modifiers/includes.ts new file mode 100644 index 000000000..71771c308 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/includes.ts @@ -0,0 +1,35 @@ +import type { ValidationModifier } from '../lib/types'; + +export let includes = + (substring: string, opts?: { message?: string }): ValidationModifier => + value => { + if (!value.includes(substring)) { + return [ + { + code: 'invalid_includes', + message: opts?.message ?? `Invalid substring, expected ${substring}`, + expected: substring, + received: value + } + ]; + } + + return []; + }; + +export let notIncludes = + (substring: string, opts?: { message?: string }): ValidationModifier => + value => { + if (value.includes(substring)) { + return [ + { + code: 'invalid_not_includes', + message: opts?.message ?? `Invalid substring, expected not ${substring}`, + expected: substring, + received: value + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/index.ts b/src/_shared/util/validation/src/modifiers/index.ts new file mode 100644 index 000000000..3c5ac33e6 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/index.ts @@ -0,0 +1,17 @@ +export * from './color'; +export * from './email'; +export * from './emoji'; +export * from './endsWith'; +export * from './equals'; +export * from './includes'; +export * from './integer'; +export * from './ip'; +export * from './isoDate'; +export * from './length'; +export * from './multipleOf'; +export * from './oneOf'; +export * from './positive'; +export * from './regex'; +export * from './size'; +export * from './startsWith'; +export * from './url'; diff --git a/src/_shared/util/validation/src/modifiers/integer.test.ts b/src/_shared/util/validation/src/modifiers/integer.test.ts new file mode 100644 index 000000000..aaa01f663 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/integer.test.ts @@ -0,0 +1,45 @@ +import { describe, expect, test } from 'vitest'; +import { integer } from './integer'; + +describe('integer', () => { + test('should return an empty array if the value is an integer', () => { + let result = integer()(42); + expect(result).toEqual([]); + }); + + test('should return an error object if the value is not an integer', () => { + let result = integer()(0.42); + expect(result).toEqual([ + { + code: 'invalid_integer', + message: 'Invalid value, expected integer', + expected: 0.42, + received: 0.42 + } + ]); + }); + + test('should return an error object if the value is not an integer', () => { + let result = integer()('not an integer' as any); + expect(result).toEqual([ + { + code: 'invalid_integer', + message: 'Invalid value, expected integer', + expected: 'not an integer', + received: 'not an integer' + } + ]); + }); + + test('should use the provided error message if one is provided', () => { + let result = integer({ message: 'Custom error message' })('not an integer' as any); + expect(result).toEqual([ + { + code: 'invalid_integer', + message: 'Custom error message', + expected: 'not an integer', + received: 'not an integer' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/integer.ts b/src/_shared/util/validation/src/modifiers/integer.ts new file mode 100644 index 000000000..b64aa26ac --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/integer.ts @@ -0,0 +1,18 @@ +import type { ValidationModifier } from '../lib/types'; + +export let integer = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!Number.isInteger(value)) { + return [ + { + code: 'invalid_integer', + message: opts?.message ?? `Invalid value, expected integer`, + expected: value, + received: value + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/ip.test.ts b/src/_shared/util/validation/src/modifiers/ip.test.ts new file mode 100644 index 000000000..d2dfb8261 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/ip.test.ts @@ -0,0 +1,34 @@ +import { describe, expect, test } from 'vitest'; +import { ip } from './ip'; + +describe('ip', () => { + test('should return an empty array for a valid IPv4 address', () => { + let result = ip()('192.168.0.1'); + expect(result).toEqual([]); + }); + + test('should return an empty array for a valid IPv6 address', () => { + let result = ip()('2001:0db8:85a3:0000:0000:8a2e:0370:7334'); + expect(result).toEqual([]); + }); + + test('should return an error object for an invalid IP address', () => { + let result = ip()('invalid-ip-address'); + expect(result).toEqual([ + { + code: 'invalid_ip', + message: 'Invalid ip address' + } + ]); + }); + + test('should return a custom error message for an invalid IP address', () => { + let result = ip({ message: 'Invalid IP address format' })('invalid-ip-address'); + expect(result).toEqual([ + { + code: 'invalid_ip', + message: 'Invalid IP address format' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/ip.ts b/src/_shared/util/validation/src/modifiers/ip.ts new file mode 100644 index 000000000..176270025 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/ip.ts @@ -0,0 +1,50 @@ +import type { ValidationModifier } from '../lib/types'; + +let ipV4Regex = /^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/; +let ipV6Regex = + /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/; + +export let ip = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!ipV4Regex.test(value) && !ipV6Regex.test(value)) { + return [ + { + code: 'invalid_ip', + message: opts?.message ?? 'Invalid ip address' + } + ]; + } + + return []; + }; + +export let ipV4 = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!ipV4Regex.test(value)) { + return [ + { + code: 'invalid_ip_v4', + message: opts?.message ?? 'Invalid ip v4 address' + } + ]; + } + + return []; + }; + +export let ipV6 = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!ipV6Regex.test(value)) { + return [ + { + code: 'invalid_ip_v6', + message: opts?.message ?? 'Invalid ip v6 address' + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/isoDate.test.ts b/src/_shared/util/validation/src/modifiers/isoDate.test.ts new file mode 100644 index 000000000..d5c09975f --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/isoDate.test.ts @@ -0,0 +1,83 @@ +import { describe, expect, test } from 'vitest'; +import { isoDate, isoDateTime, isoTime } from './isoDate'; + +describe('isoDate', () => { + test('should return an empty array if the value is a valid ISO date', () => { + let result = isoDate()('2022-01-01'); + expect(result).toEqual([]); + }); + + test('should return an error object if the value is not a valid ISO date', () => { + let result = isoDate()('2022-01-32'); + expect(result).toEqual([ + { + code: 'invalid_iso_date', + message: 'Invalid iso date' + } + ]); + }); + + test('should return a custom error message if provided', () => { + let result = isoDate({ message: 'Invalid date format' })('2022-01-32'); + expect(result).toEqual([ + { + code: 'invalid_iso_date', + message: 'Invalid date format' + } + ]); + }); +}); + +describe('isoDateTime', () => { + test('should return an empty array if the value is a valid ISO date time', () => { + let result = isoDateTime()('2022-01-01T12:30'); + expect(result).toEqual([]); + }); + + test('should return an error object if the value is not a valid ISO date time', () => { + let result = isoDateTime()('2022-01-32T25:00'); + expect(result).toEqual([ + { + code: 'invalid_iso_date_time', + message: 'Invalid iso date time' + } + ]); + }); + + test('should return a custom error message if provided', () => { + let result = isoDateTime({ message: 'Invalid date time format' })('2022-01-32T25:00'); + expect(result).toEqual([ + { + code: 'invalid_iso_date_time', + message: 'Invalid date time format' + } + ]); + }); +}); + +describe('isoTime', () => { + test('should return an empty array if the value is a valid ISO time', () => { + let result = isoTime()('12:30'); + expect(result).toEqual([]); + }); + + test('should return an error object if the value is not a valid ISO time', () => { + let result = isoTime()('25:00'); + expect(result).toEqual([ + { + code: 'invalid_iso_time', + message: 'Invalid iso time' + } + ]); + }); + + test('should return a custom error message if provided', () => { + let result = isoTime({ message: 'Invalid time format' })('25:00'); + expect(result).toEqual([ + { + code: 'invalid_iso_time', + message: 'Invalid time format' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/isoDate.ts b/src/_shared/util/validation/src/modifiers/isoDate.ts new file mode 100644 index 000000000..e78be9425 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/isoDate.ts @@ -0,0 +1,51 @@ +import type { ValidationModifier } from '../lib/types'; + +let isoDateRegex = /^\d{4}-(0[1-9]|1[0-2])-([12]\d|0[1-9]|3[01])$/; +let isoDateTimeRegex = + /^\d{4}-(0[1-9]|1[0-2])-([12]\d|0[1-9]|3[01])T(0[0-9]|1\d|2[0-3]):[0-5]\d$/; +let isoTimeRegex = /^(0[0-9]|1\d|2[0-3]):[0-5]\d$/; + +export let isoDate = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!isoDateRegex.test(value)) { + return [ + { + code: 'invalid_iso_date', + message: opts?.message ?? 'Invalid iso date' + } + ]; + } + + return []; + }; + +export let isoDateTime = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!isoDateTimeRegex.test(value)) { + return [ + { + code: 'invalid_iso_date_time', + message: opts?.message ?? 'Invalid iso date time' + } + ]; + } + + return []; + }; + +export let isoTime = + (opts?: { message?: string }): ValidationModifier => + value => { + if (!isoTimeRegex.test(value)) { + return [ + { + code: 'invalid_iso_time', + message: opts?.message ?? 'Invalid iso time' + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/length.test.ts b/src/_shared/util/validation/src/modifiers/length.test.ts new file mode 100644 index 000000000..338eecbe9 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/length.test.ts @@ -0,0 +1,107 @@ +import { describe, expect, test } from 'vitest'; +import { length, maxLength, minLength } from './length'; + +describe('length', () => { + test('returns an empty array if the value has the expected length', () => { + let validator = length(5); + let result = validator('hello'); + expect(result).toEqual([]); + }); + + test('returns an error object if the value does not have the expected length', () => { + let validator = length(5); + let result = validator('longer'); + expect(result).toEqual([ + { + code: 'invalid_length', + message: 'Invalid length, expected 5', + expected: 5, + received: 6 + } + ]); + }); +}); + +describe('minLength', () => { + test('returns an empty array if the value has the minimum length', () => { + let validator = minLength(5); + let result = validator('hello'); + expect(result).toEqual([]); + }); + + test('returns an empty array if the value is longer than the minimum length', () => { + let validator = minLength(5); + let result = validator('world'); + expect(result).toEqual([]); + }); + + test('returns an error object if the value is shorter than the minimum length', () => { + let validator = minLength(5); + let result = validator('hi'); + expect(result).toEqual([ + { + code: 'invalid_min_length', + message: 'Invalid min length, expected 5', + expected: 5, + received: 2, + min: 5 + } + ]); + }); + + test('uses the custom error message if provided', () => { + let validator = minLength(5, { message: 'Too short!' }); + let result = validator('hi'); + expect(result).toEqual([ + { + code: 'invalid_min_length', + message: 'Too short!', + expected: 5, + received: 2, + min: 5 + } + ]); + }); +}); + +describe('maxLength', () => { + test('returns an empty array if the value has the maximum length', () => { + let validator = maxLength(5); + let result = validator('hello'); + expect(result).toEqual([]); + }); + + test('returns an empty array if the value is shorter than the maximum length', () => { + let validator = maxLength(5); + let result = validator('hi'); + expect(result).toEqual([]); + }); + + test('returns an error object if the value is longer than the maximum length', () => { + let validator = maxLength(5); + let result = validator('longer'); + expect(result).toEqual([ + { + code: 'invalid_max_length', + message: 'Invalid max length, expected 5', + expected: 5, + received: 6, + max: 5 + } + ]); + }); + + test('uses the custom error message if provided', () => { + let validator = maxLength(5, { message: 'Too long!' }); + let result = validator('longer'); + expect(result).toEqual([ + { + code: 'invalid_max_length', + message: 'Too long!', + expected: 5, + received: 6, + max: 5 + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/length.ts b/src/_shared/util/validation/src/modifiers/length.ts new file mode 100644 index 000000000..b5958d605 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/length.ts @@ -0,0 +1,54 @@ +import type { ValidationModifier } from '../lib/types'; + +export let length = + (length: number): ValidationModifier => + value => { + if (value.length !== length) { + return [ + { + code: 'invalid_length', + message: `Invalid length, expected ${length}`, + expected: length, + received: value.length + } + ]; + } + + return []; + }; + +export let minLength = + (length: number, opts?: { message?: string }): ValidationModifier => + value => { + if (value.length < length) { + return [ + { + code: 'invalid_min_length', + message: opts?.message ?? `Invalid min length, expected ${length}`, + expected: length, + received: value.length, + min: length + } + ]; + } + + return []; + }; + +export let maxLength = + (length: number, opts?: { message?: string }): ValidationModifier => + value => { + if (value.length > length) { + return [ + { + code: 'invalid_max_length', + message: opts?.message ?? `Invalid max length, expected ${length}`, + expected: length, + received: value.length, + max: length + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/multipleOf.test.ts b/src/_shared/util/validation/src/modifiers/multipleOf.test.ts new file mode 100644 index 000000000..a3e6bafd8 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/multipleOf.test.ts @@ -0,0 +1,51 @@ +import { describe, expect, test } from 'vitest'; +import { multipleOf } from './multipleOf'; + +describe('multipleOf', () => { + test('should return an empty array if the value is a multiple of the given number', () => { + const modifier = multipleOf(3); + expect(modifier(9)).toEqual([]); + expect(modifier(12)).toEqual([]); + expect(modifier(0)).toEqual([]); + }); + + test('should return an error object if the value is not a multiple of the given number', () => { + const modifier = multipleOf(5); + expect(modifier(7)).toEqual([ + { + code: 'invalid_multiple_of', + message: 'Invalid multiple of 5, expected 7', + received: 7, + multipleOf: 5 + } + ]); + expect(modifier(11)).toEqual([ + { + code: 'invalid_multiple_of', + message: 'Invalid multiple of 5, expected 11', + received: 11, + multipleOf: 5 + } + ]); + }); + + test('should allow custom error message', () => { + const modifier = multipleOf(2, { message: 'Value must be an even number' }); + expect(modifier(3)).toEqual([ + { + code: 'invalid_multiple_of', + message: 'Value must be an even number', + received: 3, + multipleOf: 2 + } + ]); + expect(modifier(5)).toEqual([ + { + code: 'invalid_multiple_of', + message: 'Value must be an even number', + received: 5, + multipleOf: 2 + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/multipleOf.ts b/src/_shared/util/validation/src/modifiers/multipleOf.ts new file mode 100644 index 000000000..ccc545b68 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/multipleOf.ts @@ -0,0 +1,18 @@ +import type { ValidationModifier } from '../lib/types'; + +export let multipleOf = + (multi: number, opts?: { message?: string }): ValidationModifier => + value => { + if (value % multi !== 0) { + return [ + { + code: 'invalid_multiple_of', + message: opts?.message ?? `Invalid multiple of ${multi}, expected ${value}`, + received: value, + multipleOf: multi + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/oneOf.test.ts b/src/_shared/util/validation/src/modifiers/oneOf.test.ts new file mode 100644 index 000000000..59c40425e --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/oneOf.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, test } from 'vitest'; +import { oneOf } from './oneOf'; + +describe('oneOf', () => { + test('should return an empty array if the value is one of the allowed values', () => { + let allowed = ['apple', 'banana', 'orange']; + let modifier = oneOf(allowed); + let value = 'banana'; + let result = modifier(value); + expect(result).toEqual([]); + }); + + test('should return an error object if the value is not one of the allowed values', () => { + let allowed = ['apple', 'banana', 'orange']; + let modifier = oneOf(allowed); + let value = 'grape'; + let result = modifier(value); + expect(result).toEqual([ + { + code: 'invalid_value', + message: 'Value must be one of: apple, banana, orange' + } + ]); + }); + + // Add more test cases if needed +}); diff --git a/src/_shared/util/validation/src/modifiers/oneOf.ts b/src/_shared/util/validation/src/modifiers/oneOf.ts new file mode 100644 index 000000000..06ab1a911 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/oneOf.ts @@ -0,0 +1,16 @@ +import type { ValidationModifier } from '../lib/types'; + +export let oneOf = + (allowed: string[], opts?: { message?: string }): ValidationModifier => + value => { + if (!allowed.includes(value)) { + return [ + { + code: 'invalid_value', + message: opts?.message ?? `Value must be one of: ${allowed.join(', ')}` + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/positive.test.ts b/src/_shared/util/validation/src/modifiers/positive.test.ts new file mode 100644 index 000000000..81bf4f275 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/positive.test.ts @@ -0,0 +1,64 @@ +import { describe, expect, test } from 'vitest'; +import { negative, positive } from './positive'; + +describe('positive', () => { + test('should return an empty array for positive numbers', () => { + let result = positive()(1); + expect(result).toEqual([]); + }); + + test('should return an error object for non-positive numbers', () => { + let result = positive()(-1); + expect(result).toEqual([ + { + code: 'invalid_positive', + message: 'Invalid positive, expected -1', + received: -1, + positive: true + } + ]); + }); + + test('should use the custom error message if provided', () => { + let result = positive({ message: 'Value must be positive' })(-1); + expect(result).toEqual([ + { + code: 'invalid_positive', + message: 'Value must be positive', + received: -1, + positive: true + } + ]); + }); +}); + +describe('negative', () => { + test('should return an empty array for negative numbers', () => { + let result = negative()(-1); + expect(result).toEqual([]); + }); + + test('should return an error object for non-negative numbers', () => { + let result = negative()(1); + expect(result).toEqual([ + { + code: 'invalid_negative', + message: 'Invalid negative, expected 1', + received: 1, + negative: true + } + ]); + }); + + test('should use the custom error message if provided', () => { + let result = negative({ message: 'Value must be negative' })(1); + expect(result).toEqual([ + { + code: 'invalid_negative', + message: 'Value must be negative', + received: 1, + negative: true + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/positive.ts b/src/_shared/util/validation/src/modifiers/positive.ts new file mode 100644 index 000000000..607fa9461 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/positive.ts @@ -0,0 +1,35 @@ +import type { ValidationModifier } from '../lib/types'; + +export let positive = + (opts?: { message?: string }): ValidationModifier => + value => { + if (value <= 0) { + return [ + { + code: 'invalid_positive', + message: opts?.message ?? `Invalid positive, expected ${value}`, + received: value, + positive: true + } + ]; + } + + return []; + }; + +export let negative = + (opts?: { message?: string }): ValidationModifier => + value => { + if (value >= 0) { + return [ + { + code: 'invalid_negative', + message: opts?.message ?? `Invalid negative, expected ${value}`, + received: value, + negative: true + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/regex.test.ts b/src/_shared/util/validation/src/modifiers/regex.test.ts new file mode 100644 index 000000000..664dfe942 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/regex.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, test } from 'vitest'; +import { regex } from './regex'; + +describe('regex', () => { + test('returns an empty array if the value matches the pattern', () => { + let pattern = /^[a-z]+$/; + let validate = regex(pattern); + let result = validate('hello'); + + expect(result).toEqual([]); + }); + + test('returns an error object if the value does not match the pattern', () => { + let pattern = /^[a-z]+$/; + let validate = regex(pattern); + let result = validate('123'); + + expect(result).toEqual([ + { + code: 'invalid_regex', + message: 'Invalid regex, expected /^[a-z]+$/', + received: '123' + } + ]); + }); + + test('uses the custom error message if provided', () => { + let pattern = /^[a-z]+$/; + let validate = regex(pattern, { message: 'Must be all lowercase letters' }); + let result = validate('123'); + + expect(result).toEqual([ + { + code: 'invalid_regex', + message: 'Must be all lowercase letters', + received: '123' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/regex.ts b/src/_shared/util/validation/src/modifiers/regex.ts new file mode 100644 index 000000000..38c2afc7d --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/regex.ts @@ -0,0 +1,17 @@ +import type { ValidationModifier } from '../lib/types'; + +export let regex = + (pattern: RegExp, opts?: { message?: string }): ValidationModifier => + value => { + if (!pattern.test(value)) { + return [ + { + code: 'invalid_regex', + message: opts?.message ?? `Invalid regex, expected ${pattern}`, + received: value + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/size.test.ts b/src/_shared/util/validation/src/modifiers/size.test.ts new file mode 100644 index 000000000..c259a3eb5 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/size.test.ts @@ -0,0 +1,84 @@ +import { describe, expect, test } from 'vitest'; +import { maxValue, minValue } from './size'; + +describe('minValue', () => { + test('returns an empty array if the value is greater than or equal to the minimum', () => { + let min = 5; + let validate = minValue(min); + + expect(validate(5)).toEqual([]); + expect(validate(10)).toEqual([]); + }); + + test('returns an array with an error object if the value is less than the minimum', () => { + let min = 5; + let validate = minValue(min); + + expect(validate(4)).toEqual([ + { + code: 'invalid_min', + message: `Invalid min, expected ${min}`, + expected: min, + received: 4, + min + } + ]); + }); + + test('uses the custom error message if provided', () => { + let min = 5; + let message = 'Value must be at least 5'; + let validate = minValue(min, { message }); + + expect(validate(4)).toEqual([ + { + code: 'invalid_min', + message, + expected: min, + received: 4, + min + } + ]); + }); +}); + +describe('maxValue', () => { + test('returns an empty array if the value is less than or equal to the maximum', () => { + let max = 10; + let validate = maxValue(max); + + expect(validate(10)).toEqual([]); + expect(validate(5)).toEqual([]); + }); + + test('returns an array with an error object if the value is greater than the maximum', () => { + let max = 10; + let validate = maxValue(max); + + expect(validate(11)).toEqual([ + { + code: 'invalid_max', + message: `Invalid max, expected ${max}`, + expected: max, + received: 11, + max + } + ]); + }); + + test('uses the custom error message if provided', () => { + let max = 10; + let message = 'Value must be at most 10'; + let validate = maxValue(max, { message }); + + expect(validate(11)).toEqual([ + { + code: 'invalid_max', + message, + expected: max, + received: 11, + max + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/size.ts b/src/_shared/util/validation/src/modifiers/size.ts new file mode 100644 index 000000000..964d2232a --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/size.ts @@ -0,0 +1,37 @@ +import type { ValidationModifier } from '../lib/types'; + +export let minValue = + (min: number, opts?: { message?: string }): ValidationModifier => + value => { + if (value < min) { + return [ + { + code: 'invalid_min', + message: opts?.message ?? `Invalid min, expected ${min}`, + expected: min, + received: value, + min + } + ]; + } + + return []; + }; + +export let maxValue = + (max: number, opts?: { message?: string }): ValidationModifier => + value => { + if (value > max) { + return [ + { + code: 'invalid_max', + message: opts?.message ?? `Invalid max, expected ${max}`, + expected: max, + received: value, + max + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/startsWith.test.ts b/src/_shared/util/validation/src/modifiers/startsWith.test.ts new file mode 100644 index 000000000..c730ec065 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/startsWith.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, test } from 'vitest'; +import { startsWith } from './startsWith'; + +describe('startsWith', () => { + test('returns an empty array if the value starts with the prefix', () => { + let prefix = 'hello'; + let value = 'hello world'; + let result = startsWith(prefix)(value); + expect(result).toEqual([]); + }); + + test('returns an error object if the value does not start with the prefix', () => { + let prefix = 'hello'; + let value = 'world'; + let result = startsWith(prefix)(value); + expect(result).toEqual([ + { + code: 'invalid_prefix', + message: `Invalid prefix, expected ${prefix}`, + expected: prefix, + received: value + } + ]); + }); + + test('returns a custom error message if provided', () => { + let prefix = 'hello'; + let value = 'world'; + let message = 'Value must start with hello'; + let result = startsWith(prefix, { message })(value); + expect(result).toEqual([ + { + code: 'invalid_prefix', + message, + expected: prefix, + received: value + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/startsWith.ts b/src/_shared/util/validation/src/modifiers/startsWith.ts new file mode 100644 index 000000000..dccffbb2b --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/startsWith.ts @@ -0,0 +1,18 @@ +import type { ValidationModifier } from '../lib/types'; + +export let startsWith = + (prefix: string, opts?: { message?: string }): ValidationModifier => + value => { + if (!value.startsWith(prefix)) { + return [ + { + code: 'invalid_prefix', + message: opts?.message ?? `Invalid prefix, expected ${prefix}`, + expected: prefix, + received: value + } + ]; + } + + return []; + }; diff --git a/src/_shared/util/validation/src/modifiers/url.test.ts b/src/_shared/util/validation/src/modifiers/url.test.ts new file mode 100644 index 000000000..468d460f3 --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/url.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, test } from 'vitest'; +import { url } from './url'; + +describe('url', () => { + test('should return an empty array for a valid URL', () => { + let result = url()('https://example.com'); + expect(result).toEqual([]); + }); + + test('should return an error for an invalid URL', () => { + let result = url()('not a url'); + expect(result).toEqual([ + { + code: 'invalid_url', + message: 'Invalid URL', + received: 'not a url' + } + ]); + }); + + test('should return an error for a URL with an invalid hostname', () => { + let result = url({ hostnames: ['example.com'] })('https://google.com'); + expect(result).toEqual([ + { + code: 'invalid_hostname', + message: 'Invalid hostname', + expected: ['example.com'], + received: 'google.com' + } + ]); + }); + + test('should return an empty array for a URL with a valid hostname', () => { + let result = url({ hostnames: ['example.com'] })('https://example.com'); + expect(result).toEqual([]); + }); + + test('should use the provided error message', () => { + let result = url({ message: 'Custom error message' })('not a url'); + expect(result).toEqual([ + { + code: 'invalid_url', + message: 'Custom error message', + received: 'not a url' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/modifiers/url.ts b/src/_shared/util/validation/src/modifiers/url.ts new file mode 100644 index 000000000..2d8b9de3e --- /dev/null +++ b/src/_shared/util/validation/src/modifiers/url.ts @@ -0,0 +1,30 @@ +import type { ValidationModifier } from '../lib/types'; + +export let url = + (opts?: { message?: string; hostnames?: string[] }): ValidationModifier => + value => { + try { + let url = new URL(value); + + if (opts?.hostnames && !opts.hostnames.includes(url.hostname)) { + return [ + { + code: 'invalid_hostname', + message: opts?.message ?? `Invalid hostname`, + expected: opts?.hostnames, + received: url.hostname + } + ]; + } + + return []; + } catch (err) { + return [ + { + code: 'invalid_url', + message: opts?.message ?? `Invalid URL`, + received: value + } + ]; + } + }; diff --git a/src/_shared/util/validation/src/transformers/case.test.ts b/src/_shared/util/validation/src/transformers/case.test.ts new file mode 100644 index 000000000..49abfdd70 --- /dev/null +++ b/src/_shared/util/validation/src/transformers/case.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, test } from 'vitest'; +import { lowerCase, upperCase } from './case'; + +describe('case transformers', () => { + describe('upperCase', () => { + test('should transform a string to uppercase', () => { + let input = 'hello world'; + let expectedOutput = 'HELLO WORLD'; + let output = upperCase(input); + expect(output).toEqual(expectedOutput); + }); + + test('should return an empty string if input is empty', () => { + let input = ''; + let expectedOutput = ''; + let output = upperCase(input); + expect(output).toEqual(expectedOutput); + }); + }); + + describe('lowerCase', () => { + test('should transform a string to lowercase', () => { + let input = 'HELLO WORLD'; + let expectedOutput = 'hello world'; + let output = lowerCase(input); + expect(output).toEqual(expectedOutput); + }); + + test('should return an empty string if input is empty', () => { + let input = ''; + let expectedOutput = ''; + let output = lowerCase(input); + expect(output).toEqual(expectedOutput); + }); + }); +}); diff --git a/src/_shared/util/validation/src/transformers/case.ts b/src/_shared/util/validation/src/transformers/case.ts new file mode 100644 index 000000000..797624d23 --- /dev/null +++ b/src/_shared/util/validation/src/transformers/case.ts @@ -0,0 +1,5 @@ +import type { Transformer } from '../lib/types'; + +export let upperCase: Transformer = value => value.toUpperCase(); + +export let lowerCase: Transformer = value => value.toLowerCase(); diff --git a/src/_shared/util/validation/src/transformers/index.ts b/src/_shared/util/validation/src/transformers/index.ts new file mode 100644 index 000000000..c8283479f --- /dev/null +++ b/src/_shared/util/validation/src/transformers/index.ts @@ -0,0 +1,2 @@ +export * from './case'; +export * from './trim'; diff --git a/src/_shared/util/validation/src/transformers/trim.test.ts b/src/_shared/util/validation/src/transformers/trim.test.ts new file mode 100644 index 000000000..b11e2a24c --- /dev/null +++ b/src/_shared/util/validation/src/transformers/trim.test.ts @@ -0,0 +1,32 @@ +import { describe, expect, test } from 'vitest'; +import { trim, trimEnd, trimStart } from './trim'; + +describe('trim', () => { + test('should trim whitespace from both ends of the string', () => { + expect(trim(' hello ')).toBe('hello'); + }); + + test('should return an empty string if given an empty string', () => { + expect(trim('')).toBe(''); + }); +}); + +describe('trimStart', () => { + test('should trim whitespace from the beginning of the string', () => { + expect(trimStart(' hello')).toBe('hello'); + }); + + test('should return an empty string if given an empty string', () => { + expect(trimStart('')).toBe(''); + }); +}); + +describe('trimEnd', () => { + test('should trim whitespace from the end of the string', () => { + expect(trimEnd('hello ')).toBe('hello'); + }); + + test('should return an empty string if given an empty string', () => { + expect(trimEnd('')).toBe(''); + }); +}); diff --git a/src/_shared/util/validation/src/transformers/trim.ts b/src/_shared/util/validation/src/transformers/trim.ts new file mode 100644 index 000000000..324065b53 --- /dev/null +++ b/src/_shared/util/validation/src/transformers/trim.ts @@ -0,0 +1,7 @@ +import type { Transformer } from '../lib/types'; + +export let trim: Transformer = value => value.trim(); + +export let trimStart: Transformer = value => value.trimStart(); + +export let trimEnd: Transformer = value => value.trimEnd(); diff --git a/src/_shared/util/validation/src/validators/any.test.ts b/src/_shared/util/validation/src/validators/any.test.ts new file mode 100644 index 000000000..17b1d402f --- /dev/null +++ b/src/_shared/util/validation/src/validators/any.test.ts @@ -0,0 +1,11 @@ +import { describe, expect, test } from 'vitest'; +import { any } from './any'; + +describe('any', () => { + test('should always return success with the input value', () => { + let input = 'hello world'; + let result: any = any({}).validate(input); + expect(result.success).toBe(true); + expect(result.value).toBe(input); + }); +}); diff --git a/src/_shared/util/validation/src/validators/any.ts b/src/_shared/util/validation/src/validators/any.ts new file mode 100644 index 000000000..c70bf5adf --- /dev/null +++ b/src/_shared/util/validation/src/validators/any.ts @@ -0,0 +1,11 @@ +import type { ValidatorOptions } from '../lib/types'; +import { createValidator } from '../lib/validator'; + +export let any = createValidator>('any', (opts, value) => { + return { success: true, value }; +}); + +export let typedAny = (name: string) => + createValidator>(name, (opts, value) => { + return { success: true, value }; + })(); diff --git a/src/_shared/util/validation/src/validators/array.test.ts b/src/_shared/util/validation/src/validators/array.test.ts new file mode 100644 index 000000000..48caeee0e --- /dev/null +++ b/src/_shared/util/validation/src/validators/array.test.ts @@ -0,0 +1,46 @@ +import { describe, expect, test } from 'vitest'; +import { error, success } from '../lib/result'; +import { array } from './array'; +import { string } from './string'; + +describe('array', () => { + test('should validate an array of strings', () => { + let validator = array(string()); + let result = validator.validate(['hello', 'world']); + + expect(result).toEqual(success(['hello', 'world'])); + }); + + test('should return an error for invalid input', () => { + let validator = array(string()); + let result = validator.validate('not an array'); + + expect(result).toEqual( + error([ + { + code: 'invalid_type', + message: 'Invalid input, expected array, received string', + received: 'string', + expected: 'array' + } + ]) + ); + }); + + test('should return an error for invalid array items', () => { + let validator = array(string()); + let result = validator.validate(['hello', 123]); + + expect(result).toEqual( + error([ + { + code: 'invalid_type', + message: 'Invalid input, expected string, received number', + received: 'number', + expected: 'string', + path: ['1'] + } + ]) + ); + }); +}); diff --git a/src/_shared/util/validation/src/validators/array.ts b/src/_shared/util/validation/src/validators/array.ts new file mode 100644 index 000000000..0b1c621de --- /dev/null +++ b/src/_shared/util/validation/src/validators/array.ts @@ -0,0 +1,43 @@ +import { error, success } from '../lib/result'; +import type { ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types'; + +export let array = >( + validator: Validator, + opts?: ValidatorOptions[]> +): ValidationType[]> => ({ + type: 'array', + items: validator, + name: opts?.name, + description: opts?.description, + examples: Array.isArray(validator.examples) + ? validator.examples.map(v => [v, v]) + : undefined, + validate: value => { + if (!Array.isArray(value)) { + return error([ + { + code: 'invalid_type', + message: `Invalid input, expected array, received ${typeof value}`, + received: typeof value, + expected: 'array' + } + ]); + } + + let values: ValidationTypeValue[] = []; + + for (let [key, val] of value.entries()) { + let result = validator.validate(val); + + if (result.success === false) { + return error( + result.errors.map(e => ({ ...e, path: [key.toString(), ...(e.path ?? [])] })) + ); + } + + values.push(result.value); + } + + return success(values); + } +}); diff --git a/src/_shared/util/validation/src/validators/boolean.test.ts b/src/_shared/util/validation/src/validators/boolean.test.ts new file mode 100644 index 000000000..e14ce06a8 --- /dev/null +++ b/src/_shared/util/validation/src/validators/boolean.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from 'vitest'; +import { boolean } from './boolean'; + +describe('boolean validator', () => { + test('should return success for a boolean value', () => { + let result = boolean({}).validate(true); + expect(result).toEqual({ success: true, value: true }); + }); + + test('should return an error for a non-boolean value', () => { + let result = boolean({}).validate('not a boolean'); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Invalid input, expected a boolean, received string', + received: 'string', + expected: 'boolean' + } + ] + }); + }); + + test('should return a custom error message if provided', () => { + let result = boolean({ message: 'Custom error message' }).validate('not a boolean'); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Custom error message', + received: 'string', + expected: 'boolean' + } + ] + }); + }); +}); diff --git a/src/_shared/util/validation/src/validators/boolean.ts b/src/_shared/util/validation/src/validators/boolean.ts new file mode 100644 index 000000000..aa11b3d78 --- /dev/null +++ b/src/_shared/util/validation/src/validators/boolean.ts @@ -0,0 +1,34 @@ +import { error } from '../lib/result'; +import type { ValidatorOptions } from '../lib/types'; +import { createValidator } from '../lib/validator'; + +export let boolean = createValidator>( + 'boolean', + (opts, value) => { + let serializedValue: boolean | undefined; + + if (typeof value == 'string') { + if (value == 'true') { + serializedValue = true; + } else if (value == 'false') { + serializedValue = false; + } + } else if (typeof value == 'boolean') { + serializedValue = value; + } + + if (serializedValue === undefined) { + return error([ + { + code: 'invalid_type', + message: + opts.message ?? `Invalid input, expected a boolean, received ${typeof value}`, + received: typeof value, + expected: 'boolean' + } + ]); + } + + return { success: true, value: serializedValue }; + } +); diff --git a/src/_shared/util/validation/src/validators/date.test.ts b/src/_shared/util/validation/src/validators/date.test.ts new file mode 100644 index 000000000..539179dd2 --- /dev/null +++ b/src/_shared/util/validation/src/validators/date.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from 'vitest'; +import { date } from './date'; + +describe('date', () => { + test('should return success for a valid date', () => { + let input = new Date(); + let result: any = date().validate(input); + expect(result.success).toBe(true); + expect(result.value).toBe(input); + }); + + test('should return an error for an invalid date', () => { + let input = 'not a date'; + let result: any = date().validate(input); + expect(result.success).toBe(false); + expect(result.errors).toEqual([ + { + code: 'invalid_type', + message: 'Invalid input, expected a date, received string', + received: 'string', + expected: 'date' + } + ]); + }); + + test('should allow custom error messages', () => { + let input = 'not a date'; + let result: any = date({ message: 'Custom error message' }).validate(input); + expect(result.success).toBe(false); + expect(result.errors).toEqual([ + { + code: 'invalid_type', + message: 'Custom error message', + received: 'string', + expected: 'date' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/validators/date.ts b/src/_shared/util/validation/src/validators/date.ts new file mode 100644 index 000000000..3247f7d98 --- /dev/null +++ b/src/_shared/util/validation/src/validators/date.ts @@ -0,0 +1,26 @@ +import { error } from '../lib/result'; +import type { ValidatorOptions } from '../lib/types'; +import { createValidator } from '../lib/validator'; + +export let date = createValidator>('date', (opts, value) => { + if (typeof value === 'string') { + let date = new Date(value); + + if (!isNaN(date.getTime())) { + value = date; + } + } + + if (!(value instanceof Date)) { + return error([ + { + code: 'invalid_type', + message: opts.message ?? `Invalid input, expected a date, received ${typeof value}`, + received: typeof value, + expected: 'date' + } + ]); + } + + return { success: true, value }; +}); diff --git a/src/_shared/util/validation/src/validators/enum.test.ts b/src/_shared/util/validation/src/validators/enum.test.ts new file mode 100644 index 000000000..141713182 --- /dev/null +++ b/src/_shared/util/validation/src/validators/enum.test.ts @@ -0,0 +1,25 @@ +import { describe, expect, test } from 'vitest'; +import { enumOf } from './enum'; + +describe('enumOf', () => { + test('should validate a valid value', () => { + let validator = enumOf(['foo', 'bar', 'baz']); + let result: any = validator.validate('foo'); + expect(result.success).toBe(true); + expect(result.value).toBe('foo'); + }); + + test('should not validate an invalid value', () => { + let validator = enumOf(['foo', 'bar', 'baz']); + let result: any = validator.validate('qux'); + expect(result.success).toBe(false); + expect(result.errors).toEqual([ + { + code: 'invalid_enum', + message: 'Invalid input, expected one of foo, bar, baz, received qux', + received: 'qux', + expected: ['foo', 'bar', 'baz'] + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/validators/enum.ts b/src/_shared/util/validation/src/validators/enum.ts new file mode 100644 index 000000000..4754977d0 --- /dev/null +++ b/src/_shared/util/validation/src/validators/enum.ts @@ -0,0 +1,56 @@ +import { error } from '../lib/result'; +import type { ValidationType } from '../lib/types'; + +// export let enumType = < +// A extends string | number | boolean, +// Rest extends (string | number | boolean)[] +// >( +// ...values: [A, ...Rest] +// ): ValidationType => ({ +// type: 'enum', +// examples: values, +// validate: value => { +// if (!values.includes(value)) { +// return error([ +// { +// code: 'invalid_enum', +// message: `Invalid input, expected one of ${values.join(', ')}, received ${value}`, +// received: value, +// expected: values +// } +// ]); +// } + +// return { success: true, value }; +// } +// }); + +export let enumOf = < + const A extends string | number | boolean, + Rest extends (string | number | boolean)[] +>( + values: [A, ...Rest], + opts?: { + name?: string; + description?: string; + } +): ValidationType => ({ + type: 'enum', + examples: values, + name: opts?.name, + description: opts?.description, + validate: value => { + if (!values.includes(value)) { + return error([ + { + code: 'invalid_enum', + message: `Invalid input, expected one of ${values.join(', ')}, received ${value}`, + received: value, + expected: values + } + ]); + } + + return { success: true, value }; + } +}); diff --git a/src/_shared/util/validation/src/validators/index.ts b/src/_shared/util/validation/src/validators/index.ts new file mode 100644 index 000000000..b931e0b6a --- /dev/null +++ b/src/_shared/util/validation/src/validators/index.ts @@ -0,0 +1,16 @@ +export * from './any'; +export * from './array'; +export * from './boolean'; +export * from './date'; +export * from './enum'; +export * from './intersection'; +export * from './literal'; +export * from './null'; +export * from './nullable'; +export * from './number'; +export * from './object'; +export * from './optional'; +export * from './record'; +export * from './string'; +export * from './union'; +export * from './void'; diff --git a/src/_shared/util/validation/src/validators/intersection.test.ts b/src/_shared/util/validation/src/validators/intersection.test.ts new file mode 100644 index 000000000..44699da42 --- /dev/null +++ b/src/_shared/util/validation/src/validators/intersection.test.ts @@ -0,0 +1,35 @@ +import { describe, expect, test } from 'vitest'; +import { success } from '../lib/result'; +import { number, object, string } from './index'; +import { intersection } from './intersection'; + +describe('intersection', () => { + test('intersection - success', () => { + const validatorA = object({ name: string() }); + const validatorB = object({ age: number() }); + + const validator = intersection([validatorA, validatorB]); + + const value = { name: 'John', age: 30, email: 'john@example.com' }; + const result = validator.validate(value); + + expect(result).toEqual( + success({ + name: 'John', + age: 30 + }) + ); + }); + + test('intersection - failure', () => { + const validatorA = object({ name: string() }); + const validatorB = object({ age: number() }); + + const validator = intersection([validatorA, validatorB]); + + const value = { name: 'John', age: 'test', email: 'john@example.com' }; + const result = validator.validate(value); + + expect(result.success).toBe(false); + }); +}); diff --git a/src/_shared/util/validation/src/validators/intersection.ts b/src/_shared/util/validation/src/validators/intersection.ts new file mode 100644 index 000000000..b822486f1 --- /dev/null +++ b/src/_shared/util/validation/src/validators/intersection.ts @@ -0,0 +1,24 @@ +import type { ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types'; + +export let intersection = , B extends ValidationType>( + validators: [A, B], + opts?: ValidatorOptions & ValidationTypeValue> +): ValidationType & ValidationTypeValue> => ({ + type: 'intersection', + name: opts?.name, + items: validators, + description: opts?.description, + examples: [], + validate: value => { + let fullValue: any = {}; + + for (let validator of validators) { + let result = validator.validate(value); + if (result.success === false) return result; + + fullValue = { ...fullValue, ...result.value }; + } + + return { success: true, value: fullValue }; + } +}); diff --git a/src/_shared/util/validation/src/validators/literal.test.ts b/src/_shared/util/validation/src/validators/literal.test.ts new file mode 100644 index 000000000..6176f18eb --- /dev/null +++ b/src/_shared/util/validation/src/validators/literal.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, test } from 'vitest'; +import { literal } from './literal'; + +describe('literal', () => { + test('should return success when the value matches the literal', () => { + let validator = literal('foo'); + let result = validator.validate('foo'); + expect(result).toEqual({ success: true, value: 'foo' }); + }); + + test('should return an error when the value does not match the literal', () => { + let validator = literal('foo'); + let result = validator.validate('bar'); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_literal', + message: 'Invalid input, expected foo, received bar', + received: 'bar', + expected: 'foo' + } + ] + }); + }); + + test('should use the provided error message', () => { + let validator = literal('foo', { message: 'Custom error message' }); + let result = validator.validate('bar'); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_literal', + message: 'Custom error message', + received: 'bar', + expected: 'foo' + } + ] + }); + }); +}); diff --git a/src/_shared/util/validation/src/validators/literal.ts b/src/_shared/util/validation/src/validators/literal.ts new file mode 100644 index 000000000..eef34af58 --- /dev/null +++ b/src/_shared/util/validation/src/validators/literal.ts @@ -0,0 +1,26 @@ +import { error } from '../lib/result'; +import type { ValidationType, ValidatorOptions } from '../lib/types'; + +export let literal = ( + value: A, + opts?: ValidatorOptions +): ValidationType => ({ + type: 'literal', + examples: [value], + name: opts?.name, + description: opts?.description, + validate: input => { + if (input != value) { + return error([ + { + code: 'invalid_literal', + message: opts?.message ?? `Invalid input, expected ${value}, received ${input}`, + received: input, + expected: value + } + ]); + } + + return { success: true, value }; + } +}); diff --git a/src/_shared/util/validation/src/validators/null.test.ts b/src/_shared/util/validation/src/validators/null.test.ts new file mode 100644 index 000000000..bbad82976 --- /dev/null +++ b/src/_shared/util/validation/src/validators/null.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from 'vitest'; +import { nullValue } from './null'; + +describe('null', () => { + test('should return success for valid null', () => { + let result = nullValue({}).validate(null); + expect(result).toEqual({ success: true, value: null }); + }); + + test('should return an error for an invalid null', () => { + let result = nullValue({}).validate('not a null'); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Invalid input, expected null, received string', + received: 'string', + expected: 'null' + } + ] + }); + }); + + test('should use the provided error message', () => { + let result = nullValue({ message: 'Custom error message' }).validate('not a null'); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Custom error message', + received: 'string', + expected: 'null' + } + ] + }); + }); +}); diff --git a/src/_shared/util/validation/src/validators/null.ts b/src/_shared/util/validation/src/validators/null.ts new file mode 100644 index 000000000..38caa38cb --- /dev/null +++ b/src/_shared/util/validation/src/validators/null.ts @@ -0,0 +1,18 @@ +import { error } from '../lib/result'; +import type { ValidatorOptions } from '../lib/types'; +import { createValidator } from '../lib/validator'; + +export let nullValue = createValidator>('null', (opts, value) => { + if (value !== null) { + return error([ + { + code: 'invalid_type', + message: opts.message ?? `Invalid input, expected null, received ${typeof value}`, + received: typeof value, + expected: 'null' + } + ]); + } + + return { success: true, value: null }; +}); diff --git a/src/_shared/util/validation/src/validators/nullable.test.ts b/src/_shared/util/validation/src/validators/nullable.test.ts new file mode 100644 index 000000000..2864e972c --- /dev/null +++ b/src/_shared/util/validation/src/validators/nullable.test.ts @@ -0,0 +1,34 @@ +import { describe, expect, test } from 'vitest'; +import { nullable } from './nullable'; +import { string } from './string'; + +describe('nullable', () => { + test('should return a validator that allows null values', () => { + let validator = nullable(string()); + + expect(validator.validate(null)).toEqual({ success: true, value: null }); + }); + + test('should return a validator that delegates to the input validator for non-null values', () => { + let validator = nullable(string()); + + expect(validator.validate('hello')).toEqual({ success: true, value: 'hello' }); + expect(validator.validate(42)).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Invalid input, expected string, received number', + received: 'number', + expected: 'string' + } + ] + }); + }); + + test('should return a validator with the correct type and optional flag', () => { + let validator = nullable(string()); + + expect(validator.type).toBe('string'); + }); +}); diff --git a/src/_shared/util/validation/src/validators/nullable.ts b/src/_shared/util/validation/src/validators/nullable.ts new file mode 100644 index 000000000..bc0b7bdd9 --- /dev/null +++ b/src/_shared/util/validation/src/validators/nullable.ts @@ -0,0 +1,16 @@ +import type { ValidationType, ValidationTypeValue } from '../lib/types'; + +export let nullable = >( + validator: A +): ValidationType | null> => ({ + ...validator, + + nullable: true, + validate: value => { + if (value === null) { + return { success: true, value }; + } + + return validator.validate(value); + } +}); diff --git a/src/_shared/util/validation/src/validators/number.test.ts b/src/_shared/util/validation/src/validators/number.test.ts new file mode 100644 index 000000000..03acd3e59 --- /dev/null +++ b/src/_shared/util/validation/src/validators/number.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from 'vitest'; +import { number } from './number'; + +describe('number', () => { + test('should return success for a valid number', () => { + let result = number({}).validate(42); + expect(result).toEqual({ success: true, value: 42 }); + }); + + test('should return an error for an invalid number', () => { + let result = number({}).validate('not a number'); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Invalid input, expected number, received string', + received: 'string', + expected: 'number' + } + ] + }); + }); + + test('should use the provided error message', () => { + let result = number({ message: 'Custom error message' }).validate('not a number'); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Custom error message', + received: 'string', + expected: 'number' + } + ] + }); + }); +}); diff --git a/src/_shared/util/validation/src/validators/number.ts b/src/_shared/util/validation/src/validators/number.ts new file mode 100644 index 000000000..dd972d4e8 --- /dev/null +++ b/src/_shared/util/validation/src/validators/number.ts @@ -0,0 +1,23 @@ +import { error } from '../lib/result'; +import type { ValidatorOptions } from '../lib/types'; +import { createValidator } from '../lib/validator'; + +export let number = createValidator>( + 'number', + (opts, value) => { + let number = typeof value == 'string' ? parseFloat(value) : value; + + if (typeof number != 'number' || isNaN(number)) { + return error([ + { + code: 'invalid_type', + message: opts.message ?? `Invalid input, expected number, received ${typeof value}`, + received: typeof value, + expected: 'number' + } + ]); + } + + return { success: true, value: number }; + } +); diff --git a/src/_shared/util/validation/src/validators/object.test.ts b/src/_shared/util/validation/src/validators/object.test.ts new file mode 100644 index 000000000..20a0f98aa --- /dev/null +++ b/src/_shared/util/validation/src/validators/object.test.ts @@ -0,0 +1,66 @@ +import { describe, expect, test } from 'vitest'; +import { number } from './number'; +import { object } from './object'; +import { string } from './string'; + +describe('object', () => { + test('should validate an object with the correct shape', () => { + let validator = object({ + name: string(), + age: number() + }); + + let result: any = validator.validate({ + name: 'John Doe', + age: 42 + }); + + expect(result.success).toBe(true); + expect(result.value).toEqual({ + name: 'John Doe', + age: 42 + }); + }); + + test('should return an error for an object with an invalid shape', () => { + let validator = object({ + name: string(), + age: number() + }); + + let result: any = validator.validate({ + name: 'John Doe', + age: 'Test' + }); + + expect(result.success).toBe(false); + expect(result.errors).toEqual([ + { + code: 'invalid_type', + message: 'Invalid input, expected number, received string', + received: 'string', + expected: 'number', + path: ['age'] + } + ]); + }); + + test('should return an error for a non-object input', () => { + let validator = object({ + name: string(), + age: number() + }); + + let result: any = validator.validate('not an object'); + + expect(result.success).toBe(false); + expect(result.errors).toEqual([ + { + code: 'invalid_type', + message: 'Invalid input, expected object, received string', + received: 'string', + expected: 'object' + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/validators/object.ts b/src/_shared/util/validation/src/validators/object.ts new file mode 100644 index 000000000..d7d4166d1 --- /dev/null +++ b/src/_shared/util/validation/src/validators/object.ts @@ -0,0 +1,66 @@ +import { error, success } from '../lib/result'; +import type { ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types'; + +type KeysWhichExtend = { + [key in keyof T]: SelectedType extends T[key] ? key : never; +}[keyof T]; +type Optional = Partial>>; +type Required = Omit>; +export type UndefinedIsOptional = Optional & Required; + +export let object = }>( + shape: Validator, + opts?: ValidatorOptions>> +): ValidationType< + UndefinedIsOptional<{ + [key in keyof Validator]: ValidationTypeValue; + }> +> => ({ + type: 'object', + name: opts?.name, + description: opts?.description, + properties: shape, + examples: [ + Object.fromEntries( + Object.entries(shape) + .map(([key, validator]) => { + let example = validator.examples?.[0]; + // For nullable fields, if there's no example, don't include it + // This prevents undefined from becoming {} in Object.fromEntries + if (example === undefined && validator.nullable) { + return null; // Will be filtered out + } + return [key, example]; + }) + .filter((entry): entry is [string, any] => entry !== null) + ) + ] as any, + validate: value => { + if (typeof value !== 'object' || value === null || Array.isArray(value)) { + return error([ + { + code: 'invalid_type', + message: `Invalid input, expected object, received ${typeof value}`, + received: Array.isArray(value) ? 'array' : typeof value, + expected: 'object' + } + ]); + } + + let values: { + [key in keyof Validator]: ValidationTypeValue; + } = {} as any; + + for (let [key, validator] of Object.entries(shape)) { + let result = validator.validate(value[key]); + + if (result.success === false) { + return error(result.errors.map(e => ({ ...e, path: [key, ...(e.path ?? [])] }))); + } + + values[key as keyof Validator] = result.value; + } + + return success(values); + } +}); diff --git a/src/_shared/util/validation/src/validators/optional.test.ts b/src/_shared/util/validation/src/validators/optional.test.ts new file mode 100644 index 000000000..fede99906 --- /dev/null +++ b/src/_shared/util/validation/src/validators/optional.test.ts @@ -0,0 +1,33 @@ +import { describe, expect, test } from 'vitest'; +import { optional } from './optional'; +import { string } from './string'; + +describe('optional', () => { + test('should return a new validator with optional values', () => { + let validator = optional(string()); + + expect(validator.type).toBe('string'); + expect(validator.optional).toBe(true); + + expect(validator.validate(undefined)).toEqual({ success: true, value: undefined }); + expect(validator.validate('hello')).toEqual({ success: true, value: 'hello' }); + }); + + test('should pass through the validation result of the original validator', () => { + let validator = optional(string()); + + expect(validator.validate(undefined)).toEqual({ success: true, value: undefined }); + expect(validator.validate('hello')).toEqual({ success: true, value: 'hello' }); + expect(validator.validate(123)).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Invalid input, expected string, received number', + received: 'number', + expected: 'string' + } + ] + }); + }); +}); diff --git a/src/_shared/util/validation/src/validators/optional.ts b/src/_shared/util/validation/src/validators/optional.ts new file mode 100644 index 000000000..e74376fdf --- /dev/null +++ b/src/_shared/util/validation/src/validators/optional.ts @@ -0,0 +1,17 @@ +import type { ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types'; + +export let optional = >( + validator: A, + opts?: ValidatorOptions | undefined> +): ValidationType | undefined> => ({ + ...validator, + optional: true, + description: opts?.description ?? validator.description, + validate: value => { + if (value === undefined) { + return { success: true, value }; + } + + return validator.validate(value); + } +}); diff --git a/src/_shared/util/validation/src/validators/record.test.ts b/src/_shared/util/validation/src/validators/record.test.ts new file mode 100644 index 000000000..74e621ada --- /dev/null +++ b/src/_shared/util/validation/src/validators/record.test.ts @@ -0,0 +1,56 @@ +import { describe, expect, test } from 'vitest'; +import { number } from './number'; +import { record } from './record'; +import { string } from './string'; + +describe('record', () => { + test('should validate an empty object', () => { + let validator = record(string()); + let result: any = validator.validate({}); + expect(result.success).toBe(true); + expect(result.value).toEqual({}); + }); + + test('should validate an object with string keys and string values', () => { + let validator = record(string()); + let result: any = validator.validate({ foo: 'bar', baz: 'qux' }); + expect(result.success).toBe(true); + expect(result.value).toEqual({ foo: 'bar', baz: 'qux' }); + }); + + test('should validate an object with string keys and number values', () => { + let validator = record(number()); + let result: any = validator.validate({ foo: 1, bar: 2 }); + expect(result.success).toBe(true); + expect(result.value).toEqual({ foo: 1, bar: 2 }); + }); + + test('should fail to validate a non-object', () => { + let validator = record(string()); + let result: any = validator.validate('not an object'); + expect(result.success).toBe(false); + expect(result.errors).toEqual([ + { + code: 'invalid_type', + message: 'Invalid input, expected object', + received: 'not an object', + expected: 'object' + } + ]); + }); + + test('should fail to validate an object with invalid values', () => { + let validator = record(string()); + let result: any = validator.validate({ foo: 'bar', baz: 123 }); + expect(result.success).toBe(false); + expect(result.errors).toEqual([ + { + code: 'invalid_type', + message: 'Invalid input, expected string, received number', + received: 'number', + expected: 'string', + path: ['baz'] + } + ]); + }); +}); diff --git a/src/_shared/util/validation/src/validators/record.ts b/src/_shared/util/validation/src/validators/record.ts new file mode 100644 index 000000000..9d0f3e14e --- /dev/null +++ b/src/_shared/util/validation/src/validators/record.ts @@ -0,0 +1,56 @@ +import { error, success } from '../lib/result'; +import type { ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types'; + +export let record = >( + validator: Validator, + opts?: ValidatorOptions>> +): ValidationType>> => ({ + type: 'record', + items: validator, + name: opts?.name, + description: opts?.description, + examples: Array.isArray(validator.examples) + ? [ + { + key1: validator.examples[0] + } + ] + : undefined, + validate: value => { + if (typeof value != 'object' || value === null || Array.isArray(value)) { + return error([ + { + code: 'invalid_type', + message: `Invalid input, expected object`, + received: value, + expected: 'object' + } + ]); + } + + let values: Record> = {}; + + for (let [key, val] of Object.entries(value)) { + if (typeof key != 'string') { + return error([ + { + code: 'invalid_type', + message: `Invalid input, expected object with string keys, received ${typeof key}`, + received: key, + expected: 'string' + } + ]); + } + + let result = validator.validate(val); + + if (result.success === false) { + return error(result.errors.map(e => ({ ...e, path: [key, ...(e.path ?? [])] }))); + } + + values[key] = result.value; + } + + return success(values); + } +}); diff --git a/src/_shared/util/validation/src/validators/string.test.ts b/src/_shared/util/validation/src/validators/string.test.ts new file mode 100644 index 000000000..fa2fe44bf --- /dev/null +++ b/src/_shared/util/validation/src/validators/string.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from 'vitest'; +import { string } from './string'; + +describe('string', () => { + test('should return success when given a string', () => { + let result = string({}).validate('hello'); + expect(result).toEqual({ success: true, value: 'hello' }); + }); + + test('should return an error when given a non-string value', () => { + let result = string({}).validate(123); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Invalid input, expected string, received number', + received: 'number', + expected: 'string' + } + ] + }); + }); + + test('should use the provided error message', () => { + let result = string({ message: 'Custom error message' }).validate(123); + expect(result).toEqual({ + success: false, + errors: [ + { + code: 'invalid_type', + message: 'Custom error message', + received: 'number', + expected: 'string' + } + ] + }); + }); +}); diff --git a/src/_shared/util/validation/src/validators/string.ts b/src/_shared/util/validation/src/validators/string.ts new file mode 100644 index 000000000..45cc43aa6 --- /dev/null +++ b/src/_shared/util/validation/src/validators/string.ts @@ -0,0 +1,30 @@ +import { error } from '../lib/result'; +import type { ValidatorOptions } from '../lib/types'; +import { createValidator } from '../lib/validator'; + +export let string = createValidator>( + 'string', + (opts, value) => { + if (typeof value != 'string') { + return error([ + { + code: 'invalid_type', + message: opts.message ?? `Invalid input, expected string, received ${typeof value}`, + received: typeof value, + expected: 'string' + } + ]); + } + + if (value.length > 100_000) { + return error([ + { + code: 'max_length', + message: 'Input is too long' + } + ]); + } + + return { success: true, value }; + } +); diff --git a/src/_shared/util/validation/src/validators/union.test.ts b/src/_shared/util/validation/src/validators/union.test.ts new file mode 100644 index 000000000..b3bcb9f02 --- /dev/null +++ b/src/_shared/util/validation/src/validators/union.test.ts @@ -0,0 +1,73 @@ +import { describe, expect, test } from 'vitest'; +import { error, success } from '../lib/result'; +import { array, number, object, string } from './index'; +import { union } from './union'; + +describe('union', () => { + test('should validate a string', () => { + let validator = union([string(), number()]); + + expect(validator.validate('hello')).toEqual(success('hello')); + }); + + test('should validate a number', () => { + let validator = union([string(), number()]); + + expect(validator.validate(42)).toEqual(success(42)); + }); + + test('should not validate an object', () => { + let validator = union([string(), number()]); + + expect(validator.validate({})).toEqual( + error([ + { + code: 'invalid_type', + message: 'Invalid input, expected string, received object', + expected: 'string', + received: 'object' + }, + { + code: 'invalid_type', + expected: 'number', + message: 'Invalid input, expected number, received object', + received: 'object' + } + ]) + ); + }); + + test('should validate an array of strings', () => { + let validator = union([string(), array(string())]); + + expect(validator.validate(['hello', 'world'])).toEqual(success(['hello', 'world'])); + }); + + test('should validate an array of numbers', () => { + let validator = union([number(), array(number())]); + + expect(validator.validate([1, 2, 3])).toEqual(success([1, 2, 3])); + }); + + test('should not validate an array of objects', () => { + let validator = union([string(), array(object({}))]); + + expect(validator.validate(['hello', {}])).toEqual( + error([ + { + code: 'invalid_type', + expected: 'string', + message: 'Invalid input, expected string, received object', + received: 'object' + }, + { + code: 'invalid_type', + expected: 'object', + message: 'Invalid input, expected object, received string', + path: ['0'], + received: 'string' + } + ]) + ); + }); +}); diff --git a/src/_shared/util/validation/src/validators/union.ts b/src/_shared/util/validation/src/validators/union.ts new file mode 100644 index 000000000..d2b8987ab --- /dev/null +++ b/src/_shared/util/validation/src/validators/union.ts @@ -0,0 +1,34 @@ +import { error } from '../lib/result'; +import type { ValidationError, ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types'; + +export let union = < + A extends ValidationType, + B extends ValidationType, + Rest extends ValidationType[] +>( + validators: [A, B, ...Rest], + opts?: ValidatorOptions< + ValidationTypeValue | ValidationTypeValue | ValidationTypeValue + > +): ValidationType< + ValidationTypeValue | ValidationTypeValue | ValidationTypeValue +> => ({ + type: 'union', + name: opts?.name, + items: validators, + description: opts?.description, + examples: validators.flatMap(v => v.examples || []), + validate: value => { + let errors: ValidationError[] = []; + + for (let validator of validators) { + let result = validator.validate(value); + if (result.success) return result; + if (result.success !== false) continue; + + errors.push(...result.errors); + } + + return error(errors); + } +}); diff --git a/src/_shared/util/validation/src/validators/void.ts b/src/_shared/util/validation/src/validators/void.ts new file mode 100644 index 000000000..7764dad3d --- /dev/null +++ b/src/_shared/util/validation/src/validators/void.ts @@ -0,0 +1,6 @@ +import type { ValidatorOptions } from '../lib/types'; +import { createValidator } from '../lib/validator'; + +export let voidType = createValidator>('void', (opts, value) => { + return { success: true, value: undefined }; +}); diff --git a/src/_shared/util/validation/tsconfig.json b/src/_shared/util/validation/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/validation/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/_shared/util/websocket-client/package.json b/src/_shared/util/websocket-client/package.json new file mode 100644 index 000000000..6f318a719 --- /dev/null +++ b/src/_shared/util/websocket-client/package.json @@ -0,0 +1,18 @@ +{ + "name": "@mtsrc/websocket-client", + "version": "1.0.0", + "private": true, + "main": "src/index.ts", + "scripts": { + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@mtsrc/emitter": "1.0.0" + }, + "devDependencies": { + "@metorial/tsconfig": "1.0.0", + "typescript": "^5.8.3", + "vitest": "^3.1.2" + } +} diff --git a/src/_shared/util/websocket-client/src/index.ts b/src/_shared/util/websocket-client/src/index.ts new file mode 100644 index 000000000..80884ce5d --- /dev/null +++ b/src/_shared/util/websocket-client/src/index.ts @@ -0,0 +1,93 @@ +import { Emitter } from '@mtsrc/emitter'; + +// Highly inspired by https://github.com/lukeed/sockette/blob/master/src/index.js + +interface ReconnectingWebSocketOptions { + protocols?: string | string[]; + maxAttempts?: number; + timeout?: number; + + onReconnect?: (event: Event) => void; +} + +export class ReconnectingWebSocketClient { + private ws!: WebSocket; + private attempts = 0; + private timer: ReturnType | null = null; + private readonly url: string; + private readonly opts: ReconnectingWebSocketOptions; + private readonly maxAttempts: number; + private emitter = new Emitter(); + + constructor(url: string, opts: ReconnectingWebSocketOptions = {}) { + this.url = url; + this.opts = opts; + this.maxAttempts = opts.maxAttempts ?? Infinity; + + this.open(); + } + + private open(): void { + this.ws = new WebSocket(this.url, this.opts.protocols ?? []); + + this.ws.addEventListener('open', event => { + this.attempts = 0; + this.emitter.emit('open', event); + }); + + this.ws.addEventListener('close', event => { + // let shouldReconnect = ![1000, 1001, 1005].includes(event.code); + // if (shouldReconnect) { + this.reconnect(event); + // } else { + // this.emitter.emit('close', event); + // } + }); + + this.ws.addEventListener('error', event => { + let error = event as any; + if (error?.code === 'ECONNREFUSED') { + this.reconnect(event); + } else { + this.emitter.emit('error', event); + } + }); + + this.ws.addEventListener('message', event => { + this.emitter.emit('message', event); + }); + } + + private reconnect(event: Event): void { + if (this.timer) clearTimeout(this.timer); + + if (this.attempts++ < this.maxAttempts) { + this.timer = setTimeout(() => { + this.opts.onReconnect?.(event); + this.open(); + }, this.opts.timeout ?? 1000); + } else { + this.emitter.emit('maximum', event); + this.emitter.emit('close', event); + this.emitter.clear(); + } + } + + send(data: string | ArrayBufferLike): void { + this.ws.send(data); + } + + close(code: number = 1000, reason?: string): void { + if (this.timer) clearTimeout(this.timer); + this.emitter.clear(); + this.ws.close(code, reason); + } + + addEventListener(event: string, callback: (data: any) => void) { + return this.emitter.on(event, callback); + } + + get readyState() { + return this.ws.readyState; + } +} diff --git a/src/_shared/util/websocket-client/tsconfig.json b/src/_shared/util/websocket-client/tsconfig.json new file mode 100644 index 000000000..550c20f3e --- /dev/null +++ b/src/_shared/util/websocket-client/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@metorial/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": [ + "src" + ] +} diff --git a/src/backend/apis/auth/package.json b/src/backend/apis/auth/package.json index c6f46751a..5be5b9477 100644 --- a/src/backend/apis/auth/package.json +++ b/src/backend/apis/auth/package.json @@ -7,12 +7,12 @@ "scripts": {}, "dependencies": { "@metorial/context": "^1.0.0", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", "@metorial/auth": "^1.0.0", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/validation": "^1.0.10", - "@metorial/module-user": "^1.0.0" + "@metorial/module-user": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/apis/auth/src/index.ts b/src/backend/apis/auth/src/index.ts index f45d49f92..24e370a39 100644 --- a/src/backend/apis/auth/src/index.ts +++ b/src/backend/apis/auth/src/index.ts @@ -1,5 +1,5 @@ -import { cors, createHono, useRequestContext, useValidatedBody } from '@lowerdeck/hono'; -import { v } from '@lowerdeck/validation'; +import { cors, createHono, useRequestContext, useValidatedBody } from '@mtsrc/hono'; +import { v } from '@mtsrc/validation'; import { getDashboardAuthCookie, setDashboardAuthCookie } from '@metorial/auth'; import { Context } from '@metorial/context'; import { userAuthService } from '@metorial/module-user'; diff --git a/src/backend/apis/connection/package.json b/src/backend/apis/connection/package.json index 36235f6c8..4d6dcc09c 100644 --- a/src/backend/apis/connection/package.json +++ b/src/backend/apis/connection/package.json @@ -7,10 +7,6 @@ "@metorial/config": "^1.0.0", "@metorial/context": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/hono": "^1.0.10", "@metorial/id": "^1.0.0", "@metorial/mcp-utils": "^1.0.0", "@metorial/module-access": "^1.0.0", @@ -18,6 +14,10 @@ "@metorial/module-protect": "^1.0.0", "@metorial/module-subspace": "1.0.0", "@metorial/rest": "^1.0.0", - "hono": "^4.0.0" + "hono": "^4.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/hono": "1.0.0" } } \ No newline at end of file diff --git a/src/backend/apis/connection/src/env.ts b/src/backend/apis/connection/src/env.ts index cd1838b0e..497008ffb 100644 --- a/src/backend/apis/connection/src/env.ts +++ b/src/backend/apis/connection/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ subspace: { diff --git a/src/backend/apis/connection/src/getSession.ts b/src/backend/apis/connection/src/getSession.ts index 96009f09f..20582f7be 100644 --- a/src/backend/apis/connection/src/getSession.ts +++ b/src/backend/apis/connection/src/getSession.ts @@ -1,4 +1,4 @@ -import { forbiddenError, ServiceError, unauthorizedError } from '@lowerdeck/error'; +import { forbiddenError, ServiceError, unauthorizedError } from '@mtsrc/error'; import type { Instance } from '@metorial/db'; import { AuthInfo } from '@metorial/module-access'; import { Authenticator } from '@metorial/rest'; diff --git a/src/backend/apis/connection/src/index.ts b/src/backend/apis/connection/src/index.ts index 10e718b30..3e4ac0b19 100644 --- a/src/backend/apis/connection/src/index.ts +++ b/src/backend/apis/connection/src/index.ts @@ -1,5 +1,5 @@ -import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context'; -import { createHono, useRequestContext } from '@lowerdeck/hono'; +import { createExecutionContext, provideExecutionContext } from '@mtsrc/execution-context'; +import { createHono, useRequestContext } from '@mtsrc/hono'; import { generateSnowflakeId } from '@metorial/id'; import { AuthInfo } from '@metorial/module-access'; import { proxyMcpRequestToSubspace } from '@metorial/module-subspace'; diff --git a/src/backend/apis/connection/src/magic.ts b/src/backend/apis/connection/src/magic.ts index a0519d15b..d1c24f1f3 100644 --- a/src/backend/apis/connection/src/magic.ts +++ b/src/backend/apis/connection/src/magic.ts @@ -3,9 +3,9 @@ import { forbiddenError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context'; -import { useRequestContext } from '@lowerdeck/hono'; +} from '@mtsrc/error'; +import { createExecutionContext, provideExecutionContext } from '@mtsrc/execution-context'; +import { useRequestContext } from '@mtsrc/hono'; import { extractToken } from '@metorial/bearer'; import { Instance } from '@metorial/db'; import { generateSnowflakeId } from '@metorial/id'; diff --git a/src/backend/apis/connection/src/oauth/hono.ts b/src/backend/apis/connection/src/oauth/hono.ts index 9d98e33fc..6cf3cfafe 100644 --- a/src/backend/apis/connection/src/oauth/hono.ts +++ b/src/backend/apis/connection/src/oauth/hono.ts @@ -1,4 +1,4 @@ -import { internalServerError, isServiceError, notFoundError } from '@lowerdeck/error'; +import { internalServerError, isServiceError, notFoundError } from '@mtsrc/error'; import { Env, Hono } from 'hono'; export let createOAuthHono = (basePath?: string) => { diff --git a/src/backend/apis/connection/src/oauth/utils.ts b/src/backend/apis/connection/src/oauth/utils.ts index 63ef912c6..bf9832342 100644 --- a/src/backend/apis/connection/src/oauth/utils.ts +++ b/src/backend/apis/connection/src/oauth/utils.ts @@ -1,4 +1,4 @@ -import { ServiceError, badRequestError, unauthorizedError } from '@lowerdeck/error'; +import { ServiceError, badRequestError, unauthorizedError } from '@mtsrc/error'; import { Context } from 'hono'; export let getString = (value: unknown) => { diff --git a/src/backend/apis/connection/src/portal.ts b/src/backend/apis/connection/src/portal.ts index 23093acc2..712733b9a 100644 --- a/src/backend/apis/connection/src/portal.ts +++ b/src/backend/apis/connection/src/portal.ts @@ -1,5 +1,5 @@ -import { useRequestContext, useValidatedBody } from '@lowerdeck/hono'; -import { v } from '@lowerdeck/validation'; +import { useRequestContext, useValidatedBody } from '@mtsrc/hono'; +import { v } from '@mtsrc/validation'; import { getConfig } from '@metorial/config'; import { AuthInfo } from '@metorial/module-access'; import { diff --git a/src/backend/apis/core/package.json b/src/backend/apis/core/package.json index e2f31a3a2..b88a8338e 100644 --- a/src/backend/apis/core/package.json +++ b/src/backend/apis/core/package.json @@ -7,11 +7,8 @@ "scripts": {}, "dependencies": { "@metorial/db": "^1.0.0", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", "@metorial/auth": "^1.0.0", "@metorial/config": "^1.0.0", - "@lowerdeck/shadow-id": "^1.0.7", "@metorial/rest": "^1.0.0", "@metorial/presenter": "^1.0.0", "@metorial/module-access": "^1.0.0", @@ -23,8 +20,11 @@ "@metorial/module-organization": "^1.0.0", "@metorial/module-usage": "^1.0.0", "@metorial/module-user": "^1.0.0", - "@lowerdeck/validation": "^1.0.10", - "@lowerdeck/pagination": "^1.0.8" + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@mtsrc/pagination": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/apis/core/src/controllers/consumer/provider.ts b/src/backend/apis/core/src/controllers/consumer/provider.ts index 3cc27160d..01442ffa5 100644 --- a/src/backend/apis/core/src/controllers/consumer/provider.ts +++ b/src/backend/apis/core/src/controllers/consumer/provider.ts @@ -1,6 +1,6 @@ -import { badRequestError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerAccessRequestService, consumerOAuthDashboardService, diff --git a/src/backend/apis/core/src/controllers/consumer/session.ts b/src/backend/apis/core/src/controllers/consumer/session.ts index 849ead020..e70b370a1 100644 --- a/src/backend/apis/core/src/controllers/consumer/session.ts +++ b/src/backend/apis/core/src/controllers/consumer/session.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerAuthService, consumerProfileService } from '@metorial/module-consumer'; import { Controller } from '@metorial/rest'; import { consumerGroup, consumerPath } from '../../middleware/consumerGroup'; diff --git a/src/backend/apis/core/src/controllers/dashboard/assistant.ts b/src/backend/apis/core/src/controllers/dashboard/assistant.ts index 29af12864..c259b4951 100644 --- a/src/backend/apis/core/src/controllers/dashboard/assistant.ts +++ b/src/backend/apis/core/src/controllers/dashboard/assistant.ts @@ -1,6 +1,6 @@ -import { forbiddenError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { forbiddenError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { Consumer, OrganizationActor } from '@metorial/db'; import { assistantConversationService, diff --git a/src/backend/apis/core/src/controllers/dashboard/boot.ts b/src/backend/apis/core/src/controllers/dashboard/boot.ts index d09872e68..ac416b837 100644 --- a/src/backend/apis/core/src/controllers/dashboard/boot.ts +++ b/src/backend/apis/core/src/controllers/dashboard/boot.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { organizationService } from '@metorial/module-organization'; import { Controller, Path } from '@metorial/rest'; import { isDashboardGroup } from '../../middleware/isDashboard'; diff --git a/src/backend/apis/core/src/controllers/dashboard/oauthAuthorizationRequest.ts b/src/backend/apis/core/src/controllers/dashboard/oauthAuthorizationRequest.ts index 9fcf745bb..9c99aca4a 100644 --- a/src/backend/apis/core/src/controllers/dashboard/oauthAuthorizationRequest.ts +++ b/src/backend/apis/core/src/controllers/dashboard/oauthAuthorizationRequest.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { oauthAuthorizationService } from '@metorial/module-machine-access'; import { Controller, Path } from '@metorial/rest'; import { isDashboardGroup } from '../../middleware/isDashboard'; diff --git a/src/backend/apis/core/src/controllers/dashboard/organization.ts b/src/backend/apis/core/src/controllers/dashboard/organization.ts index 858571d30..66e778fe6 100644 --- a/src/backend/apis/core/src/controllers/dashboard/organization.ts +++ b/src/backend/apis/core/src/controllers/dashboard/organization.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { organizationService } from '@metorial/module-organization'; import { Controller, Path } from '@metorial/rest'; import { checkAccess } from '../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/dashboard/organizationInvite.ts b/src/backend/apis/core/src/controllers/dashboard/organizationInvite.ts index 7a665f60f..937175b75 100644 --- a/src/backend/apis/core/src/controllers/dashboard/organizationInvite.ts +++ b/src/backend/apis/core/src/controllers/dashboard/organizationInvite.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { organizationInviteJoinService } from '@metorial/module-organization'; import { Controller, Path } from '@metorial/rest'; import { isDashboardGroup } from '../../middleware/isDashboard'; diff --git a/src/backend/apis/core/src/controllers/dashboard/profile.ts b/src/backend/apis/core/src/controllers/dashboard/profile.ts index e2524e2b5..89e7ce85a 100644 --- a/src/backend/apis/core/src/controllers/dashboard/profile.ts +++ b/src/backend/apis/core/src/controllers/dashboard/profile.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { profileService } from '@metorial/module-community'; import { Controller, Path } from '@metorial/rest'; import { checkAccess } from '../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/dashboard/projectConfiguration.ts b/src/backend/apis/core/src/controllers/dashboard/projectConfiguration.ts index 8c46b375f..5d23564c0 100644 --- a/src/backend/apis/core/src/controllers/dashboard/projectConfiguration.ts +++ b/src/backend/apis/core/src/controllers/dashboard/projectConfiguration.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { accessService } from '@metorial/module-access'; import { projectRetentionService, projectService } from '@metorial/module-organization'; import { Controller, Path } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/dashboard/usage.ts b/src/backend/apis/core/src/controllers/dashboard/usage.ts index 03e346437..0706bf49b 100644 --- a/src/backend/apis/core/src/controllers/dashboard/usage.ts +++ b/src/backend/apis/core/src/controllers/dashboard/usage.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { instanceService } from '@metorial/module-organization'; import { usageService } from '@metorial/module-usage'; import { Controller, Path } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/dashboard/user.ts b/src/backend/apis/core/src/controllers/dashboard/user.ts index 843a9ebd6..6a03a9e2b 100644 --- a/src/backend/apis/core/src/controllers/dashboard/user.ts +++ b/src/backend/apis/core/src/controllers/dashboard/user.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { userService } from '@metorial/module-user'; import { Controller, Path } from '@metorial/rest'; import { checkAccess } from '../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/callbacks/callback.ts b/src/backend/apis/core/src/controllers/instance/callbacks/callback.ts index 2e2d3b2dd..ad723fee1 100644 --- a/src/backend/apis/core/src/controllers/instance/callbacks/callback.ts +++ b/src/backend/apis/core/src/controllers/instance/callbacks/callback.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceCallbackService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/callbacks/callbackDestination.ts b/src/backend/apis/core/src/controllers/instance/callbacks/callbackDestination.ts index 9a77a7b7a..e15546f3b 100644 --- a/src/backend/apis/core/src/controllers/instance/callbacks/callbackDestination.ts +++ b/src/backend/apis/core/src/controllers/instance/callbacks/callbackDestination.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceCallbackDestinationService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/callbacks/callbackEvent.ts b/src/backend/apis/core/src/controllers/instance/callbacks/callbackEvent.ts index 26a3f7b3a..d2528f0a5 100644 --- a/src/backend/apis/core/src/controllers/instance/callbacks/callbackEvent.ts +++ b/src/backend/apis/core/src/controllers/instance/callbacks/callbackEvent.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceCallbackEventService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/callbacks/callbackInstance.ts b/src/backend/apis/core/src/controllers/instance/callbacks/callbackInstance.ts index 1a9e706d8..3d2af49c3 100644 --- a/src/backend/apis/core/src/controllers/instance/callbacks/callbackInstance.ts +++ b/src/backend/apis/core/src/controllers/instance/callbacks/callbackInstance.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceCallbackInstanceService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/callbacks/callbackNotification.ts b/src/backend/apis/core/src/controllers/instance/callbacks/callbackNotification.ts index 1c971af1d..2ba96ac29 100644 --- a/src/backend/apis/core/src/controllers/instance/callbacks/callbackNotification.ts +++ b/src/backend/apis/core/src/controllers/instance/callbacks/callbackNotification.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceCallbackNotificationService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/consumer/consumer.ts b/src/backend/apis/core/src/controllers/instance/consumer/consumer.ts index daae0db7d..f849e22cc 100644 --- a/src/backend/apis/core/src/controllers/instance/consumer/consumer.ts +++ b/src/backend/apis/core/src/controllers/instance/consumer/consumer.ts @@ -1,6 +1,6 @@ -import { badRequestError, forbiddenError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, forbiddenError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerProfileService, consumerService, diff --git a/src/backend/apis/core/src/controllers/instance/consumer/consumerSurface.ts b/src/backend/apis/core/src/controllers/instance/consumer/consumerSurface.ts index c81655c3d..bef82b565 100644 --- a/src/backend/apis/core/src/controllers/instance/consumer/consumerSurface.ts +++ b/src/backend/apis/core/src/controllers/instance/consumer/consumerSurface.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerSurfaceService } from '@metorial/module-consumer'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/custom-provider/customProvider.ts b/src/backend/apis/core/src/controllers/instance/custom-provider/customProvider.ts index 925903ebd..092f6a675 100644 --- a/src/backend/apis/core/src/controllers/instance/custom-provider/customProvider.ts +++ b/src/backend/apis/core/src/controllers/instance/custom-provider/customProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, paymentRequiredError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v, ValidationTypeValue } from '@lowerdeck/validation'; +import { badRequestError, paymentRequiredError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v, ValidationTypeValue } from '@mtsrc/validation'; import { flagService } from '@metorial/module-flags'; import { subspaceCustomProviderService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderCode.ts b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderCode.ts index a65d4c861..d5afb69fb 100644 --- a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderCode.ts +++ b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderCode.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { subspaceBucketService, subspaceCustomProviderService diff --git a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderCommit.ts b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderCommit.ts index a1e1bf8f7..549ff77fe 100644 --- a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderCommit.ts +++ b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderCommit.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceCustomProviderCommitService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderDeployment.ts b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderDeployment.ts index d3c1ec7a1..d8db472a6 100644 --- a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderDeployment.ts +++ b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderDeployment.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceCustomProviderDeploymentService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderEnvironment.ts b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderEnvironment.ts index 8374e7194..936ef1821 100644 --- a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderEnvironment.ts +++ b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderEnvironment.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceCustomProviderEnvironmentService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderVersion.ts b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderVersion.ts index dd24283ca..a8095295a 100644 --- a/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderVersion.ts +++ b/src/backend/apis/core/src/controllers/instance/custom-provider/customProviderVersion.ts @@ -1,6 +1,6 @@ -import { badRequestError, paymentRequiredError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, paymentRequiredError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { flagService } from '@metorial/module-flags'; import { subspaceCustomProviderVersionService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/instance/files/_listFilters.ts b/src/backend/apis/core/src/controllers/instance/files/_listFilters.ts index b4c3aa0c8..e58aa9c89 100644 --- a/src/backend/apis/core/src/controllers/instance/files/_listFilters.ts +++ b/src/backend/apis/core/src/controllers/instance/files/_listFilters.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; export let stringArrayFilterSchema = (description: string) => v.optional(v.union([v.string(), v.array(v.string())]), { description }); diff --git a/src/backend/apis/core/src/controllers/instance/files/document.ts b/src/backend/apis/core/src/controllers/instance/files/document.ts index 59e2aa33f..bc7aa30b4 100644 --- a/src/backend/apis/core/src/controllers/instance/files/document.ts +++ b/src/backend/apis/core/src/controllers/instance/files/document.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { documentService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/files/documentParticipant.ts b/src/backend/apis/core/src/controllers/instance/files/documentParticipant.ts index c3ed5adde..8c1618bfe 100644 --- a/src/backend/apis/core/src/controllers/instance/files/documentParticipant.ts +++ b/src/backend/apis/core/src/controllers/instance/files/documentParticipant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { documentParticipantService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/files/documentVersion.ts b/src/backend/apis/core/src/controllers/instance/files/documentVersion.ts index 7f678084e..118c42dd1 100644 --- a/src/backend/apis/core/src/controllers/instance/files/documentVersion.ts +++ b/src/backend/apis/core/src/controllers/instance/files/documentVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { documentVersionService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/files/file.ts b/src/backend/apis/core/src/controllers/instance/files/file.ts index 6e1dd3f2e..b585f8b2a 100644 --- a/src/backend/apis/core/src/controllers/instance/files/file.ts +++ b/src/backend/apis/core/src/controllers/instance/files/file.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { fileService, hasInstanceConsumerAccess, purposeSlugs } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/files/fileLink.ts b/src/backend/apis/core/src/controllers/instance/files/fileLink.ts index c36f24fd9..ddb1d6c2d 100644 --- a/src/backend/apis/core/src/controllers/instance/files/fileLink.ts +++ b/src/backend/apis/core/src/controllers/instance/files/fileLink.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { fileLinkService, fileService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess, hasInstanceConsumerAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/files/store.ts b/src/backend/apis/core/src/controllers/instance/files/store.ts index 17c564926..16dc86dc8 100644 --- a/src/backend/apis/core/src/controllers/instance/files/store.ts +++ b/src/backend/apis/core/src/controllers/instance/files/store.ts @@ -1,6 +1,6 @@ -import { forbiddenError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { forbiddenError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { storeService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess, hasInstanceConsumerAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/files/storeItem.ts b/src/backend/apis/core/src/controllers/instance/files/storeItem.ts index 554080588..63d482f56 100644 --- a/src/backend/apis/core/src/controllers/instance/files/storeItem.ts +++ b/src/backend/apis/core/src/controllers/instance/files/storeItem.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { storeItemService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/files/storeParticipant.ts b/src/backend/apis/core/src/controllers/instance/files/storeParticipant.ts index 02636ddb9..1395b8f97 100644 --- a/src/backend/apis/core/src/controllers/instance/files/storeParticipant.ts +++ b/src/backend/apis/core/src/controllers/instance/files/storeParticipant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { storeParticipantService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/identity/agent.ts b/src/backend/apis/core/src/controllers/instance/identity/agent.ts index 0b4bdc135..b76b500e5 100644 --- a/src/backend/apis/core/src/controllers/instance/identity/agent.ts +++ b/src/backend/apis/core/src/controllers/instance/identity/agent.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceAgentInstanceService, subspaceAgentService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/identity/identity.ts b/src/backend/apis/core/src/controllers/instance/identity/identity.ts index 9fca11a03..6a13fe90b 100644 --- a/src/backend/apis/core/src/controllers/instance/identity/identity.ts +++ b/src/backend/apis/core/src/controllers/instance/identity/identity.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIdentityService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/identity/identityActor.ts b/src/backend/apis/core/src/controllers/instance/identity/identityActor.ts index 9ef1ff218..db1f8d310 100644 --- a/src/backend/apis/core/src/controllers/instance/identity/identityActor.ts +++ b/src/backend/apis/core/src/controllers/instance/identity/identityActor.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIdentityActorService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/identity/identityCredential.ts b/src/backend/apis/core/src/controllers/instance/identity/identityCredential.ts index 97200a5d8..cb6b00e7d 100644 --- a/src/backend/apis/core/src/controllers/instance/identity/identityCredential.ts +++ b/src/backend/apis/core/src/controllers/instance/identity/identityCredential.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIdentityCredentialService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/identity/identityDelegation.ts b/src/backend/apis/core/src/controllers/instance/identity/identityDelegation.ts index b44f7a5ac..bf203bf2b 100644 --- a/src/backend/apis/core/src/controllers/instance/identity/identityDelegation.ts +++ b/src/backend/apis/core/src/controllers/instance/identity/identityDelegation.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIdentityDelegationService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/identity/identityDelegationConfig.ts b/src/backend/apis/core/src/controllers/instance/identity/identityDelegationConfig.ts index af13f1f5c..fcf8b310f 100644 --- a/src/backend/apis/core/src/controllers/instance/identity/identityDelegationConfig.ts +++ b/src/backend/apis/core/src/controllers/instance/identity/identityDelegationConfig.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIdentityDelegationConfigService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/identity/identityDelegationRequest.ts b/src/backend/apis/core/src/controllers/instance/identity/identityDelegationRequest.ts index 3642ceab9..05283aa68 100644 --- a/src/backend/apis/core/src/controllers/instance/identity/identityDelegationRequest.ts +++ b/src/backend/apis/core/src/controllers/instance/identity/identityDelegationRequest.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIdentityDelegationRequestService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/instances.ts b/src/backend/apis/core/src/controllers/instance/instances.ts index 1f2341ea3..7c5e0144b 100644 --- a/src/backend/apis/core/src/controllers/instance/instances.ts +++ b/src/backend/apis/core/src/controllers/instance/instances.ts @@ -1,4 +1,4 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { notFoundError, ServiceError } from '@mtsrc/error'; import { instanceService } from '@metorial/module-organization'; import { Controller, Path } from '@metorial/rest'; import { apiGroup } from '../../middleware/apiGroup'; diff --git a/src/backend/apis/core/src/controllers/instance/integrations/integration.ts b/src/backend/apis/core/src/controllers/instance/integrations/integration.ts index f32b79388..2b2e0118a 100644 --- a/src/backend/apis/core/src/controllers/instance/integrations/integration.ts +++ b/src/backend/apis/core/src/controllers/instance/integrations/integration.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIntegrationService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/integrations/integrationInstance.ts b/src/backend/apis/core/src/controllers/instance/integrations/integrationInstance.ts index 26a0af526..5d62706e6 100644 --- a/src/backend/apis/core/src/controllers/instance/integrations/integrationInstance.ts +++ b/src/backend/apis/core/src/controllers/instance/integrations/integrationInstance.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIntegrationInstanceService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceGroup.ts b/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceGroup.ts index 29c14f152..fdc5e3126 100644 --- a/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceGroup.ts +++ b/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceGroup.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIntegrationInstanceGroupService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceGroupProvider.ts b/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceGroupProvider.ts index 56de5bf6b..c66e9c754 100644 --- a/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceGroupProvider.ts +++ b/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceGroupProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIntegrationInstanceGroupProviderService, subspaceIntegrationInstanceGroupService diff --git a/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceProvider.ts b/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceProvider.ts index 9f065cfdc..f9af59c35 100644 --- a/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceProvider.ts +++ b/src/backend/apis/core/src/controllers/instance/integrations/integrationInstanceProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIntegrationInstanceProviderService, subspaceIntegrationInstanceService diff --git a/src/backend/apis/core/src/controllers/instance/integrations/integrationProvider.ts b/src/backend/apis/core/src/controllers/instance/integrations/integrationProvider.ts index fccd4cf3c..3b3088ccb 100644 --- a/src/backend/apis/core/src/controllers/instance/integrations/integrationProvider.ts +++ b/src/backend/apis/core/src/controllers/instance/integrations/integrationProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIntegrationProviderService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/integrations/integrationSetupSession.ts b/src/backend/apis/core/src/controllers/instance/integrations/integrationSetupSession.ts index 7a2fe3c97..e2084627e 100644 --- a/src/backend/apis/core/src/controllers/instance/integrations/integrationSetupSession.ts +++ b/src/backend/apis/core/src/controllers/instance/integrations/integrationSetupSession.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceIntegrationSetupSessionService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/integrations/providerTemplate.ts b/src/backend/apis/core/src/controllers/instance/integrations/providerTemplate.ts index 5cae38734..1441bf715 100644 --- a/src/backend/apis/core/src/controllers/instance/integrations/providerTemplate.ts +++ b/src/backend/apis/core/src/controllers/instance/integrations/providerTemplate.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerProviderTemplateReadRoles } from '@metorial/module-access'; import { providerTemplateService } from '@metorial/module-magic'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpEndpoint.ts b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpEndpoint.ts index 6e7e2996f..1dd808c65 100644 --- a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpEndpoint.ts +++ b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpEndpoint.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { MagicMcpEndpointStatus } from '@metorial/db'; import { consumerProfileService, diff --git a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpGroup.ts b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpGroup.ts index cf37fba96..e6ed56559 100644 --- a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpGroup.ts +++ b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpGroup.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { MagicMcpGroupStatus } from '@metorial/db'; import { magicMcpGroupService } from '@metorial/module-magic'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpServer.ts b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpServer.ts index 875fb2cdd..5c481bbc1 100644 --- a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpServer.ts +++ b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpServer.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { MagicMcpServerStatus } from '@metorial/db'; import { consumerProfileService, diff --git a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpSession.ts b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpSession.ts index 2f482202b..c1f676715 100644 --- a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpSession.ts +++ b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpSession.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { magicMcpSessionService } from '@metorial/module-magic'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpToken.ts b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpToken.ts index e64c71061..e76123c09 100644 --- a/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpToken.ts +++ b/src/backend/apis/core/src/controllers/instance/magic-mcp/magicMcpToken.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { MagicMcpTokenStatus } from '@metorial/db'; import { grantConsumerOwnedMagicMcpTokenAccess } from '@metorial/module-consumer'; import { diff --git a/src/backend/apis/core/src/controllers/instance/portal/portal.ts b/src/backend/apis/core/src/controllers/instance/portal/portal.ts index 098500d97..a1493e838 100644 --- a/src/backend/apis/core/src/controllers/instance/portal/portal.ts +++ b/src/backend/apis/core/src/controllers/instance/portal/portal.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { portalService } from '@metorial/module-consumer'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/portal/portalAuth.ts b/src/backend/apis/core/src/controllers/instance/portal/portalAuth.ts index 321c11fc2..8378f4730 100644 --- a/src/backend/apis/core/src/controllers/instance/portal/portalAuth.ts +++ b/src/backend/apis/core/src/controllers/instance/portal/portalAuth.ts @@ -1,6 +1,6 @@ -import { badRequestError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { getConfig } from '@metorial/config'; import { consumerAresService, consumerSurfaceService } from '@metorial/module-consumer'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccess.ts b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccess.ts index 8a6cca0fe..b4cc9663d 100644 --- a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccess.ts +++ b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccess.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { db } from '@metorial/db'; import { consumerAccessService, consumerGroupService } from '@metorial/module-consumer'; import { magicMcpServerService, providerTemplateService } from '@metorial/module-magic'; diff --git a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccessListing.ts b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccessListing.ts index bf47750ab..b755019e6 100644 --- a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccessListing.ts +++ b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccessListing.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerAccessListingService } from '@metorial/module-consumer'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccessRequest.ts b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccessRequest.ts index 5666e59f4..29bceee04 100644 --- a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccessRequest.ts +++ b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerAccessRequest.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerAccessRequestService, consumerGroupService } from '@metorial/module-consumer'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerGroup.ts b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerGroup.ts index 86a73133c..0c3304160 100644 --- a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerGroup.ts +++ b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerGroup.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerGroupService } from '@metorial/module-consumer'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerInvite.ts b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerInvite.ts index 67c388841..078f47782 100644 --- a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerInvite.ts +++ b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerInvite.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerInviteService } from '@metorial/module-consumer'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerProfile.ts b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerProfile.ts index 4f15d2706..67578ab70 100644 --- a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerProfile.ts +++ b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerProfile.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerProfileService } from '@metorial/module-consumer'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerSurfaceProviderGroup.ts b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerSurfaceProviderGroup.ts index 8372c64dd..4a534bd18 100644 --- a/src/backend/apis/core/src/controllers/instance/portal/portalConsumerSurfaceProviderGroup.ts +++ b/src/backend/apis/core/src/controllers/instance/portal/portalConsumerSurfaceProviderGroup.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerAccessListingService, consumerSurfaceProviderGroupService diff --git a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfig.ts b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfig.ts index 6d4c97d08..c4dc5eedd 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfig.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfig.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderAuthConfigService, subspaceProviderAuthMethodService diff --git a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfigError.ts b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfigError.ts index 485f885eb..eb875a014 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfigError.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfigError.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceAuthConfigErrorGlobalService, subspaceAuthConfigErrorService diff --git a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfigEvent.ts b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfigEvent.ts index ae9ce0318..f586a76d7 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfigEvent.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthConfigEvent.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceAuthConfigEventService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthCredentials.ts b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthCredentials.ts index 5f497023a..a3d619cc8 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthCredentials.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthCredentials.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderAuthCredentialsService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthExport.ts b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthExport.ts index dedf8b692..5ca242362 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthExport.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthExport.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderAuthExportService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthImport.ts b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthImport.ts index fb5658021..334e870de 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthImport.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-auth/providerAuthImport.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderAuthImportService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider-auth/providerSetupSession.ts b/src/backend/apis/core/src/controllers/instance/provider-auth/providerSetupSession.ts index 774ce57ff..7999a6028 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-auth/providerSetupSession.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-auth/providerSetupSession.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderSetupSessionService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider-config/providerConfig.ts b/src/backend/apis/core/src/controllers/instance/provider-config/providerConfig.ts index 3ac451f3e..cef9c988d 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-config/providerConfig.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-config/providerConfig.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderConfigService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider-config/providerConfigVault.ts b/src/backend/apis/core/src/controllers/instance/provider-config/providerConfigVault.ts index 1fc8fc82e..391ccac36 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-config/providerConfigVault.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-config/providerConfigVault.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderConfigVaultService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider-config/providerDeployment.ts b/src/backend/apis/core/src/controllers/instance/provider-config/providerDeployment.ts index a4bdcef7e..e29804d66 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-config/providerDeployment.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-config/providerDeployment.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v, ValidationTypeValue } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v, ValidationTypeValue } from '@mtsrc/validation'; import { subspaceProviderDeploymentService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider-config/providerInvocation.ts b/src/backend/apis/core/src/controllers/instance/provider-config/providerInvocation.ts index e9c122973..c43dde294 100644 --- a/src/backend/apis/core/src/controllers/instance/provider-config/providerInvocation.ts +++ b/src/backend/apis/core/src/controllers/instance/provider-config/providerInvocation.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { subspaceProviderInvocationService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/provider.ts b/src/backend/apis/core/src/controllers/instance/provider/provider.ts index b24de71eb..ddeac3966 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/provider.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/provider.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerAuthMethod.ts b/src/backend/apis/core/src/controllers/instance/provider/providerAuthMethod.ts index 4d0785c3d..efc20d32a 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerAuthMethod.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerAuthMethod.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderAuthMethodService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerCategory.ts b/src/backend/apis/core/src/controllers/instance/provider/providerCategory.ts index aec8151d5..78663a10a 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerCategory.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerCategory.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderListingCategoryService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerCollection.ts b/src/backend/apis/core/src/controllers/instance/provider/providerCollection.ts index 8d4653291..74740c66d 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerCollection.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerCollection.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderListingCollectionService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerGroup.ts b/src/backend/apis/core/src/controllers/instance/provider/providerGroup.ts index 47df9f565..662fae2cc 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerGroup.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerGroup.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderListingGroupService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerListing.ts b/src/backend/apis/core/src/controllers/instance/provider/providerListing.ts index 6e14e8428..ecb71e948 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerListing.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerListing.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderListingService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerPublisher.ts b/src/backend/apis/core/src/controllers/instance/provider/providerPublisher.ts index b633b23e1..29ef11a98 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerPublisher.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerPublisher.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspacePublisherService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerSpecification.ts b/src/backend/apis/core/src/controllers/instance/provider/providerSpecification.ts index 0bbc8dc9f..80e04f1bf 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerSpecification.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerSpecification.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderSpecificationService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerTool.ts b/src/backend/apis/core/src/controllers/instance/provider/providerTool.ts index 5c5c72027..42204cf5e 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerTool.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerTool.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderToolService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerTrigger.ts b/src/backend/apis/core/src/controllers/instance/provider/providerTrigger.ts index 6e3ef97a6..90f3c3aa2 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerTrigger.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerTrigger.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderTriggerService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/provider/providerVersion.ts b/src/backend/apis/core/src/controllers/instance/provider/providerVersion.ts index 1a924551a..f255ae991 100644 --- a/src/backend/apis/core/src/controllers/instance/provider/providerVersion.ts +++ b/src/backend/apis/core/src/controllers/instance/provider/providerVersion.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderVersionService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/scm/accounts.ts b/src/backend/apis/core/src/controllers/instance/scm/accounts.ts index 85cdb3746..745211baf 100644 --- a/src/backend/apis/core/src/controllers/instance/scm/accounts.ts +++ b/src/backend/apis/core/src/controllers/instance/scm/accounts.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { subspaceScmRepositoryService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/scm/connections.ts b/src/backend/apis/core/src/controllers/instance/scm/connections.ts index e08bcc3ee..12b5201cf 100644 --- a/src/backend/apis/core/src/controllers/instance/scm/connections.ts +++ b/src/backend/apis/core/src/controllers/instance/scm/connections.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceScmConnectionService, subspaceScmConnectionSetupSessionService diff --git a/src/backend/apis/core/src/controllers/instance/scm/installation.ts b/src/backend/apis/core/src/controllers/instance/scm/installation.ts index 3804f8e5f..0fc931be1 100644 --- a/src/backend/apis/core/src/controllers/instance/scm/installation.ts +++ b/src/backend/apis/core/src/controllers/instance/scm/installation.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceScmConnectionService, subspaceScmConnectionSetupSessionService diff --git a/src/backend/apis/core/src/controllers/instance/scm/providers.ts b/src/backend/apis/core/src/controllers/instance/scm/providers.ts index a3ff36ae8..52df0de2b 100644 --- a/src/backend/apis/core/src/controllers/instance/scm/providers.ts +++ b/src/backend/apis/core/src/controllers/instance/scm/providers.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceScmProviderService, subspaceScmProviderSetupSessionService diff --git a/src/backend/apis/core/src/controllers/instance/scm/repos.ts b/src/backend/apis/core/src/controllers/instance/scm/repos.ts index 9896b1488..cf1eceda1 100644 --- a/src/backend/apis/core/src/controllers/instance/scm/repos.ts +++ b/src/backend/apis/core/src/controllers/instance/scm/repos.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceScmRepositoryService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/_shared.ts b/src/backend/apis/core/src/controllers/instance/sessions/_shared.ts index 0a9c21719..b8a08b3a9 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/_shared.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/_shared.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; export let toolFilterValidator = v.union([ v.object({ diff --git a/src/backend/apis/core/src/controllers/instance/sessions/providerRun.ts b/src/backend/apis/core/src/controllers/instance/sessions/providerRun.ts index a5fc955f9..29a68d46a 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/providerRun.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/providerRun.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceProviderRunService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/session.ts b/src/backend/apis/core/src/controllers/instance/sessions/session.ts index 91e97a86e..b405e902e 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/session.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/session.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v, ValidationTypeValue } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v, ValidationTypeValue } from '@mtsrc/validation'; import { subspaceSessionService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { resolveActorIdsForLogFilters } from './_logFilterActors'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/sessionConnection.ts b/src/backend/apis/core/src/controllers/instance/sessions/sessionConnection.ts index a9f1ffc59..4852606d9 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/sessionConnection.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/sessionConnection.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSessionConnectionService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { resolveActorIdsForLogFilters } from './_logFilterActors'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/sessionError.ts b/src/backend/apis/core/src/controllers/instance/sessions/sessionError.ts index 71f19e87f..f3f6b2c02 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/sessionError.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/sessionError.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSessionErrorService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/sessionErrorGroup.ts b/src/backend/apis/core/src/controllers/instance/sessions/sessionErrorGroup.ts index eeccfa61d..4d097bb6c 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/sessionErrorGroup.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/sessionErrorGroup.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSessionErrorGroupService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/sessionEvent.ts b/src/backend/apis/core/src/controllers/instance/sessions/sessionEvent.ts index 197dc4f9d..684404a67 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/sessionEvent.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/sessionEvent.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSessionEventService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/sessionMessage.ts b/src/backend/apis/core/src/controllers/instance/sessions/sessionMessage.ts index 3da77d605..ec56c74a1 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/sessionMessage.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/sessionMessage.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSessionMessageService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/sessionParticipant.ts b/src/backend/apis/core/src/controllers/instance/sessions/sessionParticipant.ts index 3249dce24..8b2a852d6 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/sessionParticipant.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/sessionParticipant.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSessionParticipantService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { resolveActorIdsForLogFilters } from './_logFilterActors'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/sessionProvider.ts b/src/backend/apis/core/src/controllers/instance/sessions/sessionProvider.ts index f7505f025..af7b33693 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/sessionProvider.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/sessionProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v, ValidationTypeValue } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v, ValidationTypeValue } from '@mtsrc/validation'; import { subspaceSessionProviderService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/sessionTemplate.ts b/src/backend/apis/core/src/controllers/instance/sessions/sessionTemplate.ts index a6d17d46f..46b2f9b59 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/sessionTemplate.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/sessionTemplate.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSessionTemplateService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/sessionTemplateProvider.ts b/src/backend/apis/core/src/controllers/instance/sessions/sessionTemplateProvider.ts index ecc15e078..626eba115 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/sessionTemplateProvider.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/sessionTemplateProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSessionTemplateProviderService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/sessions/toolCall.ts b/src/backend/apis/core/src/controllers/instance/sessions/toolCall.ts index 4b8ba051e..814201809 100644 --- a/src/backend/apis/core/src/controllers/instance/sessions/toolCall.ts +++ b/src/backend/apis/core/src/controllers/instance/sessions/toolCall.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceToolCallService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/_marketplaceAccess.ts b/src/backend/apis/core/src/controllers/instance/skills/_marketplaceAccess.ts index ac3e0a906..9e23f6ed1 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/_marketplaceAccess.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/_marketplaceAccess.ts @@ -1,4 +1,4 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { notFoundError, ServiceError } from '@mtsrc/error'; import { db } from '@metorial/db'; import type { ConsumerGroup, Instance } from '@metorial/db'; import { hasInstanceConsumerAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skill.ts b/src/backend/apis/core/src/controllers/instance/skills/skill.ts index 2eb27a715..1cb17d399 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skill.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skill.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { consumerSkillService } from '@metorial/module-consumer'; import { subspaceSkillService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillAgent.ts b/src/backend/apis/core/src/controllers/instance/skills/skillAgent.ts index 1dd222db6..0dede73c6 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillAgent.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillAgent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import type { Instance, Organization } from '@metorial/db'; import { skillAgentService } from '@metorial/module-file'; import type { SubspaceSkill } from '@metorial/module-subspace'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillConfiguration.ts b/src/backend/apis/core/src/controllers/instance/skills/skillConfiguration.ts index 4f5b47a78..a686dd7ed 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillConfiguration.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillConfiguration.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import type { Instance, Organization } from '@metorial/db'; import { skillConfigurationService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillExport.ts b/src/backend/apis/core/src/controllers/instance/skills/skillExport.ts index 53edf6457..f9fe74e3d 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillExport.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillExport.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillExportService, skillPluginService } from '@metorial/module-file'; import { subspaceSkillService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillGroup.ts b/src/backend/apis/core/src/controllers/instance/skills/skillGroup.ts index c8a39ccea..fedd65a7c 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillGroup.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillGroup.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSkillGroupService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillGroupItem.ts b/src/backend/apis/core/src/controllers/instance/skills/skillGroupItem.ts index b3454a268..7f621354f 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillGroupItem.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillGroupItem.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSkillGroupItemService, subspaceSkillGroupService diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillItem.ts b/src/backend/apis/core/src/controllers/instance/skills/skillItem.ts index 70ca1774c..0870b8be2 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillItem.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillItem.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { ConsumerProfile, Skill } from '@metorial/db'; import { consumerSkillService } from '@metorial/module-consumer'; import { subspaceSkillItemService } from '@metorial/module-subspace'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillMarketplace.ts b/src/backend/apis/core/src/controllers/instance/skills/skillMarketplace.ts index ef7b67df1..17d44f143 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillMarketplace.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillMarketplace.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillMarketplaceService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillMarketplacePlugin.ts b/src/backend/apis/core/src/controllers/instance/skills/skillMarketplacePlugin.ts index f4951b0af..d38dba263 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillMarketplacePlugin.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillMarketplacePlugin.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillPluginService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillMarketplaceRepository.ts b/src/backend/apis/core/src/controllers/instance/skills/skillMarketplaceRepository.ts index dd88488c8..cf8f3f374 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillMarketplaceRepository.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillMarketplaceRepository.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillMarketplaceRepositoryService, skillMarketplaceService diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillParticipant.ts b/src/backend/apis/core/src/controllers/instance/skills/skillParticipant.ts index db404be60..f3d4cb944 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillParticipant.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillParticipant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillParticipantService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillPlugin.ts b/src/backend/apis/core/src/controllers/instance/skills/skillPlugin.ts index 94eb33b46..c8d0a4c40 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillPlugin.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillPlugin.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillPluginService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { getInstanceCargoAccess, hasInstanceConsumerAccess } from '../../../lib/cargoAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillPluginRepository.ts b/src/backend/apis/core/src/controllers/instance/skills/skillPluginRepository.ts index aa80ce5bf..8c344398d 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillPluginRepository.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillPluginRepository.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillPluginRepositoryService, skillPluginService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillPluginSkill.ts b/src/backend/apis/core/src/controllers/instance/skills/skillPluginSkill.ts index 73cb545b2..2e127cbd5 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillPluginSkill.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillPluginSkill.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillPluginService } from '@metorial/module-file'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillSync.ts b/src/backend/apis/core/src/controllers/instance/skills/skillSync.ts index cc3add55f..5a717a49e 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillSync.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillSync.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillSyncService } from '@metorial/module-file'; import { Controller, Path } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillTemplate.ts b/src/backend/apis/core/src/controllers/instance/skills/skillTemplate.ts index 6e065e35f..4d99cd735 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillTemplate.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillTemplate.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSkillTemplateService } from '@metorial/module-subspace'; import { Controller } from '@metorial/rest'; import { dateFilterValidator } from '../../../lib/dateFilter'; diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillTemplateItem.ts b/src/backend/apis/core/src/controllers/instance/skills/skillTemplateItem.ts index 0a296c8b2..bbf9fdb78 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillTemplateItem.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillTemplateItem.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subspaceSkillTemplateItemService, subspaceSkillTemplateService diff --git a/src/backend/apis/core/src/controllers/instance/skills/skillVersion.ts b/src/backend/apis/core/src/controllers/instance/skills/skillVersion.ts index 741cce9dd..766b5f1e5 100644 --- a/src/backend/apis/core/src/controllers/instance/skills/skillVersion.ts +++ b/src/backend/apis/core/src/controllers/instance/skills/skillVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import type { Instance, Organization } from '@metorial/db'; import { skillVersionService } from '@metorial/module-file'; import type { SubspaceSkill } from '@metorial/module-subspace'; diff --git a/src/backend/apis/core/src/controllers/management/access/accessPolicy.ts b/src/backend/apis/core/src/controllers/management/access/accessPolicy.ts index 4c9df4ee2..d24396d28 100644 --- a/src/backend/apis/core/src/controllers/management/access/accessPolicy.ts +++ b/src/backend/apis/core/src/controllers/management/access/accessPolicy.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { accessPolicyService } from '@metorial/module-organization'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/management/access/accessRole.ts b/src/backend/apis/core/src/controllers/management/access/accessRole.ts index fcf907d5d..5bfb9908a 100644 --- a/src/backend/apis/core/src/controllers/management/access/accessRole.ts +++ b/src/backend/apis/core/src/controllers/management/access/accessRole.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { accessRoleService } from '@metorial/module-organization'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/management/access/team.ts b/src/backend/apis/core/src/controllers/management/access/team.ts index 889c0fa19..d7bafb1ab 100644 --- a/src/backend/apis/core/src/controllers/management/access/team.ts +++ b/src/backend/apis/core/src/controllers/management/access/team.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { accessPolicyAssignmentService, accessPolicyService, diff --git a/src/backend/apis/core/src/controllers/management/auth/apiKey.ts b/src/backend/apis/core/src/controllers/management/auth/apiKey.ts index 1c2e99129..1018e4bd2 100644 --- a/src/backend/apis/core/src/controllers/management/auth/apiKey.ts +++ b/src/backend/apis/core/src/controllers/management/auth/apiKey.ts @@ -3,9 +3,9 @@ import { forbiddenError, notFoundError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { Organization } from '@metorial/db'; import { accessService, AuthInfo } from '@metorial/module-access'; import { apiKeyService, ListApiKeysFilter } from '@metorial/module-machine-access'; diff --git a/src/backend/apis/core/src/controllers/management/auth/cliDevice.ts b/src/backend/apis/core/src/controllers/management/auth/cliDevice.ts index 7152e28a3..d60eb3ae4 100644 --- a/src/backend/apis/core/src/controllers/management/auth/cliDevice.ts +++ b/src/backend/apis/core/src/controllers/management/auth/cliDevice.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { cliDeviceService } from '@metorial/module-machine-access'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/management/auth/oauthApplication.ts b/src/backend/apis/core/src/controllers/management/auth/oauthApplication.ts index f14a410a2..ed933538d 100644 --- a/src/backend/apis/core/src/controllers/management/auth/oauthApplication.ts +++ b/src/backend/apis/core/src/controllers/management/auth/oauthApplication.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { oauthApplicationService } from '@metorial/module-machine-access'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/management/auth/oauthAuthorization.ts b/src/backend/apis/core/src/controllers/management/auth/oauthAuthorization.ts index 50df1fb7b..81554e002 100644 --- a/src/backend/apis/core/src/controllers/management/auth/oauthAuthorization.ts +++ b/src/backend/apis/core/src/controllers/management/auth/oauthAuthorization.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { oauthAuthorizationService } from '@metorial/module-machine-access'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/management/auth/oauthAuthorizationLog.ts b/src/backend/apis/core/src/controllers/management/auth/oauthAuthorizationLog.ts index f7e96d2a3..ae86f2934 100644 --- a/src/backend/apis/core/src/controllers/management/auth/oauthAuthorizationLog.ts +++ b/src/backend/apis/core/src/controllers/management/auth/oauthAuthorizationLog.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { oauthAuthorizationLogService } from '@metorial/module-machine-access'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/management/auth/oauthInstallation.ts b/src/backend/apis/core/src/controllers/management/auth/oauthInstallation.ts index 6c17a746b..99d6b6fe5 100644 --- a/src/backend/apis/core/src/controllers/management/auth/oauthInstallation.ts +++ b/src/backend/apis/core/src/controllers/management/auth/oauthInstallation.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { oauthAuthorizationInstallationService } from '@metorial/module-machine-access'; import { Controller } from '@metorial/rest'; import { normalizeArrayParam } from '../../../lib/normalizeArrayParam'; diff --git a/src/backend/apis/core/src/controllers/management/auth/serviceAccount.ts b/src/backend/apis/core/src/controllers/management/auth/serviceAccount.ts index db0167f6f..6f34440e1 100644 --- a/src/backend/apis/core/src/controllers/management/auth/serviceAccount.ts +++ b/src/backend/apis/core/src/controllers/management/auth/serviceAccount.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serviceAccountService } from '@metorial/module-machine-access'; import { accessPolicyAssignmentService, diff --git a/src/backend/apis/core/src/controllers/management/organization/instance.ts b/src/backend/apis/core/src/controllers/management/organization/instance.ts index 89ce1d4c7..67364d844 100644 --- a/src/backend/apis/core/src/controllers/management/organization/instance.ts +++ b/src/backend/apis/core/src/controllers/management/organization/instance.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { accessService } from '@metorial/module-access'; import { instanceService, projectService } from '@metorial/module-organization'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/management/organization/organization.ts b/src/backend/apis/core/src/controllers/management/organization/organization.ts index 935acec70..09408f2ce 100644 --- a/src/backend/apis/core/src/controllers/management/organization/organization.ts +++ b/src/backend/apis/core/src/controllers/management/organization/organization.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { organizationService } from '@metorial/module-organization'; import { Controller, Path } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/management/organization/organizationInvite.ts b/src/backend/apis/core/src/controllers/management/organization/organizationInvite.ts index a224ba0a3..508dfa44c 100644 --- a/src/backend/apis/core/src/controllers/management/organization/organizationInvite.ts +++ b/src/backend/apis/core/src/controllers/management/organization/organizationInvite.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { organizationInviteService } from '@metorial/module-organization'; import { Controller } from '@metorial/rest'; import { checkAccess } from '../../../middleware/checkAccess'; diff --git a/src/backend/apis/core/src/controllers/management/organization/organizationMember.ts b/src/backend/apis/core/src/controllers/management/organization/organizationMember.ts index 98ce0f13f..f160e7e06 100644 --- a/src/backend/apis/core/src/controllers/management/organization/organizationMember.ts +++ b/src/backend/apis/core/src/controllers/management/organization/organizationMember.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { accessPolicyAssignmentService, accessPolicyService, diff --git a/src/backend/apis/core/src/controllers/management/organization/project.ts b/src/backend/apis/core/src/controllers/management/organization/project.ts index 7cf9ebc91..2f1d8192f 100644 --- a/src/backend/apis/core/src/controllers/management/organization/project.ts +++ b/src/backend/apis/core/src/controllers/management/organization/project.ts @@ -1,6 +1,6 @@ -import { badRequestError, forbiddenError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, forbiddenError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { accessService } from '@metorial/module-access'; import { projectBrandService, projectService } from '@metorial/module-organization'; import { Controller } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/controllers/test-helpers/consumerOAuth.ts b/src/backend/apis/core/src/controllers/test-helpers/consumerOAuth.ts index fc1c49817..d1835af55 100644 --- a/src/backend/apis/core/src/controllers/test-helpers/consumerOAuth.ts +++ b/src/backend/apis/core/src/controllers/test-helpers/consumerOAuth.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { accessService } from '@metorial/module-access'; import { consumerOAuthTestAuthorizationService } from '@metorial/module-consumer'; import { Controller, Path } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/lib/dateFilter.ts b/src/backend/apis/core/src/lib/dateFilter.ts index 7b2442a01..c1851abb4 100644 --- a/src/backend/apis/core/src/lib/dateFilter.ts +++ b/src/backend/apis/core/src/lib/dateFilter.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; export let dateFilterValidator = (description: string) => v.optional( diff --git a/src/backend/apis/core/src/lib/providerValidators.ts b/src/backend/apis/core/src/lib/providerValidators.ts index b65e11885..3ee4429cb 100644 --- a/src/backend/apis/core/src/lib/providerValidators.ts +++ b/src/backend/apis/core/src/lib/providerValidators.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; export let deploymentValidator = v.union([ v.object({ diff --git a/src/backend/apis/core/src/lib/requireParam.ts b/src/backend/apis/core/src/lib/requireParam.ts index e1809f38c..9182cdb6f 100644 --- a/src/backend/apis/core/src/lib/requireParam.ts +++ b/src/backend/apis/core/src/lib/requireParam.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; export let requireParam = (params: Record, key: string) => { let value = params[key]; diff --git a/src/backend/apis/core/src/middleware/checkFineGrainedSessionAccess.ts b/src/backend/apis/core/src/middleware/checkFineGrainedSessionAccess.ts index 38b354d97..6da15bb82 100644 --- a/src/backend/apis/core/src/middleware/checkFineGrainedSessionAccess.ts +++ b/src/backend/apis/core/src/middleware/checkFineGrainedSessionAccess.ts @@ -1,4 +1,4 @@ -import { forbiddenError, ServiceError } from '@lowerdeck/error'; +import { forbiddenError, ServiceError } from '@mtsrc/error'; import { AuthInfo, Scope } from '@metorial/module-access'; import { apiGroup } from './apiGroup'; diff --git a/src/backend/apis/core/src/middleware/consumerGroup.ts b/src/backend/apis/core/src/middleware/consumerGroup.ts index a9225b61d..cd6a91f94 100644 --- a/src/backend/apis/core/src/middleware/consumerGroup.ts +++ b/src/backend/apis/core/src/middleware/consumerGroup.ts @@ -1,4 +1,4 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; import { Path } from '@metorial/rest'; import { instanceGroup } from './instanceGroup'; diff --git a/src/backend/apis/core/src/middleware/hasFlags.ts b/src/backend/apis/core/src/middleware/hasFlags.ts index efe78dbff..337e8d56f 100644 --- a/src/backend/apis/core/src/middleware/hasFlags.ts +++ b/src/backend/apis/core/src/middleware/hasFlags.ts @@ -1,4 +1,4 @@ -import { forbiddenError, paymentRequiredError, ServiceError } from '@lowerdeck/error'; +import { forbiddenError, paymentRequiredError, ServiceError } from '@mtsrc/error'; import { Flags, flagService } from '@metorial/module-flags'; import { apiGroup } from './apiGroup'; diff --git a/src/backend/apis/core/src/middleware/instanceGroup.ts b/src/backend/apis/core/src/middleware/instanceGroup.ts index b10095662..cb2d4dbcf 100644 --- a/src/backend/apis/core/src/middleware/instanceGroup.ts +++ b/src/backend/apis/core/src/middleware/instanceGroup.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { getConsumerAccessContextForConsumerProfile } from '@metorial/consumer-auth'; import { accessService } from '@metorial/module-access'; import { consumerProfileService } from '@metorial/module-consumer'; diff --git a/src/backend/apis/core/src/middleware/isDashboard.ts b/src/backend/apis/core/src/middleware/isDashboard.ts index 092a745ed..00c0fb720 100644 --- a/src/backend/apis/core/src/middleware/isDashboard.ts +++ b/src/backend/apis/core/src/middleware/isDashboard.ts @@ -1,4 +1,4 @@ -import { forbiddenError, ServiceError } from '@lowerdeck/error'; +import { forbiddenError, ServiceError } from '@mtsrc/error'; import { apiGroup } from './apiGroup'; import { organizationGroup } from './organizationGroup'; diff --git a/src/backend/apis/core/src/middleware/managementGroup.ts b/src/backend/apis/core/src/middleware/managementGroup.ts index 27c115b0d..3cfa4db78 100644 --- a/src/backend/apis/core/src/middleware/managementGroup.ts +++ b/src/backend/apis/core/src/middleware/managementGroup.ts @@ -1,4 +1,4 @@ -import { forbiddenError, ServiceError } from '@lowerdeck/error'; +import { forbiddenError, ServiceError } from '@mtsrc/error'; import { apiGroup } from './apiGroup'; export let managementGroup = apiGroup.use(async ctx => { diff --git a/src/backend/apis/core/src/middleware/organizationGroup.ts b/src/backend/apis/core/src/middleware/organizationGroup.ts index 39c746f68..410e10392 100644 --- a/src/backend/apis/core/src/middleware/organizationGroup.ts +++ b/src/backend/apis/core/src/middleware/organizationGroup.ts @@ -1,4 +1,4 @@ -import { badRequestError, forbiddenError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, forbiddenError, ServiceError } from '@mtsrc/error'; import { accessService } from '@metorial/module-access'; import { flagService } from '@metorial/module-flags'; import { Path } from '@metorial/rest'; diff --git a/src/backend/apis/core/src/middleware/requireConsumerTokenForPublishableKey.ts b/src/backend/apis/core/src/middleware/requireConsumerTokenForPublishableKey.ts index 406a73d7c..1bbfe9f9b 100644 --- a/src/backend/apis/core/src/middleware/requireConsumerTokenForPublishableKey.ts +++ b/src/backend/apis/core/src/middleware/requireConsumerTokenForPublishableKey.ts @@ -1,4 +1,4 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; import { instanceGroup } from './instanceGroup'; export let requireConsumerTokenForPublishableKey = instanceGroup.createMiddleware(async ctx => { diff --git a/src/backend/apis/core/src/middleware/requireNonPublishableMachineAccess.ts b/src/backend/apis/core/src/middleware/requireNonPublishableMachineAccess.ts index 9d2e90abe..7bc0b9ced 100644 --- a/src/backend/apis/core/src/middleware/requireNonPublishableMachineAccess.ts +++ b/src/backend/apis/core/src/middleware/requireNonPublishableMachineAccess.ts @@ -1,4 +1,4 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; import { instanceGroup } from './instanceGroup'; export let requireNonPublishableMachineAccess = instanceGroup.createMiddleware(async ctx => { diff --git a/src/backend/apis/core/src/middleware/userGroup.ts b/src/backend/apis/core/src/middleware/userGroup.ts index b8dc133a9..fa06f1be8 100644 --- a/src/backend/apis/core/src/middleware/userGroup.ts +++ b/src/backend/apis/core/src/middleware/userGroup.ts @@ -1,4 +1,4 @@ -import { ServiceError, forbiddenError } from '@lowerdeck/error'; +import { ServiceError, forbiddenError } from '@mtsrc/error'; import { apiGroup } from './apiGroup'; export let userGroup = apiGroup.use(async ctx => { diff --git a/src/backend/apis/core/src/presenters/implementation/_shared/toolFilter.ts b/src/backend/apis/core/src/presenters/implementation/_shared/toolFilter.ts index 4d2062faa..a6bb3bb8d 100644 --- a/src/backend/apis/core/src/presenters/implementation/_shared/toolFilter.ts +++ b/src/backend/apis/core/src/presenters/implementation/_shared/toolFilter.ts @@ -1,4 +1,4 @@ -import { v, ValidationTypeValue } from '@lowerdeck/validation'; +import { v, ValidationTypeValue } from '@mtsrc/validation'; import { SubspaceProviderAuthConfig } from '@metorial/module-subspace'; let schema = v.union( diff --git a/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicy.ts b/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicy.ts index ebf130ca4..75ea75e0b 100644 --- a/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicy.ts +++ b/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicy.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { accessPolicyType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicyPreview.ts b/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicyPreview.ts index 5159917d4..d2a83a56f 100644 --- a/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicyPreview.ts +++ b/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicyPreview.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { accessPolicyPreviewType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicyVersion.ts b/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicyVersion.ts index 462d40ad7..8933728ce 100644 --- a/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicyVersion.ts +++ b/src/backend/apis/core/src/presenters/implementation/accessControl/accessPolicyVersion.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { accessPolicyVersionType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/accessControl/accessRole.ts b/src/backend/apis/core/src/presenters/implementation/accessControl/accessRole.ts index f0510b25d..97105c2d0 100644 --- a/src/backend/apis/core/src/presenters/implementation/accessControl/accessRole.ts +++ b/src/backend/apis/core/src/presenters/implementation/accessControl/accessRole.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { accessRoleType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/accessControl/accessRoleVersion.ts b/src/backend/apis/core/src/presenters/implementation/accessControl/accessRoleVersion.ts index b555643b0..0f6cc20b8 100644 --- a/src/backend/apis/core/src/presenters/implementation/accessControl/accessRoleVersion.ts +++ b/src/backend/apis/core/src/presenters/implementation/accessControl/accessRoleVersion.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { accessRoleVersionType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/assistant/assistant.ts b/src/backend/apis/core/src/presenters/implementation/assistant/assistant.ts index 06155fbc3..777e7b191 100644 --- a/src/backend/apis/core/src/presenters/implementation/assistant/assistant.ts +++ b/src/backend/apis/core/src/presenters/implementation/assistant/assistant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { assistantType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/assistant/assistantConversation.ts b/src/backend/apis/core/src/presenters/implementation/assistant/assistantConversation.ts index a48c6a05f..d8eaac71d 100644 --- a/src/backend/apis/core/src/presenters/implementation/assistant/assistantConversation.ts +++ b/src/backend/apis/core/src/presenters/implementation/assistant/assistantConversation.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { assistantConversationType } from '../../types'; import { diff --git a/src/backend/apis/core/src/presenters/implementation/assistant/assistantMessage.ts b/src/backend/apis/core/src/presenters/implementation/assistant/assistantMessage.ts index b4bb05da5..4eea08179 100644 --- a/src/backend/apis/core/src/presenters/implementation/assistant/assistantMessage.ts +++ b/src/backend/apis/core/src/presenters/implementation/assistant/assistantMessage.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { assistantMessageType } from '../../types'; import { diff --git a/src/backend/apis/core/src/presenters/implementation/auth/apiKey.ts b/src/backend/apis/core/src/presenters/implementation/auth/apiKey.ts index fafa56b32..6a0d43e76 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/apiKey.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/apiKey.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { ApiKey } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { apiKeyType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/cliDevice.ts b/src/backend/apis/core/src/presenters/implementation/auth/cliDevice.ts index 361a75e6f..75c16b000 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/cliDevice.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/cliDevice.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { cliDeviceType } from '../../types'; import { v1UserPresenter } from '../organization/user'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/machineAccess.ts b/src/backend/apis/core/src/presenters/implementation/auth/machineAccess.ts index 4697051e4..3cbc27639 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/machineAccess.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/machineAccess.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { machineAccessType } from '../../types'; import { v1InstancePresenter } from '../organization/instance'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/oauthApplication.ts b/src/backend/apis/core/src/presenters/implementation/auth/oauthApplication.ts index 03c99b836..c5daa27e3 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/oauthApplication.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/oauthApplication.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { getScopeDefinition, Scope } from '@metorial/module-access'; import { Presenter } from '@metorial/presenter'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/oauthApplicationClientSecret.ts b/src/backend/apis/core/src/presenters/implementation/auth/oauthApplicationClientSecret.ts index 6541eb22a..ad3530bea 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/oauthApplicationClientSecret.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/oauthApplicationClientSecret.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { oauthApplicationClientSecretType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorization.ts b/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorization.ts index fe833bc62..4fd0106ba 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorization.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorization.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getScopeDefinition, Scope } from '@metorial/module-access'; import { Presenter } from '@metorial/presenter'; import { oauthAuthorizationType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorizationLog.ts b/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorizationLog.ts index 7930770f5..cf6cf1e75 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorizationLog.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorizationLog.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getScopeDefinition, Scope } from '@metorial/module-access'; import { Presenter } from '@metorial/presenter'; import { oauthAuthorizationLogType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorizationRequest.ts b/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorizationRequest.ts index cd28dbf42..d166f3a5d 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorizationRequest.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/oauthAuthorizationRequest.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getScopeDefinition, Scope } from '@metorial/module-access'; import type { OAuthAuthorizationRequestWithRelations } from '@metorial/module-machine-access'; import { Presenter } from '@metorial/presenter'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/oauthInstallation.ts b/src/backend/apis/core/src/presenters/implementation/auth/oauthInstallation.ts index cc7669e26..f68d9015c 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/oauthInstallation.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/oauthInstallation.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getScopeDefinition, Scope } from '@metorial/module-access'; import { Presenter } from '@metorial/presenter'; import { oauthInstallationType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/oauthScopePermissions.ts b/src/backend/apis/core/src/presenters/implementation/auth/oauthScopePermissions.ts index 58b4d4e32..46d93c0f0 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/oauthScopePermissions.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/oauthScopePermissions.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { oauthScopePermissionsType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/serviceAccount.ts b/src/backend/apis/core/src/presenters/implementation/auth/serviceAccount.ts index 3ae8b3354..611c32ea4 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/serviceAccount.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/serviceAccount.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getScopeDefinition, Scope } from '@metorial/module-access'; import { Presenter } from '@metorial/presenter'; import { serviceAccountType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/serviceAccountCredential.ts b/src/backend/apis/core/src/presenters/implementation/auth/serviceAccountCredential.ts index 603d02e49..627236840 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/serviceAccountCredential.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/serviceAccountCredential.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getScopeDefinition, Scope } from '@metorial/module-access'; import { Presenter } from '@metorial/presenter'; import { serviceAccountCredentialType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/auth/token.ts b/src/backend/apis/core/src/presenters/implementation/auth/token.ts index 092cf2f31..a97451c17 100644 --- a/src/backend/apis/core/src/presenters/implementation/auth/token.ts +++ b/src/backend/apis/core/src/presenters/implementation/auth/token.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { tokenType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumer.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumer.ts index a0b3af6f3..0e170e598 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumer.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumer.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { consumerType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccess.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccess.ts index d51fc9200..d2a94cd5e 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccess.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccess.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerAccessType } from '../../types'; import { v1ConsumerGroupPresenter } from './consumerGroup'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccessListing.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccessListing.ts index ff517ff15..39fa6c90f 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccessListing.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccessListing.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerAccessListingType } from '../../types'; import { v1MagicMcpServerPreview } from '../provider/magicMcp/magicMcpServerPreview'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccessRequest.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccessRequest.ts index 24bf19b56..92f56f05b 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccessRequest.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerAccessRequest.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerAccessRequestType } from '../../types'; import { v1MagicMcpServerPreview } from '../provider/magicMcp/magicMcpServerPreview'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerAndProfile.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerAndProfile.ts index d473d906d..525ad7e0c 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerAndProfile.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerAndProfile.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerAndProfileType } from '../../types'; import { v1ConsumerPresenter } from './consumer'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerGroup.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerGroup.ts index 9c8c24135..b61d1d3e6 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerGroup.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerGroup.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerGroupType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerInvite.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerInvite.ts index 6db51c461..345ec58e9 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerInvite.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerInvite.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { portalService } from '@metorial/module-consumer'; import { Presenter } from '@metorial/presenter'; import { consumerInviteType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerProfile.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerProfile.ts index 877f326d6..fc10470e7 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerProfile.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerProfile.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { consumerProfileType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerProvider.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerProvider.ts index cef1f6016..a13286e31 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerProvider.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerProvider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerProviderType } from '../../types'; import { diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerSession.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerSession.ts index 88847e00b..8864d6f3a 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerSession.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerSession.ts @@ -1,5 +1,5 @@ import { Presenter } from '@metorial/presenter'; -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { consumerSessionType } from '../../types'; export let v1ConsumerSessionPresenter = Presenter.create(consumerSessionType) diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerSurface.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerSurface.ts index fea5632f6..b907ca775 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerSurface.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerSurface.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerSurfaceType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/consumer/consumerSurfaceProviderGroup.ts b/src/backend/apis/core/src/presenters/implementation/consumer/consumerSurfaceProviderGroup.ts index c5d62f3a1..7fba98143 100644 --- a/src/backend/apis/core/src/presenters/implementation/consumer/consumerSurfaceProviderGroup.ts +++ b/src/backend/apis/core/src/presenters/implementation/consumer/consumerSurfaceProviderGroup.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerSurfaceProviderGroupType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/files/document.ts b/src/backend/apis/core/src/presenters/implementation/files/document.ts index a3eb1c698..848fb95a5 100644 --- a/src/backend/apis/core/src/presenters/implementation/files/document.ts +++ b/src/backend/apis/core/src/presenters/implementation/files/document.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { documentType } from '../../types'; import { documentParticipantActorSchema, presentDocumentParticipantActor } from './documentParticipant'; diff --git a/src/backend/apis/core/src/presenters/implementation/files/documentParticipant.ts b/src/backend/apis/core/src/presenters/implementation/files/documentParticipant.ts index 57dcdd4cd..4a3fa8e25 100644 --- a/src/backend/apis/core/src/presenters/implementation/files/documentParticipant.ts +++ b/src/backend/apis/core/src/presenters/implementation/files/documentParticipant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import type { EnrichedCargoDocumentActor } from '@metorial/module-file'; import type { PresenterContext } from '@metorial/presenter'; import { Presenter } from '@metorial/presenter'; diff --git a/src/backend/apis/core/src/presenters/implementation/files/documentVersion.ts b/src/backend/apis/core/src/presenters/implementation/files/documentVersion.ts index 65f3adb01..58b9b229c 100644 --- a/src/backend/apis/core/src/presenters/implementation/files/documentVersion.ts +++ b/src/backend/apis/core/src/presenters/implementation/files/documentVersion.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { documentVersionType } from '../../types'; import { diff --git a/src/backend/apis/core/src/presenters/implementation/files/file.ts b/src/backend/apis/core/src/presenters/implementation/files/file.ts index 7b73235a0..f53b4ef0c 100644 --- a/src/backend/apis/core/src/presenters/implementation/files/file.ts +++ b/src/backend/apis/core/src/presenters/implementation/files/file.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { fileType } from '../../types'; import { documentParticipantActorSchema, presentDocumentParticipantActor } from './documentParticipant'; diff --git a/src/backend/apis/core/src/presenters/implementation/files/fileLink.ts b/src/backend/apis/core/src/presenters/implementation/files/fileLink.ts index f322397f0..bc89f9ce3 100644 --- a/src/backend/apis/core/src/presenters/implementation/files/fileLink.ts +++ b/src/backend/apis/core/src/presenters/implementation/files/fileLink.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getConfig } from '@metorial/config'; import { Presenter } from '@metorial/presenter'; import { fileLinkType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/files/permissions.ts b/src/backend/apis/core/src/presenters/implementation/files/permissions.ts index 46b47efb4..2af2a317b 100644 --- a/src/backend/apis/core/src/presenters/implementation/files/permissions.ts +++ b/src/backend/apis/core/src/presenters/implementation/files/permissions.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { documentPermissionsType, storePermissionsType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/files/store.ts b/src/backend/apis/core/src/presenters/implementation/files/store.ts index eeaed6f36..baea0ee60 100644 --- a/src/backend/apis/core/src/presenters/implementation/files/store.ts +++ b/src/backend/apis/core/src/presenters/implementation/files/store.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { storeType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/files/storeItem.ts b/src/backend/apis/core/src/presenters/implementation/files/storeItem.ts index 749bf41ff..a035f1338 100644 --- a/src/backend/apis/core/src/presenters/implementation/files/storeItem.ts +++ b/src/backend/apis/core/src/presenters/implementation/files/storeItem.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { storeItemListType, storeItemType } from '../../types'; import { v1DocumentPresenter } from './document'; diff --git a/src/backend/apis/core/src/presenters/implementation/files/storeParticipant.ts b/src/backend/apis/core/src/presenters/implementation/files/storeParticipant.ts index ebcf2293c..eeb394772 100644 --- a/src/backend/apis/core/src/presenters/implementation/files/storeParticipant.ts +++ b/src/backend/apis/core/src/presenters/implementation/files/storeParticipant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { storeParticipantType } from '../../types'; import { diff --git a/src/backend/apis/core/src/presenters/implementation/organization/instance.ts b/src/backend/apis/core/src/presenters/implementation/organization/instance.ts index 0a282f39d..f203198b2 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/instance.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/instance.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { instanceListType, instanceType } from '../../types'; import { v1ProjectPresenter } from '../organization/project'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/organization.ts b/src/backend/apis/core/src/presenters/implementation/organization/organization.ts index 22b8579cc..d5e54aa48 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/organization.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/organization.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { organizationType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/organizationActor.ts b/src/backend/apis/core/src/presenters/implementation/organization/organizationActor.ts index 28737e5f1..b4867bce1 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/organizationActor.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/organizationActor.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { organizationActorType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/organizationInvite.ts b/src/backend/apis/core/src/presenters/implementation/organization/organizationInvite.ts index be9325512..3640d45dc 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/organizationInvite.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/organizationInvite.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getConfig } from '@metorial/config'; import { Presenter } from '@metorial/presenter'; import { organizationInviteType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/organizationMember.ts b/src/backend/apis/core/src/presenters/implementation/organization/organizationMember.ts index 58c4932c7..6bd3bf833 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/organizationMember.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/organizationMember.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { organizationMemberType } from '../../types'; import { v1AccessPolicyPreviewPresenter } from '../accessControl/accessPolicyPreview'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/profile.ts b/src/backend/apis/core/src/presenters/implementation/organization/profile.ts index 1a92862ef..9e6bf0e77 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/profile.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/profile.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { profileType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/project.ts b/src/backend/apis/core/src/presenters/implementation/organization/project.ts index 90f109240..8b43dc338 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/project.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/project.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { projectType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/projectBrand.ts b/src/backend/apis/core/src/presenters/implementation/organization/projectBrand.ts index b24710ca9..6b553f9f8 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/projectBrand.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/projectBrand.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { projectBrandType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/projectRetention.ts b/src/backend/apis/core/src/presenters/implementation/organization/projectRetention.ts index 414325580..61e9cd39d 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/projectRetention.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/projectRetention.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { projectRetentionType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/team.ts b/src/backend/apis/core/src/presenters/implementation/organization/team.ts index fcf114636..fe9fdee9b 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/team.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/team.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { teamType } from '../../types'; import { v1AccessPolicyPreviewPresenter } from '../accessControl/accessPolicyPreview'; diff --git a/src/backend/apis/core/src/presenters/implementation/organization/user.ts b/src/backend/apis/core/src/presenters/implementation/organization/user.ts index 88a6d8715..49d97cae2 100644 --- a/src/backend/apis/core/src/presenters/implementation/organization/user.ts +++ b/src/backend/apis/core/src/presenters/implementation/organization/user.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { userType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/platform/boot.ts b/src/backend/apis/core/src/presenters/implementation/platform/boot.ts index 13d0a4efe..2a055f8d0 100644 --- a/src/backend/apis/core/src/presenters/implementation/platform/boot.ts +++ b/src/backend/apis/core/src/presenters/implementation/platform/boot.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { bootType } from '../../types'; import { v1InstancePresenter } from '../organization/instance'; diff --git a/src/backend/apis/core/src/presenters/implementation/platform/flags.ts b/src/backend/apis/core/src/presenters/implementation/platform/flags.ts index a772f3338..1d96e3f2f 100644 --- a/src/backend/apis/core/src/presenters/implementation/platform/flags.ts +++ b/src/backend/apis/core/src/presenters/implementation/platform/flags.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { flagsType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/platform/secret.ts b/src/backend/apis/core/src/presenters/implementation/platform/secret.ts index f2fbd9d79..8262f3850 100644 --- a/src/backend/apis/core/src/presenters/implementation/platform/secret.ts +++ b/src/backend/apis/core/src/presenters/implementation/platform/secret.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { secretType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/platform/usage.ts b/src/backend/apis/core/src/presenters/implementation/platform/usage.ts index 3c523a110..31a90100c 100644 --- a/src/backend/apis/core/src/presenters/implementation/platform/usage.ts +++ b/src/backend/apis/core/src/presenters/implementation/platform/usage.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { usageType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/portal/portal.ts b/src/backend/apis/core/src/presenters/implementation/portal/portal.ts index 44db62f9f..9b883e7e8 100644 --- a/src/backend/apis/core/src/presenters/implementation/portal/portal.ts +++ b/src/backend/apis/core/src/presenters/implementation/portal/portal.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getPortalAllowedRedirectUrlFilters } from '@metorial/module-consumer'; import { Presenter } from '@metorial/presenter'; import { portalType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/portal/portalAuthApp.ts b/src/backend/apis/core/src/presenters/implementation/portal/portalAuthApp.ts index 7994a1958..101ef8f27 100644 --- a/src/backend/apis/core/src/presenters/implementation/portal/portalAuthApp.ts +++ b/src/backend/apis/core/src/presenters/implementation/portal/portalAuthApp.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { portalAuthAppType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoConnection.ts b/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoConnection.ts index 685736ade..c7ffe3020 100644 --- a/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoConnection.ts +++ b/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoConnection.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { portalAuthSsoConnectionType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoTenant.ts b/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoTenant.ts index 70902da23..3b28ee446 100644 --- a/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoTenant.ts +++ b/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoTenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { portalAuthSsoTenantType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoTenantSetup.ts b/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoTenantSetup.ts index 8786f50ac..2f0ca7a9e 100644 --- a/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoTenantSetup.ts +++ b/src/backend/apis/core/src/presenters/implementation/portal/portalAuthSsoTenantSetup.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { portalAuthSsoTenantSetupType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/portal/portalOAuthAuthorization.ts b/src/backend/apis/core/src/presenters/implementation/portal/portalOAuthAuthorization.ts index 25547709b..a73d8e2f4 100644 --- a/src/backend/apis/core/src/presenters/implementation/portal/portalOAuthAuthorization.ts +++ b/src/backend/apis/core/src/presenters/implementation/portal/portalOAuthAuthorization.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { portalOAuthAuthorizationType } from '../../types'; import { v1PortalOAuthClientPresenter } from './portalOAuthClient'; diff --git a/src/backend/apis/core/src/presenters/implementation/portal/portalOAuthClient.ts b/src/backend/apis/core/src/presenters/implementation/portal/portalOAuthClient.ts index 157d7ea47..c8ecc489d 100644 --- a/src/backend/apis/core/src/presenters/implementation/portal/portalOAuthClient.ts +++ b/src/backend/apis/core/src/presenters/implementation/portal/portalOAuthClient.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { portalOAuthClientType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfig.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfig.ts index b2808db9f..443ffb3a0 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfig.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfig.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerAuthConfigType } from '../../../types'; import { toolFilterPresenter } from '../../_shared/toolFilter'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigError.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigError.ts index 397412d65..75d2f358b 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigError.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigError.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerAuthConfigErrorType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigErrorGroup.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigErrorGroup.ts index 9d0a1de3b..e61c409c3 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigErrorGroup.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigErrorGroup.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerAuthConfigErrorGroupType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigEvent.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigEvent.ts index 96dbaf30c..80cc68803 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigEvent.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigEvent.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerAuthConfigEventType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigPreview.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigPreview.ts index 33cf1bd39..e953bd3e3 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigPreview.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigPreview.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { authConfigPreviewType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigSchema.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigSchema.ts index 5b94b9a23..82a5ae762 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigSchema.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authConfigSchema.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { authConfigSchemaType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authCredentials.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authCredentials.ts index 4fd11947c..8955fcb4f 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authCredentials.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authCredentials.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerAuthCredentialsType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authExport.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authExport.ts index 291dd0a07..84cf6dbd5 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authExport.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authExport.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerAuthExportType } from '../../../types'; import { v1ProviderAuthConfigPresenter } from './authConfig'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authImport.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authImport.ts index 498c3ff91..353f03bec 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authImport.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authImport.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerAuthImportType } from '../../../types'; import { v1ProviderAuthConfigPresenter } from './authConfig'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authImportSchema.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authImportSchema.ts index 075246117..90f2c841d 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authImportSchema.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authImportSchema.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { authImportSchemaType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/auth/authMethod.ts b/src/backend/apis/core/src/presenters/implementation/provider/auth/authMethod.ts index e273cefe5..539d0fe99 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/auth/authMethod.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/auth/authMethod.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerAuthMethodType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callback.ts b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callback.ts index 366cdc507..e6f320100 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callback.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callback.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import type { SubspaceCallbackDestination } from '@metorial/module-subspace'; import { Presenter } from '@metorial/presenter'; import { callbackType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackDestination.ts b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackDestination.ts index 80fe85f57..a8caab20c 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackDestination.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackDestination.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { callbackDestinationType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackEvent.ts b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackEvent.ts index b0c73bfeb..19a7056f5 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackEvent.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackEvent.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { callbackEventType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackInstance.ts b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackInstance.ts index e90b15527..f5ceb07bf 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackInstance.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackInstance.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { callbackInstanceType } from '../../../types'; import { v1ProviderAuthConfigPreviewPresenter } from '../auth'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackNotification.ts b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackNotification.ts index 857b32c3b..3a1d7f809 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackNotification.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/callbacks/callbackNotification.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { callbackNotificationType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/config/config.ts b/src/backend/apis/core/src/presenters/implementation/provider/config/config.ts index dbc5b89fa..418285ae6 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/config/config.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/config/config.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerConfigType } from '../../../types'; import { toolFilterPresenter } from '../../_shared/toolFilter'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/config/configPreview.ts b/src/backend/apis/core/src/presenters/implementation/provider/config/configPreview.ts index 099272f05..f7b5ccc23 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/config/configPreview.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/config/configPreview.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { configPreviewType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/config/configSchema.ts b/src/backend/apis/core/src/presenters/implementation/provider/config/configSchema.ts index d54dcd77e..7c0bcd11e 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/config/configSchema.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/config/configSchema.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { configSchemaType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/config/configVault.ts b/src/backend/apis/core/src/presenters/implementation/provider/config/configVault.ts index a42e2ddfa..31641b9b1 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/config/configVault.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/config/configVault.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerConfigVaultType } from '../../../types'; import { v1ProviderDeploymentPreviewPresenter } from './deploymentPreview'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/config/deployment.ts b/src/backend/apis/core/src/presenters/implementation/provider/config/deployment.ts index c01dcaadf..f90c9b13f 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/config/deployment.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/config/deployment.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerDeploymentType } from '../../../types'; import { toolFilterPresenter } from '../../_shared/toolFilter'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/config/deploymentPreview.ts b/src/backend/apis/core/src/presenters/implementation/provider/config/deploymentPreview.ts index ada8f7a34..98a5461bd 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/config/deploymentPreview.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/config/deploymentPreview.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { deploymentPreviewType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/config/providerInvocation.ts b/src/backend/apis/core/src/presenters/implementation/provider/config/providerInvocation.ts index 28e41c758..fd2bf7fbb 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/config/providerInvocation.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/config/providerInvocation.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerInvocationType, providerInvocationsType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/actorPreview.ts b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/actorPreview.ts index 252c91eb4..d755ba8c5 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/actorPreview.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/actorPreview.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { actorPreviewType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/bucket.ts b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/bucket.ts index 25919f651..9388434b7 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/bucket.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/bucket.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { bucketType } from '../../../types'; import { v1ScmRepoPresenter } from '../../scm'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/bucketEditorToken.ts b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/bucketEditorToken.ts index acb2b7e2b..670857c2e 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/bucketEditorToken.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/bucketEditorToken.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { bucketEditorTokenType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProvider.ts b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProvider.ts index 0e2ed82f2..9e48f97b6 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProvider.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProvider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { customProviderType } from '../../../types'; import { v1ScmRepoPresenter } from '../../scm'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderCommit.ts b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderCommit.ts index 7e44bf829..de8f3f150 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderCommit.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderCommit.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { customProviderCommitType } from '../../../types'; import { v1ScmPushPresenter } from '../../scm'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderDeployment.ts b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderDeployment.ts index 065526498..b5713117c 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderDeployment.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderDeployment.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { customProviderDeploymentLogsType, diff --git a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderEnvironment.ts b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderEnvironment.ts index 7277f0339..e464f2937 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderEnvironment.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderEnvironment.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { customProviderEnvironmentType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderVersion.ts b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderVersion.ts index d29d94f2b..3496bd0e5 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderVersion.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/customProvider/customProviderVersion.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { customProviderVersionType } from '../../../types'; import { v1ActorPreviewPresenter } from './actorPreview'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/identity/agent.ts b/src/backend/apis/core/src/presenters/implementation/provider/identity/agent.ts index 54be74204..d08973e80 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/identity/agent.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/identity/agent.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { agentType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/identity/agentInstance.ts b/src/backend/apis/core/src/presenters/implementation/provider/identity/agentInstance.ts index 8fcfde71a..fd69fbce1 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/identity/agentInstance.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/identity/agentInstance.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { agentInstanceType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/identity/identity.ts b/src/backend/apis/core/src/presenters/implementation/provider/identity/identity.ts index 709d709b1..05b6b1ca1 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/identity/identity.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/identity/identity.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { identityType } from '../../../types'; import { v1IdentityActorPresenter } from './identityActor'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityActor.ts b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityActor.ts index 5262f51ce..52bfde162 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityActor.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityActor.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { identityActorType } from '../../../types'; import { dashboardConsumerPresenter } from '../../consumer/consumer'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityCredential.ts b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityCredential.ts index 6673256f0..3e8b8134f 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityCredential.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityCredential.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { identityCredentialType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegation.ts b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegation.ts index 0ff4372b5..87f279854 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegation.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegation.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { identityDelegationType } from '../../../types'; import { v1IdentityActorPresenter } from './identityActor'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegationConfig.ts b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegationConfig.ts index c5be59d5b..468913c11 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegationConfig.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegationConfig.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { identityDelegationConfigType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegationRequest.ts b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegationRequest.ts index 1c5e6a2cb..7283c8b3d 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegationRequest.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/identity/identityDelegationRequest.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { identityDelegationRequestType } from '../../../types'; import { v1IdentityActorPresenter } from './identityActor'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integration.ts b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integration.ts index b6d660812..df8605258 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integration.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integration.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { SubspaceIntegrationPreview } from '@metorial/module-subspace'; import { Presenter } from '@metorial/presenter'; import { integrationType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstance.ts b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstance.ts index ad5f456c3..099fc89bf 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstance.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstance.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { integrationInstanceType } from '../../../types'; import { diff --git a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceGroup.ts b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceGroup.ts index b570bff65..14c751471 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceGroup.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceGroup.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { integrationInstanceGroupType } from '../../../types'; import { v1IntegrationInstanceGroupProviderPresenter } from './integrationInstanceGroupProvider'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceGroupProvider.ts b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceGroupProvider.ts index 0f2adf1e3..571217fed 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceGroupProvider.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceGroupProvider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { integrationInstanceGroupProviderType } from '../../../types'; import { toolFilterPresenter } from '../../_shared/toolFilter'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceProvider.ts b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceProvider.ts index 1a40cccd6..e4774c130 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceProvider.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationInstanceProvider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { integrationInstanceProviderType } from '../../../types'; import { toolFilterPresenter } from '../../_shared/toolFilter'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationProvider.ts b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationProvider.ts index 37aa582cd..3d85e1f5d 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationProvider.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationProvider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { SubspaceIntegrationInstanceProviderSnapshot } from '@metorial/module-subspace'; import { Presenter } from '@metorial/presenter'; import { integrationProviderType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationSetupSession.ts b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationSetupSession.ts index 62fbcee06..0fe27c9eb 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationSetupSession.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/integrations/integrationSetupSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { SubspaceIntegrationSetupSession } from '@metorial/module-subspace'; import { Presenter } from '@metorial/presenter'; import { integrationSetupSessionType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/integrations/providerTemplate.ts b/src/backend/apis/core/src/presenters/implementation/provider/integrations/providerTemplate.ts index 68d4113f7..dc92e6dc2 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/integrations/providerTemplate.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/integrations/providerTemplate.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { ProviderTemplate } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { providerTemplateType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/consumerOwnership.ts b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/consumerOwnership.ts index ef3fce309..ab2c15b92 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/consumerOwnership.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/consumerOwnership.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerIntegrationEndpointType, diff --git a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpEndpoint.ts b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpEndpoint.ts index 0ef467466..e24cdd8ee 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpEndpoint.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpEndpoint.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getConfig } from '@metorial/config'; import { Presenter } from '@metorial/presenter'; import { magicMcpEndpointType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpEndpointPreview.ts b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpEndpointPreview.ts index 36c0ef1da..a79c6cac9 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpEndpointPreview.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpEndpointPreview.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { MagicMcpEndpoint } from '@metorial/db'; export let v1MagicMcpEndpointPreview = Object.assign( diff --git a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpGroup.ts b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpGroup.ts index 83c4bcd27..e2a85bccf 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpGroup.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpGroup.ts @@ -1,5 +1,5 @@ import { Presenter } from '@metorial/presenter'; -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { magicMcpGroupType } from '../../../types'; export let v1MagicMcpGroupPresenter = Presenter.create(magicMcpGroupType) diff --git a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServer.ts b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServer.ts index 5ed5f3c1c..67e3d04c3 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServer.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServer.ts @@ -1,5 +1,5 @@ -import { shadowId } from '@lowerdeck/shadow-id'; -import { v } from '@lowerdeck/validation'; +import { shadowId } from '@mtsrc/shadow-id'; +import { v } from '@mtsrc/validation'; import { getConfig } from '@metorial/config'; import { Presenter } from '@metorial/presenter'; import { magicMcpServerType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServerPreview.ts b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServerPreview.ts index 86039c419..6c796a0b0 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServerPreview.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServerPreview.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { MagicMcpServer } from '@metorial/db'; export let v1MagicMcpServerPreview = Object.assign( diff --git a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServerProvider.ts b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServerProvider.ts index fcf892f5f..8d062ca51 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServerProvider.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpServerProvider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { magicMcpServerProviderType } from '../../../types'; import { toolFilterPresenter } from '../../_shared/toolFilter'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpSession.ts b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpSession.ts index 51939eb21..49181446e 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpSession.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { magicMcpSessionType } from '../../../types'; import { v1ConsumerIntegrationSessionPresenter } from './consumerOwnership'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpToken.ts b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpToken.ts index 50b744884..caca6944b 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpToken.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/magicMcp/magicMcpToken.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { magicMcpTokenType } from '../../../types'; import { v1MagicMcpEndpointPreview } from './magicMcpEndpointPreview'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/category.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/category.ts index 8397c76bf..588d813c2 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/category.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/category.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerListingCategoryType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/collection.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/collection.ts index fd7f24742..1553d955b 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/collection.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/collection.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerListingCollectionType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/group.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/group.ts index 9cde0c8a7..a9f1ddd82 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/group.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/group.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerListingGroupType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/provider.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/provider.ts index 4ca28423a..d30a1fc19 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/provider.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/provider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerType } from '../../../types'; import { v1ProviderTypePresenter } from './providerType'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerListing.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerListing.ts index 161c1eb8a..d6ef49df6 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerListing.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerListing.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { providerListingType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerPreview.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerPreview.ts index ddecb84a0..1b9f027b1 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerPreview.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerPreview.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { SubspaceProviderLight } from '@metorial/module-subspace'; export let v1ProviderPreview = Object.assign( diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTool.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTool.ts index f873596de..ea041a456 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTool.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTool.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerToolType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTools.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTools.ts index 8c2af9d0f..55163cb1d 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTools.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTools.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerToolsType } from '../../../types'; import { v1ProviderToolPresenter } from './providerTool'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTrigger.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTrigger.ts index 2ea464e6b..b5fca96d3 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTrigger.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerTrigger.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerTriggerType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerType.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerType.ts index 6bdc156ae..bd491b720 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerType.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerType.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerTypeType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerVersion.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerVersion.ts index b2017385c..8c69eba0b 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/providerVersion.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/providerVersion.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerVersionType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/publisher.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/publisher.ts index a8e78e4ed..c065fa877 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/publisher.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/publisher.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { publisherType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/provider/specification.ts b/src/backend/apis/core/src/presenters/implementation/provider/provider/specification.ts index cf3780c03..2e99d31fc 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/provider/specification.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/provider/specification.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerSpecificationType } from '../../../types'; import { v1ProviderAuthMethodPresenter } from '../auth/authMethod'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/providerRun.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/providerRun.ts index 7667c5ef2..36f77ab86 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/providerRun.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/providerRun.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerRunType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/providerRunLogs.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/providerRunLogs.ts index 54ce18357..95cb586bd 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/providerRunLogs.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/providerRunLogs.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerRunLogsType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/session.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/session.ts index abfdee557..7ddbad401 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/session.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/session.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getConfig } from '@metorial/config'; import { Presenter } from '@metorial/presenter'; import { providerSessionType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionConnection.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionConnection.ts index 371bc1794..f926d8b1c 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionConnection.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionConnection.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionConnectionType } from '../../../types'; import { v1SessionParticipantPresenter } from './sessionParticipant'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionError.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionError.ts index 94f872349..eccd0e26c 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionError.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionError.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionErrorType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionErrorGroup.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionErrorGroup.ts index 514ec003b..010ceac96 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionErrorGroup.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionErrorGroup.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionErrorGroupType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionEvent.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionEvent.ts index 80815f033..d1b1567bd 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionEvent.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionEvent.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionEventType } from '../../../types'; import { v1ProviderRunPresenter } from './providerRun'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionMessage.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionMessage.ts index 24b61e57d..16475c599 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionMessage.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionMessage.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionMessageType } from '../../../types'; import { v1SessionErrorPresenter } from './sessionError'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionParticipant.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionParticipant.ts index 97ada56a7..d468c9ff7 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionParticipant.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionParticipant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionParticipantType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionProvider.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionProvider.ts index 54bd9e53b..9b5d5c0e8 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionProvider.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionProvider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionProviderType } from '../../../types'; import { toolFilterPresenter } from '../../_shared/toolFilter'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionTemplate.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionTemplate.ts index 6856c1a26..7957467ac 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionTemplate.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionTemplate.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionTemplateType } from '../../../types'; import { v1SessionTemplateProviderPresenter } from './sessionTemplateProvider'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionTemplateProvider.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionTemplateProvider.ts index acf21ad78..2a955dbcb 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionTemplateProvider.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionTemplateProvider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionTemplateProviderType } from '../../../types'; import { toolFilterPresenter } from '../../_shared/toolFilter'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionWarning.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionWarning.ts index c467a8c0c..1b11776ad 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionWarning.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/sessionWarning.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { sessionWarningType } from '../../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/setupSession.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/setupSession.ts index 2ecf4fdb8..dff3df887 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/setupSession.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/setupSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { providerSetupSessionType } from '../../../types'; import { v1ProviderAuthConfigPresenter } from '../auth/authConfig'; diff --git a/src/backend/apis/core/src/presenters/implementation/provider/sessions/toolCall.ts b/src/backend/apis/core/src/presenters/implementation/provider/sessions/toolCall.ts index 189d85a99..5a0026fa5 100644 --- a/src/backend/apis/core/src/presenters/implementation/provider/sessions/toolCall.ts +++ b/src/backend/apis/core/src/presenters/implementation/provider/sessions/toolCall.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { toolCallType } from '../../../types'; import { v1ProviderToolPresenter } from '../provider'; diff --git a/src/backend/apis/core/src/presenters/implementation/scm/accounts.ts b/src/backend/apis/core/src/presenters/implementation/scm/accounts.ts index 0ef9bd226..5c064ba2a 100644 --- a/src/backend/apis/core/src/presenters/implementation/scm/accounts.ts +++ b/src/backend/apis/core/src/presenters/implementation/scm/accounts.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { scmAccountPreviewType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/scm/connection.ts b/src/backend/apis/core/src/presenters/implementation/scm/connection.ts index a812b883a..6eecead00 100644 --- a/src/backend/apis/core/src/presenters/implementation/scm/connection.ts +++ b/src/backend/apis/core/src/presenters/implementation/scm/connection.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { scmConnectionSetupType, scmConnectionType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/scm/repos.ts b/src/backend/apis/core/src/presenters/implementation/scm/repos.ts index f9758b83b..68eb2c2bf 100644 --- a/src/backend/apis/core/src/presenters/implementation/scm/repos.ts +++ b/src/backend/apis/core/src/presenters/implementation/scm/repos.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { scmRepoPreviewType, scmRepoType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/scm/scmProvider.ts b/src/backend/apis/core/src/presenters/implementation/scm/scmProvider.ts index b1db2a225..e52fb0fcd 100644 --- a/src/backend/apis/core/src/presenters/implementation/scm/scmProvider.ts +++ b/src/backend/apis/core/src/presenters/implementation/scm/scmProvider.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { scmProviderType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/scm/scmProviderSetup.ts b/src/backend/apis/core/src/presenters/implementation/scm/scmProviderSetup.ts index 041aeb09e..ad6de958b 100644 --- a/src/backend/apis/core/src/presenters/implementation/scm/scmProviderSetup.ts +++ b/src/backend/apis/core/src/presenters/implementation/scm/scmProviderSetup.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { scmProviderSetupType } from '../../types'; import { v1ScmProviderPresenter } from './scmProvider'; diff --git a/src/backend/apis/core/src/presenters/implementation/scm/scmPush.ts b/src/backend/apis/core/src/presenters/implementation/scm/scmPush.ts index 449d954ab..ce90b449a 100644 --- a/src/backend/apis/core/src/presenters/implementation/scm/scmPush.ts +++ b/src/backend/apis/core/src/presenters/implementation/scm/scmPush.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { scmPushType } from '../../types'; import { v1ScmRepoPresenter } from './repos'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skill.ts b/src/backend/apis/core/src/presenters/implementation/skills/skill.ts index bf261ee0a..90c92fc34 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skill.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skill.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { SubspaceSkill } from '@metorial/module-subspace'; import { Presenter } from '@metorial/presenter'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillAgent.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillAgent.ts index 6ae1ad632..35100a71b 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillAgent.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillAgent.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillAgentType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillConfiguration.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillConfiguration.ts index e6efbb791..7a0082c81 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillConfiguration.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillConfiguration.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillConfigurationType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillExport.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillExport.ts index 33582d9a6..bba153cf6 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillExport.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillExport.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillExportType } from '../../types'; import { v1FilePresenter } from '../files/file'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillGroup.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillGroup.ts index 05ed1a910..b72e41dd4 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillGroup.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillGroup.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillGroupType } from '../../types'; import { v1SkillPreviewPresenter } from './skill'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillGroupItem.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillGroupItem.ts index e7f9f299d..c98e67775 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillGroupItem.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillGroupItem.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillGroupItemType } from '../../types'; import { v1SkillPreviewPresenter } from './skill'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillItem.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillItem.ts index d4784d190..ac88e682d 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillItem.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillItem.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillItemType } from '../../types'; import { v1IntegrationPreviewPresenter, v1ProviderPreview } from '../provider'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplace.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplace.ts index df3f178ca..9c646e9bf 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplace.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplace.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { skillMarketplaceType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplacePlugin.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplacePlugin.ts index b7a1aa373..d41832e6c 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplacePlugin.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplacePlugin.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillMarketplacePluginType } from '../../types'; import { v1SkillPluginPresenter } from './skillPlugin'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplaceRepository.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplaceRepository.ts index 01cb37f16..17e4b0697 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplaceRepository.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillMarketplaceRepository.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillMarketplaceRepositoryType } from '../../types'; import { presentSkillRepository, skillRepositorySchema } from './skillRepository'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillParticipant.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillParticipant.ts index ecfb334f6..0ccf11894 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillParticipant.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillParticipant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillParticipantType } from '../../types'; import { diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillPlugin.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillPlugin.ts index c672f7acb..d4509ed21 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillPlugin.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillPlugin.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getImageUrl } from '@metorial/db'; import { Presenter } from '@metorial/presenter'; import { skillPluginType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillPluginRepository.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillPluginRepository.ts index 982f2be17..a4ce3bc4f 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillPluginRepository.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillPluginRepository.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillPluginRepositoryType } from '../../types'; import { presentSkillRepository, skillRepositorySchema } from './skillRepository'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillPluginSkill.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillPluginSkill.ts index 35fcc65be..fda79fe0c 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillPluginSkill.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillPluginSkill.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillPluginSkillType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillRepository.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillRepository.ts index 8cfe6f5dc..8bd742a01 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillRepository.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillRepository.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { EnrichedCargoSkillMarketplaceRepository } from '@metorial/module-file'; export let skillRepositorySchema = v.object({ diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillSync.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillSync.ts index b5b2cb787..6131e4bc2 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillSync.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillSync.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillSyncType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillTemplate.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillTemplate.ts index 815e18a0a..a0b2807bb 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillTemplate.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillTemplate.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillTemplateType } from '../../types'; import { v1SkillTemplateItemPresenter } from './skillTemplateItem'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillTemplateItem.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillTemplateItem.ts index 16e9ec88e..428a8d38f 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillTemplateItem.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillTemplateItem.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillTemplateItemType } from '../../types'; import { v1IntegrationPreviewPresenter, v1ProviderPreview } from '../provider'; diff --git a/src/backend/apis/core/src/presenters/implementation/skills/skillVersion.ts b/src/backend/apis/core/src/presenters/implementation/skills/skillVersion.ts index 812cbf61f..1fa5000f9 100644 --- a/src/backend/apis/core/src/presenters/implementation/skills/skillVersion.ts +++ b/src/backend/apis/core/src/presenters/implementation/skills/skillVersion.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { skillVersionSnapshotType, skillVersionType } from '../../types'; diff --git a/src/backend/apis/core/src/presenters/implementation/testHelpers/consumerOAuthTestAuthorization.ts b/src/backend/apis/core/src/presenters/implementation/testHelpers/consumerOAuthTestAuthorization.ts index 5db217448..eae917097 100644 --- a/src/backend/apis/core/src/presenters/implementation/testHelpers/consumerOAuthTestAuthorization.ts +++ b/src/backend/apis/core/src/presenters/implementation/testHelpers/consumerOAuthTestAuthorization.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { Presenter } from '@metorial/presenter'; import { consumerOAuthTestAuthorizationType } from '../../types'; diff --git a/src/backend/apis/custom-portal/package.json b/src/backend/apis/custom-portal/package.json index fd4a159e9..eedf52b70 100644 --- a/src/backend/apis/custom-portal/package.json +++ b/src/backend/apis/custom-portal/package.json @@ -9,17 +9,17 @@ "lint": "prettier src/**/*.ts test/**/*.ts --check" }, "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/validation": "^1.0.10", "@metorial/config": "1.0.0", "@metorial/db": "1.0.0", "@metorial/module-consumer": "1.0.0", - "@metorial/rpc": "1.0.0" + "@metorial/rpc": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { - "@lowerdeck/serialize": "^1.0.4", "@metorial/tsconfig": "^1.0.0", "typescript": "5.8.2", - "vitest": "^3.1.2" + "vitest": "^3.1.2", + "@mtsrc/serialize": "1.0.0" } } diff --git a/src/backend/apis/custom-portal/src/controllers/auth.ts b/src/backend/apis/custom-portal/src/controllers/auth.ts index 03e35cf6f..679664574 100644 --- a/src/backend/apis/custom-portal/src/controllers/auth.ts +++ b/src/backend/apis/custom-portal/src/controllers/auth.ts @@ -1,5 +1,5 @@ -import { preconditionFailedError, ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { preconditionFailedError, ServiceError, unauthorizedError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { consumerAuthService } from '@metorial/module-consumer'; import { portalFromIdApp } from '../group'; import { diff --git a/src/backend/apis/custom-portal/src/controllers/boot.ts b/src/backend/apis/custom-portal/src/controllers/boot.ts index ff31b207f..02410d95c 100644 --- a/src/backend/apis/custom-portal/src/controllers/boot.ts +++ b/src/backend/apis/custom-portal/src/controllers/boot.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { getConfig } from '@metorial/config'; import { consumerAuthService } from '@metorial/module-consumer'; import { projectBrandService } from '@metorial/module-organization'; diff --git a/src/backend/apis/custom-portal/src/controllers/pluginOAuthSelection.ts b/src/backend/apis/custom-portal/src/controllers/pluginOAuthSelection.ts index 8cb9a9d46..c191908c8 100644 --- a/src/backend/apis/custom-portal/src/controllers/pluginOAuthSelection.ts +++ b/src/backend/apis/custom-portal/src/controllers/pluginOAuthSelection.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { getConfig } from '@metorial/config'; import { db } from '@metorial/db'; import { portalService } from '@metorial/module-consumer'; diff --git a/src/backend/apis/custom-portal/src/lib/portal.ts b/src/backend/apis/custom-portal/src/lib/portal.ts index 6b0e67dfb..402748213 100644 --- a/src/backend/apis/custom-portal/src/lib/portal.ts +++ b/src/backend/apis/custom-portal/src/lib/portal.ts @@ -4,7 +4,7 @@ import { preconditionFailedError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; +} from '@mtsrc/error'; import { consumerAuthService, isPathBasedPortalRoutingTemplate, diff --git a/src/backend/apis/files/package.json b/src/backend/apis/files/package.json index ea272b867..2d258f15b 100644 --- a/src/backend/apis/files/package.json +++ b/src/backend/apis/files/package.json @@ -6,17 +6,17 @@ "main": "src/index.ts", "scripts": {}, "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/forwarded-for": "^1.0.4", "@metorial/id": "^1.0.0", "@metorial/auth": "^1.0.0", "@metorial/config": "^1.0.0", - "@lowerdeck/hono": "^1.0.10", "@metorial/module-access": "^1.0.0", "@metorial/module-file": "^1.0.0", - "@metorial/module-organization": "^1.0.0" + "@metorial/module-organization": "^1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/hono": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/apis/files/src/index.ts b/src/backend/apis/files/src/index.ts index f7ae294ec..b5f9c5d27 100644 --- a/src/backend/apis/files/src/index.ts +++ b/src/backend/apis/files/src/index.ts @@ -1,7 +1,7 @@ -import { badRequestError, forbiddenError, ServiceError } from '@lowerdeck/error'; -import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context'; -import { extractIp } from '@lowerdeck/forwarded-for'; -import { Context, cors, createHono } from '@lowerdeck/hono'; +import { badRequestError, forbiddenError, ServiceError } from '@mtsrc/error'; +import { createExecutionContext, provideExecutionContext } from '@mtsrc/execution-context'; +import { extractIp } from '@mtsrc/forwarded-for'; +import { Context, cors, createHono } from '@mtsrc/hono'; import { authenticate } from '@metorial/auth'; import { generatePlainId } from '@metorial/id'; import { diff --git a/src/backend/apis/files/src/uploadAccess.ts b/src/backend/apis/files/src/uploadAccess.ts index feb6acd51..20a2522a8 100644 --- a/src/backend/apis/files/src/uploadAccess.ts +++ b/src/backend/apis/files/src/uploadAccess.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { accessService, type AuthInfo } from '@metorial/module-access'; import { organizationService } from '@metorial/module-organization'; import { diff --git a/src/backend/apis/oauth/package.json b/src/backend/apis/oauth/package.json index ab4502328..c35b8f9b3 100644 --- a/src/backend/apis/oauth/package.json +++ b/src/backend/apis/oauth/package.json @@ -6,12 +6,12 @@ "main": "src/index.ts", "scripts": {}, "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/validation": "^1.0.10", "@metorial/config": "^1.0.0", "@metorial/context": "^1.0.0", - "@metorial/module-machine-access": "^1.0.0" + "@metorial/module-machine-access": "^1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/apis/oauth/src/lib/hono.ts b/src/backend/apis/oauth/src/lib/hono.ts index 984e2b607..9491e05d4 100644 --- a/src/backend/apis/oauth/src/lib/hono.ts +++ b/src/backend/apis/oauth/src/lib/hono.ts @@ -1,4 +1,4 @@ -import { internalServerError, isServiceError, notFoundError } from '@lowerdeck/error'; +import { internalServerError, isServiceError, notFoundError } from '@mtsrc/error'; import { Env, Hono } from 'hono'; import { OAuthError } from './errors'; diff --git a/src/backend/apis/oauth/src/lib/request.ts b/src/backend/apis/oauth/src/lib/request.ts index 01fee2ce3..e8ce97faa 100644 --- a/src/backend/apis/oauth/src/lib/request.ts +++ b/src/backend/apis/oauth/src/lib/request.ts @@ -1,4 +1,4 @@ -import { isServiceError } from '@lowerdeck/error'; +import { isServiceError } from '@mtsrc/error'; import { Context } from 'hono'; import { OAuthError } from './errors'; diff --git a/src/backend/apis/oauth/src/skeleton.ts b/src/backend/apis/oauth/src/skeleton.ts index 75421f52f..f72e6c212 100644 --- a/src/backend/apis/oauth/src/skeleton.ts +++ b/src/backend/apis/oauth/src/skeleton.ts @@ -1,4 +1,4 @@ -import { cors, useRequestContext } from '@lowerdeck/hono'; +import { cors, useRequestContext } from '@mtsrc/hono'; import { Context } from 'hono'; import { OAuthError } from './lib/errors'; import { createHono } from './lib/hono'; diff --git a/src/backend/apps/api/package.json b/src/backend/apps/api/package.json index 17bc2331a..b01390732 100644 --- a/src/backend/apps/api/package.json +++ b/src/backend/apps/api/package.json @@ -15,7 +15,6 @@ "@metorial/api-core": "1.0.0", "@metorial/api-custom-portal": "1.0.0", "@metorial/api-files": "1.0.0", - "@lowerdeck/api-mux": "1.0.4", "@metorial/auth": "1.0.0", "@metorial/logging": "1.0.0", "@metorial/module-access": "1.0.0", @@ -27,7 +26,8 @@ "@metorial/module-usage": "1.0.0", "@metorial/module-user": "1.0.0", "@metorial/queue": "1.0.0", - "@vercel/ncc": "^0.38.4" + "@vercel/ncc": "^0.38.4", + "@mtsrc/api-mux": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/apps/api/src/components.ts b/src/backend/apps/api/src/components.ts index bc0dea33e..cf99509b6 100644 --- a/src/backend/apps/api/src/components.ts +++ b/src/backend/apps/api/src/components.ts @@ -1,6 +1,6 @@ process.env.TZ = 'UTC'; -import { apiMux } from '@lowerdeck/api-mux'; +import { apiMux } from '@mtsrc/api-mux'; import { authApi } from '@metorial/api-auth'; import { startMcpServer } from '@metorial/api-connection'; import { apiServer } from '@metorial/api-core'; diff --git a/src/backend/auth/package.json b/src/backend/auth/package.json index 53d225c38..b44ae49ee 100644 --- a/src/backend/auth/package.json +++ b/src/backend/auth/package.json @@ -13,11 +13,11 @@ "@metorial/bearer": "1.0.0", "@metorial/config": "1.0.0", "@metorial/context": "1.0.0", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/forwarded-for": "1.0.4", "@metorial/module-access": "1.0.0", - "@metorial/module-flags": "1.0.0" + "@metorial/module-flags": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/auth/src/index.ts b/src/backend/auth/src/index.ts index 44424e1a3..d1bcbdc9d 100644 --- a/src/backend/auth/src/index.ts +++ b/src/backend/auth/src/index.ts @@ -1,6 +1,6 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { updateExecutionContext } from '@lowerdeck/execution-context'; -import { parseForwardedFor } from '@lowerdeck/forwarded-for'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { updateExecutionContext } from '@mtsrc/execution-context'; +import { parseForwardedFor } from '@mtsrc/forwarded-for'; import { extractToken } from '@metorial/bearer'; import { getConfig } from '@metorial/config'; import { Context } from '@metorial/context'; diff --git a/src/backend/config/package.json b/src/backend/config/package.json index f15536974..ec5827bd9 100644 --- a/src/backend/config/package.json +++ b/src/backend/config/package.json @@ -9,8 +9,8 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/validation": "^1.0.10" + "@mtsrc/env": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/config/src/env.ts b/src/backend/config/src/env.ts index 9a36b1407..b7138185e 100644 --- a/src/backend/config/src/env.ts +++ b/src/backend/config/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/db/package.json b/src/backend/db/package.json index 805624f89..3e47e7832 100644 --- a/src/backend/db/package.json +++ b/src/backend/db/package.json @@ -11,8 +11,6 @@ "prisma:generate": "./prisma-generate.sh" }, "dependencies": { - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/execution-context": "^1.1.1", "@metorial/id": "^1.0.0", "@modelcontextprotocol/sdk": "^1.11.4", "@prisma/adapter-pg": "6.19.0", @@ -23,7 +21,9 @@ "p-queue": "^8.1.0", "@prisma/extension-read-replicas": "^0.5.0", "prisma": "^7.4.1", - "prisma-json-types-generator": "^4.1.1" + "prisma-json-types-generator": "^4.1.1", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/execution-context": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/db/src/db/client.ts b/src/backend/db/src/db/client.ts index 9977aeffa..ef80f3016 100644 --- a/src/backend/db/src/db/client.ts +++ b/src/backend/db/src/db/client.ts @@ -1,4 +1,4 @@ -import { Snowflake } from '@lowerdeck/snowflake'; +import { Snowflake } from '@mtsrc/snowflake'; import type { ClientCapabilities, JSONRPCMessage, diff --git a/src/backend/db/src/db/transaction.ts b/src/backend/db/src/db/transaction.ts index a76ae96e0..f36209afe 100644 --- a/src/backend/db/src/db/transaction.ts +++ b/src/backend/db/src/db/transaction.ts @@ -1,7 +1,7 @@ import { provideExecutionContext, withExecutionContextOptional -} from '@lowerdeck/execution-context'; +} from '@mtsrc/execution-context'; import { AsyncLocalStorage } from 'async_hooks'; import PQueue from 'p-queue'; import { db } from './client'; diff --git a/src/backend/internal-clients/package.json b/src/backend/internal-clients/package.json index 6877c4484..b672e5023 100644 --- a/src/backend/internal-clients/package.json +++ b/src/backend/internal-clients/package.json @@ -9,14 +9,14 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial/db": "1.0.0", "@metorial-platform-systems/cargo-client": "1.0.0", "@metorial-platform-systems/subspace-client": "1.0.0", - "@metorial-platform-systems/synthesis-client": "1.0.0" + "@metorial-platform-systems/synthesis-client": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/internal-clients/src/clients.ts b/src/backend/internal-clients/src/clients.ts index 17934b26e..f088aad10 100644 --- a/src/backend/internal-clients/src/clients.ts +++ b/src/backend/internal-clients/src/clients.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { delay } from '@mtsrc/delay'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { createCargoClient } from '@metorial-platform-systems/cargo-client'; import { createSubspaceControllerClient } from '@metorial-platform-systems/subspace-client'; import { createSynthesisClient } from '@metorial-platform-systems/synthesis-client'; diff --git a/src/backend/internal-clients/src/env.ts b/src/backend/internal-clients/src/env.ts index 739626a51..f33f68906 100644 --- a/src/backend/internal-clients/src/env.ts +++ b/src/backend/internal-clients/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/modules/access/package.json b/src/backend/modules/access/package.json index a7eedecee..f10498775 100644 --- a/src/backend/modules/access/package.json +++ b/src/backend/modules/access/package.json @@ -12,15 +12,15 @@ "@metorial/api-keys": "1.0.0", "@metorial/consumer-auth": "1.0.0", "@metorial/config": "1.0.0", - "@lowerdeck/hash": "1.0.4", "@metorial/queue": "1.0.0", - "@lowerdeck/error": "^1.2.3", "@metorial/module-organization": "1.0.0", - "@lowerdeck/service": "^1.0.7", "@metorial/context": "1.0.0", "@metorial/db": "1.0.0", "@metorial/module-machine-access": "1.0.0", - "@metorial/module-user": "1.0.0" + "@metorial/module-user": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/service": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/access/src/definitions/scopeMetadata.ts b/src/backend/modules/access/src/definitions/scopeMetadata.ts index 6713c8b5b..71bb32021 100644 --- a/src/backend/modules/access/src/definitions/scopeMetadata.ts +++ b/src/backend/modules/access/src/definitions/scopeMetadata.ts @@ -1,4 +1,4 @@ -import { Cases } from '@lowerdeck/case'; +import { Cases } from '@mtsrc/case'; import { Scope } from './scopeValues'; export type ScopeDefinition = { diff --git a/src/backend/modules/access/src/env.ts b/src/backend/modules/access/src/env.ts index b50c97ae4..d1357c270 100644 --- a/src/backend/modules/access/src/env.ts +++ b/src/backend/modules/access/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/modules/access/src/services/access.ts b/src/backend/modules/access/src/services/access.ts index c21b85aa6..a7956dca1 100644 --- a/src/backend/modules/access/src/services/access.ts +++ b/src/backend/modules/access/src/services/access.ts @@ -1,5 +1,5 @@ -import { forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, Organization, OrganizationMember, Project } from '@metorial/db'; import { effectiveAccessService, diff --git a/src/backend/modules/access/src/services/accessTag.ts b/src/backend/modules/access/src/services/accessTag.ts index 21fd8cb32..5470085d2 100644 --- a/src/backend/modules/access/src/services/accessTag.ts +++ b/src/backend/modules/access/src/services/accessTag.ts @@ -1,5 +1,5 @@ -import { forbiddenError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, Instance } from '@metorial/db'; import { Scope } from '../definitions'; diff --git a/src/backend/modules/access/src/services/authentication.ts b/src/backend/modules/access/src/services/authentication.ts index 36d0865d3..624bfdd7e 100644 --- a/src/backend/modules/access/src/services/authentication.ts +++ b/src/backend/modules/access/src/services/authentication.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { UnifiedApiKey } from '@metorial/api-keys'; import { authenticateWithConsumerToken, diff --git a/src/backend/modules/access/src/services/fineGrainedAuth.ts b/src/backend/modules/access/src/services/fineGrainedAuth.ts index f5a25fd3d..ed2066ebe 100644 --- a/src/backend/modules/access/src/services/fineGrainedAuth.ts +++ b/src/backend/modules/access/src/services/fineGrainedAuth.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { UnifiedApiKey } from '@metorial/api-keys'; import { Context } from '@metorial/context'; import { db } from '@metorial/db'; diff --git a/src/backend/modules/access/src/services/fineGrainedKey.ts b/src/backend/modules/access/src/services/fineGrainedKey.ts index 74c9b75b8..cf307df6a 100644 --- a/src/backend/modules/access/src/services/fineGrainedKey.ts +++ b/src/backend/modules/access/src/services/fineGrainedKey.ts @@ -1,5 +1,5 @@ -import { forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { UnifiedApiKey } from '@metorial/api-keys'; import { getConfig } from '@metorial/config'; import { Context } from '@metorial/context'; diff --git a/src/backend/modules/access/src/services/sessionClientSecretReference.ts b/src/backend/modules/access/src/services/sessionClientSecretReference.ts index ed1f63249..8b06fe488 100644 --- a/src/backend/modules/access/src/services/sessionClientSecretReference.ts +++ b/src/backend/modules/access/src/services/sessionClientSecretReference.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { db, ID, Instance, withTransaction } from '@metorial/db'; import { accessTagService } from './accessTag'; import { fineGrainedKeyService } from './fineGrainedKey'; diff --git a/src/backend/modules/access/test/access.test.ts b/src/backend/modules/access/test/access.test.ts index f0dfad6cb..5ab3c384a 100644 --- a/src/backend/modules/access/test/access.test.ts +++ b/src/backend/modules/access/test/access.test.ts @@ -1,4 +1,4 @@ -import { ServiceError, notFoundError } from '@lowerdeck/error'; +import { ServiceError, notFoundError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { accessService } from '../src/services/access'; import { AuthInfo } from '../src/services/authentication'; diff --git a/src/backend/modules/access/test/authentication.test.ts b/src/backend/modules/access/test/authentication.test.ts index 2cc491764..a98618a8c 100644 --- a/src/backend/modules/access/test/authentication.test.ts +++ b/src/backend/modules/access/test/authentication.test.ts @@ -1,4 +1,4 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; import { Context } from '@metorial/context'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { @@ -59,7 +59,7 @@ vi.mock('@metorial/config', () => ({ }) })); -vi.mock('@lowerdeck/tokens', () => ({ +vi.mock('@mtsrc/tokens', () => ({ Tokens: vi.fn(() => mocks.consumerTokens) })); diff --git a/src/backend/modules/access/test/fineGrainedAuth.test.ts b/src/backend/modules/access/test/fineGrainedAuth.test.ts index bdc39dedb..02539c66e 100644 --- a/src/backend/modules/access/test/fineGrainedAuth.test.ts +++ b/src/backend/modules/access/test/fineGrainedAuth.test.ts @@ -1,6 +1,6 @@ import { Context } from '@metorial/context'; import { db } from '@metorial/db'; -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { UnifiedApiKey } from '@metorial/api-keys'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { fineGrainedAuthService } from '../src/services/fineGrainedAuth'; diff --git a/src/backend/modules/assistant/package.json b/src/backend/modules/assistant/package.json index 4641434b1..d76d258fc 100644 --- a/src/backend/modules/assistant/package.json +++ b/src/backend/modules/assistant/package.json @@ -13,9 +13,6 @@ "@ai-sdk/google": "^3.0.68", "@ai-sdk/openai": "^3.0.62", "@ai-sdk/xai": "^3.0.88", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "1.0.4", - "@lowerdeck/service": "^1.0.7", "@metorial-services/scout-client": "^1.0.0", "@metorial/api-keys": "1.0.0", "@metorial/config": "1.0.0", @@ -32,7 +29,10 @@ "@openharness/core": "^0.6.2", "ai": "^6.0.175", "just-bash": "^2.14.4", - "zod": "^4.4.3" + "zod": "^4.4.3", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/service": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/assistant/src/env.ts b/src/backend/modules/assistant/src/env.ts index 247b13b50..e9b549c1d 100644 --- a/src/backend/modules/assistant/src/env.ts +++ b/src/backend/modules/assistant/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/modules/assistant/src/services/assistant.ts b/src/backend/modules/assistant/src/services/assistant.ts index 4e4ff5d73..18ffd7f8e 100644 --- a/src/backend/modules/assistant/src/services/assistant.ts +++ b/src/backend/modules/assistant/src/services/assistant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type Instance } from '@metorial/db'; import { ensureSynthesisScope, synthesis } from '../synthesis'; diff --git a/src/backend/modules/assistant/src/services/conversation.ts b/src/backend/modules/assistant/src/services/conversation.ts index 2aa6eb202..edfbdaa03 100644 --- a/src/backend/modules/assistant/src/services/conversation.ts +++ b/src/backend/modules/assistant/src/services/conversation.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type Instance, type Organization } from '@metorial/db'; import { enrichSynthesisActors, diff --git a/src/backend/modules/assistant/src/services/message.ts b/src/backend/modules/assistant/src/services/message.ts index eb5debf6c..728080a55 100644 --- a/src/backend/modules/assistant/src/services/message.ts +++ b/src/backend/modules/assistant/src/services/message.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type Instance, type Organization diff --git a/src/backend/modules/assistant/src/services/request.ts b/src/backend/modules/assistant/src/services/request.ts index 9526841ed..3d4cab0bf 100644 --- a/src/backend/modules/assistant/src/services/request.ts +++ b/src/backend/modules/assistant/src/services/request.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { createAssistantRequestDeltasConnection } from '@metorial-platform-systems/synthesis-client'; import { type Instance, type Organization } from '@metorial/db'; import { diff --git a/src/backend/modules/assistant/src/synthesis.ts b/src/backend/modules/assistant/src/synthesis.ts index 1414f6a14..e5d783c59 100644 --- a/src/backend/modules/assistant/src/synthesis.ts +++ b/src/backend/modules/assistant/src/synthesis.ts @@ -1,4 +1,4 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { notFoundError, ServiceError } from '@mtsrc/error'; import { ensureInternalActor, ensureInternalScope, diff --git a/src/backend/modules/community/package.json b/src/backend/modules/community/package.json index f58bc1d9e..d59e26ef4 100644 --- a/src/backend/modules/community/package.json +++ b/src/backend/modules/community/package.json @@ -9,17 +9,17 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/error": "^1.2.3", "@metorial/fabric": "^1.0.0", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", "@metorial/queue": "^1.0.0", - "@lowerdeck/service": "^1.0.7", "@types/fs-extra": "^11.0.4", - "fs-extra": "^11.3.0" + "fs-extra": "^11.3.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/community/src/services/profile.ts b/src/backend/modules/community/src/services/profile.ts index 9f1c3e24f..df9eee6c6 100644 --- a/src/backend/modules/community/src/services/profile.ts +++ b/src/backend/modules/community/src/services/profile.ts @@ -1,5 +1,5 @@ -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import { db, ID, Organization, OrganizationActor, Profile, User } from '@metorial/db'; let ensureProfileSlug = createSlugGenerator( diff --git a/src/backend/modules/community/test/index.test.ts b/src/backend/modules/community/test/index.test.ts index 385bb082e..f3a982280 100644 --- a/src/backend/modules/community/test/index.test.ts +++ b/src/backend/modules/community/test/index.test.ts @@ -29,13 +29,13 @@ vi.mock('@metorial/db', () => ({ } })); -vi.mock('@lowerdeck/slugify', () => ({ +vi.mock('@mtsrc/slugify', () => ({ createSlugGenerator: vi.fn(() => vi.fn(async ({ input }: { input: string }) => `${input}-slug`) ) })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name: string, factory: () => any) => ({ build: vi.fn(() => factory()) diff --git a/src/backend/modules/community/test/profile.test.ts b/src/backend/modules/community/test/profile.test.ts index 5a8a93950..e39976de9 100644 --- a/src/backend/modules/community/test/profile.test.ts +++ b/src/backend/modules/community/test/profile.test.ts @@ -23,13 +23,13 @@ vi.mock('@metorial/db', () => ({ } })); -vi.mock('@lowerdeck/slugify', () => ({ +vi.mock('@mtsrc/slugify', () => ({ createSlugGenerator: vi.fn(() => vi.fn(async ({ input }: { input: string }) => `${input}-slug`) ) })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name: string, factory: () => any) => ({ build: vi.fn(() => factory()) diff --git a/src/backend/modules/consumer/package.json b/src/backend/modules/consumer/package.json index 99e761f65..f654292fe 100644 --- a/src/backend/modules/consumer/package.json +++ b/src/backend/modules/consumer/package.json @@ -9,13 +9,6 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/tokens": "^1.0.5", "@metorial/consumer-auth": "1.0.0", "@metorial-platform-systems/ares-client": "^1.0.0", "@metorial/config": "1.0.0", @@ -28,7 +21,14 @@ "@metorial/module-organization": "1.0.0", "@metorial/module-search": "^1.0.0", "@metorial/module-subspace": "1.0.0", - "@metorial/queue": "1.0.0" + "@metorial/queue": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/tokens": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/consumer/src/env.ts b/src/backend/modules/consumer/src/env.ts index bab67b477..978e03c5c 100644 --- a/src/backend/modules/consumer/src/env.ts +++ b/src/backend/modules/consumer/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ portal: { diff --git a/src/backend/modules/consumer/src/lib/consumerProviderContext.ts b/src/backend/modules/consumer/src/lib/consumerProviderContext.ts index f88bfb5ef..a0078a6b9 100644 --- a/src/backend/modules/consumer/src/lib/consumerProviderContext.ts +++ b/src/backend/modules/consumer/src/lib/consumerProviderContext.ts @@ -1,4 +1,4 @@ -import { preconditionFailedError, ServiceError } from '@lowerdeck/error'; +import { preconditionFailedError, ServiceError } from '@mtsrc/error'; import { type Instance, type ProviderTemplate } from '@metorial/db'; import { type AnyAccessTagSelector } from '@metorial/module-access'; import { providerTemplateService } from '@metorial/module-magic'; diff --git a/src/backend/modules/consumer/src/lib/consumerSurfaceEmailWhitelist.ts b/src/backend/modules/consumer/src/lib/consumerSurfaceEmailWhitelist.ts index 6bb0a0ca9..42eea9638 100644 --- a/src/backend/modules/consumer/src/lib/consumerSurfaceEmailWhitelist.ts +++ b/src/backend/modules/consumer/src/lib/consumerSurfaceEmailWhitelist.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; let domainLabelPattern = '[a-z0-9](?:[a-z0-9-]*[a-z0-9])?'; let domainPattern = new RegExp(`^${domainLabelPattern}(?:\\.${domainLabelPattern})*$`); diff --git a/src/backend/modules/consumer/src/lib/oauth.ts b/src/backend/modules/consumer/src/lib/oauth.ts index 2dbda4104..674d671c3 100644 --- a/src/backend/modules/consumer/src/lib/oauth.ts +++ b/src/backend/modules/consumer/src/lib/oauth.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; export type PortalAllowedRedirectUrlFilter = { url: string; diff --git a/src/backend/modules/consumer/src/services/consumerAccess/accessPolicy.ts b/src/backend/modules/consumer/src/services/consumerAccess/accessPolicy.ts index fdd9da4fd..c94215f3e 100644 --- a/src/backend/modules/consumer/src/services/consumerAccess/accessPolicy.ts +++ b/src/backend/modules/consumer/src/services/consumerAccess/accessPolicy.ts @@ -1,5 +1,5 @@ -import { preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { ConsumerAccess, ConsumerGroup, diff --git a/src/backend/modules/consumer/src/services/consumerAccess/ares.ts b/src/backend/modules/consumer/src/services/consumerAccess/ares.ts index 95b6f0b17..cf80a368a 100644 --- a/src/backend/modules/consumer/src/services/consumerAccess/ares.ts +++ b/src/backend/modules/consumer/src/services/consumerAccess/ares.ts @@ -1,5 +1,5 @@ -import { notFoundError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { getConsumerAresInternalClient } from '@metorial/consumer-auth'; type ConsumerAresInternalClient = ReturnType; diff --git a/src/backend/modules/consumer/src/services/consumerAccess/consumerAccess.ts b/src/backend/modules/consumer/src/services/consumerAccess/consumerAccess.ts index e54d20734..e8e9d0f68 100644 --- a/src/backend/modules/consumer/src/services/consumerAccess/consumerAccess.ts +++ b/src/backend/modules/consumer/src/services/consumerAccess/consumerAccess.ts @@ -1,6 +1,6 @@ -import { notFoundError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { ConsumerAccess, ConsumerAccessListing, diff --git a/src/backend/modules/consumer/src/services/consumerAccess/consumerAccessListing.ts b/src/backend/modules/consumer/src/services/consumerAccess/consumerAccessListing.ts index b15355547..1aa8853f8 100644 --- a/src/backend/modules/consumer/src/services/consumerAccess/consumerAccessListing.ts +++ b/src/backend/modules/consumer/src/services/consumerAccess/consumerAccessListing.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { ConsumerAccessListing, ConsumerAccessTargetType, diff --git a/src/backend/modules/consumer/src/services/consumerAccess/consumerAccessRequest.ts b/src/backend/modules/consumer/src/services/consumerAccess/consumerAccessRequest.ts index e95206405..8deed4280 100644 --- a/src/backend/modules/consumer/src/services/consumerAccess/consumerAccessRequest.ts +++ b/src/backend/modules/consumer/src/services/consumerAccess/consumerAccessRequest.ts @@ -3,9 +3,9 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { ConsumerAccessRequest, ConsumerAccessRequestStatus, diff --git a/src/backend/modules/consumer/src/services/consumerEntities/consumerIntegration.ts b/src/backend/modules/consumer/src/services/consumerEntities/consumerIntegration.ts index 4c72ddcae..b338f9ab2 100644 --- a/src/backend/modules/consumer/src/services/consumerEntities/consumerIntegration.ts +++ b/src/backend/modules/consumer/src/services/consumerEntities/consumerIntegration.ts @@ -1,5 +1,5 @@ -import { ServiceError, preconditionFailedError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { ServiceError, preconditionFailedError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { ConsumerAuthAttempt, ConsumerIntegration, diff --git a/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderCatalog.ts b/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderCatalog.ts index 97bd2026e..c2cc78c17 100644 --- a/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderCatalog.ts +++ b/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderCatalog.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator, type PaginatorInput } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator, type PaginatorInput } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { ConsumerAccessListing, ConsumerGroup, diff --git a/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderDeployment.ts b/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderDeployment.ts index 40b402e74..78226a12d 100644 --- a/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderDeployment.ts +++ b/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderDeployment.ts @@ -1,5 +1,5 @@ -import { preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { ConsumerProfile, diff --git a/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderSetupSession.ts b/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderSetupSession.ts index 1c6957ef3..84ac971e4 100644 --- a/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderSetupSession.ts +++ b/src/backend/modules/consumer/src/services/consumerEntities/consumerProviderSetupSession.ts @@ -3,8 +3,8 @@ import { preconditionFailedError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { ConsumerProfile, diff --git a/src/backend/modules/consumer/src/services/consumerEntities/consumerSkill.ts b/src/backend/modules/consumer/src/services/consumerEntities/consumerSkill.ts index 04647a671..28dcc0668 100644 --- a/src/backend/modules/consumer/src/services/consumerEntities/consumerSkill.ts +++ b/src/backend/modules/consumer/src/services/consumerEntities/consumerSkill.ts @@ -3,8 +3,8 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Consumer, ConsumerGroup, diff --git a/src/backend/modules/consumer/src/services/consumerOAuth/_helpers.ts b/src/backend/modules/consumer/src/services/consumerOAuth/_helpers.ts index 6ff953220..57ef58887 100644 --- a/src/backend/modules/consumer/src/services/consumerOAuth/_helpers.ts +++ b/src/backend/modules/consumer/src/services/consumerOAuth/_helpers.ts @@ -4,8 +4,8 @@ import { preconditionFailedError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; +} from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; import { getConfig } from '@metorial/config'; import { db, diff --git a/src/backend/modules/consumer/src/services/consumerOAuth/authorization.ts b/src/backend/modules/consumer/src/services/consumerOAuth/authorization.ts index 021d09692..9074cb365 100644 --- a/src/backend/modules/consumer/src/services/consumerOAuth/authorization.ts +++ b/src/backend/modules/consumer/src/services/consumerOAuth/authorization.ts @@ -3,9 +3,9 @@ import { notFoundError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { generateCustomId } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { generateCustomId } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; import { db, ID, Organization, Project, SkillPlugin, type Instance } from '@metorial/db'; import { type MagicMcpResolvedTarget } from '@metorial/module-magic'; import { addDays } from 'date-fns'; diff --git a/src/backend/modules/consumer/src/services/consumerOAuth/client.ts b/src/backend/modules/consumer/src/services/consumerOAuth/client.ts index 37039d824..3448d404d 100644 --- a/src/backend/modules/consumer/src/services/consumerOAuth/client.ts +++ b/src/backend/modules/consumer/src/services/consumerOAuth/client.ts @@ -1,5 +1,5 @@ -import { preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { ID, withTransaction, type ConsumerSurface } from '@metorial/db'; import { getConsumerClientHash, normalizeConsumerClientRedirectUris } from './_helpers'; import { ConsumerOAuthClient } from './_types'; diff --git a/src/backend/modules/consumer/src/services/consumerOAuth/dashboard.ts b/src/backend/modules/consumer/src/services/consumerOAuth/dashboard.ts index a50468d00..cf53e040c 100644 --- a/src/backend/modules/consumer/src/services/consumerOAuth/dashboard.ts +++ b/src/backend/modules/consumer/src/services/consumerOAuth/dashboard.ts @@ -1,5 +1,5 @@ -import { notFoundError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, type ConsumerProfile, type ConsumerSurface, type Instance } from '@metorial/db'; import { type AnyAccessTagSelector } from '@metorial/module-access'; import { skillPluginService } from '@metorial/module-file'; diff --git a/src/backend/modules/consumer/src/services/consumerOAuth/registration.ts b/src/backend/modules/consumer/src/services/consumerOAuth/registration.ts index a1db87b04..3215cc9a6 100644 --- a/src/backend/modules/consumer/src/services/consumerOAuth/registration.ts +++ b/src/backend/modules/consumer/src/services/consumerOAuth/registration.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, ID, diff --git a/src/backend/modules/consumer/src/services/consumerOAuth/routing.ts b/src/backend/modules/consumer/src/services/consumerOAuth/routing.ts index 616f2875d..913cbd931 100644 --- a/src/backend/modules/consumer/src/services/consumerOAuth/routing.ts +++ b/src/backend/modules/consumer/src/services/consumerOAuth/routing.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { getConfig } from '@metorial/config'; import { db, Organization, Portal } from '@metorial/db'; import { resolveMagicMcpTargetByIdOrAlias } from '@metorial/module-magic'; diff --git a/src/backend/modules/consumer/src/services/consumerOAuth/testAuthorization.ts b/src/backend/modules/consumer/src/services/consumerOAuth/testAuthorization.ts index 055403afb..202ff86d0 100644 --- a/src/backend/modules/consumer/src/services/consumerOAuth/testAuthorization.ts +++ b/src/backend/modules/consumer/src/services/consumerOAuth/testAuthorization.ts @@ -3,8 +3,8 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { ConsumerAuthAttemptCodeChallengeMethod, db, ID, Instance } from '@metorial/db'; import { addMinutes } from 'date-fns'; import { diff --git a/src/backend/modules/consumer/src/services/consumerOAuth/token.ts b/src/backend/modules/consumer/src/services/consumerOAuth/token.ts index 003802f5e..ece423ebf 100644 --- a/src/backend/modules/consumer/src/services/consumerOAuth/token.ts +++ b/src/backend/modules/consumer/src/services/consumerOAuth/token.ts @@ -3,9 +3,9 @@ import { notFoundError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { generateCustomId } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { generateCustomId } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; import { db, Organization, diff --git a/src/backend/modules/consumer/src/services/consumers/consumer.ts b/src/backend/modules/consumer/src/services/consumers/consumer.ts index 0636d054d..2ed0feca6 100644 --- a/src/backend/modules/consumer/src/services/consumers/consumer.ts +++ b/src/backend/modules/consumer/src/services/consumers/consumer.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Consumer, ConsumerProfile, diff --git a/src/backend/modules/consumer/src/services/consumers/consumerAuth.ts b/src/backend/modules/consumer/src/services/consumers/consumerAuth.ts index c4c2884f4..8a9e095a9 100644 --- a/src/backend/modules/consumer/src/services/consumers/consumerAuth.ts +++ b/src/backend/modules/consumer/src/services/consumers/consumerAuth.ts @@ -4,8 +4,8 @@ import { preconditionFailedError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { authenticateWithConsumerSessionToken, type ConsumerTokenSession, diff --git a/src/backend/modules/consumer/src/services/consumers/consumerGroup.ts b/src/backend/modules/consumer/src/services/consumers/consumerGroup.ts index ee3212fc5..8e0403d70 100644 --- a/src/backend/modules/consumer/src/services/consumers/consumerGroup.ts +++ b/src/backend/modules/consumer/src/services/consumers/consumerGroup.ts @@ -1,6 +1,6 @@ -import { notFoundError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { ConsumerGroup, ConsumerSurface, db, ID, Organization } from '@metorial/db'; import { searchConsumerGroupIds } from '@metorial/module-search'; import { diff --git a/src/backend/modules/consumer/src/services/consumers/consumerInvite.ts b/src/backend/modules/consumer/src/services/consumers/consumerInvite.ts index dd1c46f65..c01072f03 100644 --- a/src/backend/modules/consumer/src/services/consumers/consumerInvite.ts +++ b/src/backend/modules/consumer/src/services/consumers/consumerInvite.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { ConsumerSurface, db, ID, OrganizationActor, Prisma } from '@metorial/db'; import { searchConsumerIds } from '@metorial/module-search'; import { diff --git a/src/backend/modules/consumer/src/services/consumers/consumerProfile.ts b/src/backend/modules/consumer/src/services/consumers/consumerProfile.ts index edc097f96..820cf3262 100644 --- a/src/backend/modules/consumer/src/services/consumers/consumerProfile.ts +++ b/src/backend/modules/consumer/src/services/consumers/consumerProfile.ts @@ -1,6 +1,6 @@ -import { conflictError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { conflictError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { getEffectiveConsumerGroups, normalizeStringList, diff --git a/src/backend/modules/consumer/src/services/consumers/consumerSurface.ts b/src/backend/modules/consumer/src/services/consumers/consumerSurface.ts index 6e085e7cf..4cd08da5f 100644 --- a/src/backend/modules/consumer/src/services/consumers/consumerSurface.ts +++ b/src/backend/modules/consumer/src/services/consumers/consumerSurface.ts @@ -1,6 +1,6 @@ -import { notFoundError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { ConsumerSurface, diff --git a/src/backend/modules/consumer/src/services/consumers/consumerSurfaceProviderGroup.ts b/src/backend/modules/consumer/src/services/consumers/consumerSurfaceProviderGroup.ts index 4a0b8dba0..a585fed87 100644 --- a/src/backend/modules/consumer/src/services/consumers/consumerSurfaceProviderGroup.ts +++ b/src/backend/modules/consumer/src/services/consumers/consumerSurfaceProviderGroup.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { ConsumerAccessListing, ConsumerSurface, diff --git a/src/backend/modules/consumer/src/services/portal.ts b/src/backend/modules/consumer/src/services/portal.ts index a76899ef2..c258db4eb 100644 --- a/src/backend/modules/consumer/src/services/portal.ts +++ b/src/backend/modules/consumer/src/services/portal.ts @@ -1,7 +1,7 @@ -import { notFoundError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +import { notFoundError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import { Context } from '@metorial/context'; import { db, ID, Instance, Organization, Portal, Prisma, withTransaction } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; diff --git a/src/backend/modules/consumer/test/consumerIntegration.test.ts b/src/backend/modules/consumer/test/consumerIntegration.test.ts index 3c9f7e24c..02b645ec8 100644 --- a/src/backend/modules/consumer/test/consumerIntegration.test.ts +++ b/src/backend/modules/consumer/test/consumerIntegration.test.ts @@ -42,7 +42,7 @@ vi.mock('@metorial/db', () => { }; }); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((_: string, factory: () => unknown) => ({ build: () => factory() diff --git a/src/backend/modules/consumer/test/consumerOAuthLinking.test.ts b/src/backend/modules/consumer/test/consumerOAuthLinking.test.ts index 6c4d769af..3c3842032 100644 --- a/src/backend/modules/consumer/test/consumerOAuthLinking.test.ts +++ b/src/backend/modules/consumer/test/consumerOAuthLinking.test.ts @@ -1,12 +1,12 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'; -vi.mock('@lowerdeck/hash', () => ({ +vi.mock('@mtsrc/hash', () => ({ Hash: { sha256: vi.fn(async value => `hash:${value}`) } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((_: string, factory: () => unknown) => ({ build: () => factory() @@ -117,7 +117,7 @@ vi.mock('../src/services/portal', () => ({ } })); -import { Hash } from '@lowerdeck/hash'; +import { Hash } from '@mtsrc/hash'; import { db } from '@metorial/db'; import { magicMcpEndpointService } from '@metorial/module-magic'; import { consumerIntegrationService } from '../src/services/consumerEntities/consumerIntegration'; diff --git a/src/backend/modules/email/package.json b/src/backend/modules/email/package.json index 0b7ce69ec..c0be64589 100644 --- a/src/backend/modules/email/package.json +++ b/src/backend/modules/email/package.json @@ -9,11 +9,11 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/programmable-promise": "1.0.6", "@metorial-platform-systems/relay-client": "workspace:*", "@metorial/db": "^1.0.0", "@metorial/queue": "^1.0.0", - "@lowerdeck/service": "^1.0.7" + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/service": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/email/src/env.ts b/src/backend/modules/email/src/env.ts index 23e1137bc..a1ba94a9b 100644 --- a/src/backend/modules/email/src/env.ts +++ b/src/backend/modules/email/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/modules/email/src/relay.ts b/src/backend/modules/email/src/relay.ts index fb494a8b0..a74653c9b 100644 --- a/src/backend/modules/email/src/relay.ts +++ b/src/backend/modules/email/src/relay.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { delay } from '@mtsrc/delay'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { createRelayClient, type EmailIdentity, diff --git a/src/backend/modules/event/package.json b/src/backend/modules/event/package.json index f44e47a1e..e4a6d2abc 100644 --- a/src/backend/modules/event/package.json +++ b/src/backend/modules/event/package.json @@ -11,12 +11,12 @@ "dependencies": { "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/error": "^1.2.3", "@metorial/fabric": "^1.0.0", "@metorial/id": "^1.0.0", - "@lowerdeck/pagination": "^1.0.8", "@metorial/queue": "^1.0.0", - "@lowerdeck/service": "^1.0.7" + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/event/src/services/ingestEvent.ts b/src/backend/modules/event/src/services/ingestEvent.ts index 32836d782..e4a90930d 100644 --- a/src/backend/modules/event/src/services/ingestEvent.ts +++ b/src/backend/modules/event/src/services/ingestEvent.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { Instance, Organization, OrganizationActor } from '@metorial/db'; import { EventTypes } from '../definitions'; diff --git a/src/backend/modules/event/test/index.test.ts b/src/backend/modules/event/test/index.test.ts index 332e1ed33..c5cfcd411 100644 --- a/src/backend/modules/event/test/index.test.ts +++ b/src/backend/modules/event/test/index.test.ts @@ -9,7 +9,7 @@ vi.mock('@metorial/queue', () => ({ })) })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name: string, factory: () => any) => ({ build: vi.fn(() => factory()) diff --git a/src/backend/modules/event/test/ingestEvent.test.ts b/src/backend/modules/event/test/ingestEvent.test.ts index 74ab09d21..632a2da82 100644 --- a/src/backend/modules/event/test/ingestEvent.test.ts +++ b/src/backend/modules/event/test/ingestEvent.test.ts @@ -3,7 +3,7 @@ import type { EventTypes } from '../src/definitions'; import { ingestEventService } from '../src/services/ingestEvent'; // Mock the Service module -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name: string, factory: () => any) => ({ build: vi.fn(() => factory()) diff --git a/src/backend/modules/file/package.json b/src/backend/modules/file/package.json index ce38c3523..4fdaa5b85 100644 --- a/src/backend/modules/file/package.json +++ b/src/backend/modules/file/package.json @@ -14,15 +14,15 @@ "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", "@metorial/internal-clients": "1.0.0", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", "@metorial/fabric": "^1.0.0", "@metorial/id": "^1.0.0", - "@lowerdeck/pagination": "^1.0.8", "@metorial/queue": "^1.0.0", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/object-storage-client": "workspace:*" + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/file/src/env.ts b/src/backend/modules/file/src/env.ts index 3b8da956d..f36afafb5 100644 --- a/src/backend/modules/file/src/env.ts +++ b/src/backend/modules/file/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/modules/file/src/services/document.ts b/src/backend/modules/file/src/services/document.ts index 3b20e15bd..19896362a 100644 --- a/src/backend/modules/file/src/services/document.ts +++ b/src/backend/modules/file/src/services/document.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoActor, type CargoDocument } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/documentParticipant.ts b/src/backend/modules/file/src/services/documentParticipant.ts index 2c02c29d5..3efcb6fb3 100644 --- a/src/backend/modules/file/src/services/documentParticipant.ts +++ b/src/backend/modules/file/src/services/documentParticipant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Consumer, ConsumerProfile, diff --git a/src/backend/modules/file/src/services/documentVersion.ts b/src/backend/modules/file/src/services/documentVersion.ts index 91063c4b9..e75c81d32 100644 --- a/src/backend/modules/file/src/services/documentVersion.ts +++ b/src/backend/modules/file/src/services/documentVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoDocumentVersion } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/file.ts b/src/backend/modules/file/src/services/file.ts index c4d08b419..f4dd6e8bd 100644 --- a/src/backend/modules/file/src/services/file.ts +++ b/src/backend/modules/file/src/services/file.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Instance, Organization, User } from '@metorial/db'; import { cargo, reconcileCargoPurposes, type CargoActor, type CargoFile } from '../cargo'; import { purposes } from '../definitions'; diff --git a/src/backend/modules/file/src/services/fileLink.ts b/src/backend/modules/file/src/services/fileLink.ts index e8e96ce8d..a11ee6d69 100644 --- a/src/backend/modules/file/src/services/fileLink.ts +++ b/src/backend/modules/file/src/services/fileLink.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type CargoFile, type CargoFileLink, cargo } from '../cargo'; import { type CargoAccessActor, resolveCargoAccess } from './access'; import type { FileOwner } from './file'; diff --git a/src/backend/modules/file/src/services/fileReference.ts b/src/backend/modules/file/src/services/fileReference.ts index 16e9fc37c..a50fbbf49 100644 --- a/src/backend/modules/file/src/services/fileReference.ts +++ b/src/backend/modules/file/src/services/fileReference.ts @@ -1,5 +1,5 @@ -import { forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { EntityImage } from '@metorial/db'; import { type CargoFile, diff --git a/src/backend/modules/file/src/services/scope.ts b/src/backend/modules/file/src/services/scope.ts index 017857690..3f37fc405 100644 --- a/src/backend/modules/file/src/services/scope.ts +++ b/src/backend/modules/file/src/services/scope.ts @@ -1,4 +1,4 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { notFoundError, ServiceError } from '@mtsrc/error'; import { ensureCargoScope, resolveCargoScopeDescriptorForOwner } from '../cargo'; import type { FileOwner } from './file'; diff --git a/src/backend/modules/file/src/services/skillAgent.ts b/src/backend/modules/file/src/services/skillAgent.ts index f80aff623..a19175d3f 100644 --- a/src/backend/modules/file/src/services/skillAgent.ts +++ b/src/backend/modules/file/src/services/skillAgent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoSkillAgent } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/skillConfiguration.ts b/src/backend/modules/file/src/services/skillConfiguration.ts index 7413c681a..2042c96b3 100644 --- a/src/backend/modules/file/src/services/skillConfiguration.ts +++ b/src/backend/modules/file/src/services/skillConfiguration.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoSkillConfiguration } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/skillExport.ts b/src/backend/modules/file/src/services/skillExport.ts index d81b2beca..26228795d 100644 --- a/src/backend/modules/file/src/services/skillExport.ts +++ b/src/backend/modules/file/src/services/skillExport.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoActor, type CargoSkillExport } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/skillMarketplace.ts b/src/backend/modules/file/src/services/skillMarketplace.ts index 17193778c..2f41c14d5 100644 --- a/src/backend/modules/file/src/services/skillMarketplace.ts +++ b/src/backend/modules/file/src/services/skillMarketplace.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Instance, diff --git a/src/backend/modules/file/src/services/skillMarketplaceRepository.ts b/src/backend/modules/file/src/services/skillMarketplaceRepository.ts index 4620db5d4..3e39a5e68 100644 --- a/src/backend/modules/file/src/services/skillMarketplaceRepository.ts +++ b/src/backend/modules/file/src/services/skillMarketplaceRepository.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoSkillMarketplaceRepository } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/skillParticipant.ts b/src/backend/modules/file/src/services/skillParticipant.ts index 0354fdb83..e90019ea2 100644 --- a/src/backend/modules/file/src/services/skillParticipant.ts +++ b/src/backend/modules/file/src/services/skillParticipant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoSkillParticipant } from '../cargo'; import { resolveCargoAccess, type CargoAccessActor } from './access'; import { diff --git a/src/backend/modules/file/src/services/skillPlugin.ts b/src/backend/modules/file/src/services/skillPlugin.ts index 54ab91c8f..1f9fc1766 100644 --- a/src/backend/modules/file/src/services/skillPlugin.ts +++ b/src/backend/modules/file/src/services/skillPlugin.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Instance, type Organization, type SkillPlugin } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; import { subspaceSkillService } from '@metorial/module-subspace'; diff --git a/src/backend/modules/file/src/services/skillPluginRepository.ts b/src/backend/modules/file/src/services/skillPluginRepository.ts index a67bef659..3d5aeeb18 100644 --- a/src/backend/modules/file/src/services/skillPluginRepository.ts +++ b/src/backend/modules/file/src/services/skillPluginRepository.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoSkillPluginRepository } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/skillSync.ts b/src/backend/modules/file/src/services/skillSync.ts index 8ce168c8d..26a6551d4 100644 --- a/src/backend/modules/file/src/services/skillSync.ts +++ b/src/backend/modules/file/src/services/skillSync.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoSkillSync } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/skillVersion.ts b/src/backend/modules/file/src/services/skillVersion.ts index 2c13d1189..db430b242 100644 --- a/src/backend/modules/file/src/services/skillVersion.ts +++ b/src/backend/modules/file/src/services/skillVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoSkillVersion, type CargoSkillVersionSnapshot } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/store.ts b/src/backend/modules/file/src/services/store.ts index dc0b54a54..5f7740437 100644 --- a/src/backend/modules/file/src/services/store.ts +++ b/src/backend/modules/file/src/services/store.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoStore } from '../cargo'; import { resolveCargoAccess, diff --git a/src/backend/modules/file/src/services/storeItem.ts b/src/backend/modules/file/src/services/storeItem.ts index 9a4638809..81bf3acae 100644 --- a/src/backend/modules/file/src/services/storeItem.ts +++ b/src/backend/modules/file/src/services/storeItem.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { CargoStoreItemType } from '../cargo'; import { cargo, type CargoStoreItem } from '../cargo'; import { diff --git a/src/backend/modules/file/src/services/storeParticipant.ts b/src/backend/modules/file/src/services/storeParticipant.ts index 6a9d90305..732a200d4 100644 --- a/src/backend/modules/file/src/services/storeParticipant.ts +++ b/src/backend/modules/file/src/services/storeParticipant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { cargo, type CargoStoreParticipant } from '../cargo'; import { resolveCargoAccess, type CargoAccessActor } from './access'; import { diff --git a/src/backend/modules/file/src/storage.ts b/src/backend/modules/file/src/storage.ts index a1eef19f2..5ed6b7ffa 100644 --- a/src/backend/modules/file/src/storage.ts +++ b/src/backend/modules/file/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; diff --git a/src/backend/modules/flags/package.json b/src/backend/modules/flags/package.json index a267a5dda..816386d3e 100644 --- a/src/backend/modules/flags/package.json +++ b/src/backend/modules/flags/package.json @@ -11,12 +11,12 @@ "dependencies": { "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/error": "^1.2.3", "@metorial/fabric": "^1.0.0", "@metorial/id": "^1.0.0", - "@lowerdeck/pagination": "^1.0.8", "@metorial/queue": "^1.0.0", - "@lowerdeck/service": "^1.0.7" + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/flags/src/services/flags.ts b/src/backend/modules/flags/src/services/flags.ts index 529c8b556..ee38561c0 100644 --- a/src/backend/modules/flags/src/services/flags.ts +++ b/src/backend/modules/flags/src/services/flags.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { FlagProviderParams, getFlags } from '../definitions'; class FlagServiceImpl { diff --git a/src/backend/modules/machine-access/package.json b/src/backend/modules/machine-access/package.json index f30a1f01d..3e73f3937 100644 --- a/src/backend/modules/machine-access/package.json +++ b/src/backend/modules/machine-access/package.json @@ -12,19 +12,19 @@ "@metorial/context": "^1.0.0", "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/error": "^1.2.3", "@metorial/fabric": "^1.0.0", - "@lowerdeck/pagination": "^1.0.8", "@metorial/multi-region": "^1.0.0", "@metorial/queue": "^1.0.0", - "@lowerdeck/service": "^1.0.7", "@metorial/api-keys": "^1.0.0", "@metorial/config": "^1.0.0", - "@lowerdeck/hash": "^1.0.4", "@metorial/id": "^1.0.0", "@metorial/module-organization": "^1.0.0", "date-fns": "^4.1.0", - "ipaddr.js": "^2.2.0" + "ipaddr.js": "^2.2.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/hash": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/machine-access/src/env.ts b/src/backend/modules/machine-access/src/env.ts index b50c97ae4..d1357c270 100644 --- a/src/backend/modules/machine-access/src/env.ts +++ b/src/backend/modules/machine-access/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/modules/machine-access/src/lib/apiKeyIpFilters.ts b/src/backend/modules/machine-access/src/lib/apiKeyIpFilters.ts index d3ed63304..3dec8b04a 100644 --- a/src/backend/modules/machine-access/src/lib/apiKeyIpFilters.ts +++ b/src/backend/modules/machine-access/src/lib/apiKeyIpFilters.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import * as ipaddr from 'ipaddr.js'; let normalizeIpFilter = (value: string) => value.trim(); diff --git a/src/backend/modules/machine-access/src/lib/oauthAuthorizationGuards.ts b/src/backend/modules/machine-access/src/lib/oauthAuthorizationGuards.ts index 524c11f75..c82ba3d02 100644 --- a/src/backend/modules/machine-access/src/lib/oauthAuthorizationGuards.ts +++ b/src/backend/modules/machine-access/src/lib/oauthAuthorizationGuards.ts @@ -3,7 +3,7 @@ import { forbiddenError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; +} from '@mtsrc/error'; import { MachineAccess, OAuthApplication, diff --git a/src/backend/modules/machine-access/src/lib/oauthScopeValidation.ts b/src/backend/modules/machine-access/src/lib/oauthScopeValidation.ts index 075b6ab6b..37f5e67d5 100644 --- a/src/backend/modules/machine-access/src/lib/oauthScopeValidation.ts +++ b/src/backend/modules/machine-access/src/lib/oauthScopeValidation.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { coreScopes } from '../../../access/src/definitions'; import { normalizeScopes } from './oauthAuthorizationScopes'; diff --git a/src/backend/modules/machine-access/src/lib/oauthUrls.ts b/src/backend/modules/machine-access/src/lib/oauthUrls.ts index 8f36df8b9..1f498b6f7 100644 --- a/src/backend/modules/machine-access/src/lib/oauthUrls.ts +++ b/src/backend/modules/machine-access/src/lib/oauthUrls.ts @@ -1,4 +1,4 @@ -import { badRequestError, isServiceError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, isServiceError, ServiceError } from '@mtsrc/error'; export let urlsMatch = (url1: string, url2: string) => { try { diff --git a/src/backend/modules/machine-access/src/services/apiKey.ts b/src/backend/modules/machine-access/src/services/apiKey.ts index 69855756c..c1ee438b1 100644 --- a/src/backend/modules/machine-access/src/services/apiKey.ts +++ b/src/backend/modules/machine-access/src/services/apiKey.ts @@ -1,7 +1,7 @@ -import { forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { UnifiedApiKey } from '@metorial/api-keys'; import { getConfig } from '@metorial/config'; import { Context } from '@metorial/context'; diff --git a/src/backend/modules/machine-access/src/services/cliDevice.ts b/src/backend/modules/machine-access/src/services/cliDevice.ts index 0a97900f4..addf89fa9 100644 --- a/src/backend/modules/machine-access/src/services/cliDevice.ts +++ b/src/backend/modules/machine-access/src/services/cliDevice.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { CliDevice, db, diff --git a/src/backend/modules/machine-access/src/services/machineAccess.ts b/src/backend/modules/machine-access/src/services/machineAccess.ts index 9d47491a0..9d5b8e045 100644 --- a/src/backend/modules/machine-access/src/services/machineAccess.ts +++ b/src/backend/modules/machine-access/src/services/machineAccess.ts @@ -1,5 +1,5 @@ -import { forbiddenError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { db, diff --git a/src/backend/modules/machine-access/src/services/machineAccessAuth.ts b/src/backend/modules/machine-access/src/services/machineAccessAuth.ts index 966d223e0..1b1212c07 100644 --- a/src/backend/modules/machine-access/src/services/machineAccessAuth.ts +++ b/src/backend/modules/machine-access/src/services/machineAccessAuth.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { UnifiedApiKey } from '@metorial/api-keys'; import { Context } from '@metorial/context'; import { db, Prisma } from '@metorial/db'; diff --git a/src/backend/modules/machine-access/src/services/oauthApplication.ts b/src/backend/modules/machine-access/src/services/oauthApplication.ts index d6509c0c5..420429d5b 100644 --- a/src/backend/modules/machine-access/src/services/oauthApplication.ts +++ b/src/backend/modules/machine-access/src/services/oauthApplication.ts @@ -1,6 +1,6 @@ -import { forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { addAfterTransactionHook, diff --git a/src/backend/modules/machine-access/src/services/oauthAuthorization.ts b/src/backend/modules/machine-access/src/services/oauthAuthorization.ts index e57c6f8cf..2dc4a0eaf 100644 --- a/src/backend/modules/machine-access/src/services/oauthAuthorization.ts +++ b/src/backend/modules/machine-access/src/services/oauthAuthorization.ts @@ -4,9 +4,9 @@ import { notFoundError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { addAfterTransactionHook, diff --git a/src/backend/modules/machine-access/src/services/oauthAuthorizationInstallation.ts b/src/backend/modules/machine-access/src/services/oauthAuthorizationInstallation.ts index dbb0e7f14..282ab921a 100644 --- a/src/backend/modules/machine-access/src/services/oauthAuthorizationInstallation.ts +++ b/src/backend/modules/machine-access/src/services/oauthAuthorizationInstallation.ts @@ -3,9 +3,9 @@ import { forbiddenError, notFoundError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { addAfterTransactionHook, diff --git a/src/backend/modules/machine-access/src/services/oauthAuthorizationLog.ts b/src/backend/modules/machine-access/src/services/oauthAuthorizationLog.ts index 974d5759d..5863331b4 100644 --- a/src/backend/modules/machine-access/src/services/oauthAuthorizationLog.ts +++ b/src/backend/modules/machine-access/src/services/oauthAuthorizationLog.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, Organization, OrganizationActor, Prisma } from '@metorial/db'; let oauthAuthorizationLogInclude = { diff --git a/src/backend/modules/machine-access/src/services/oauthJwk.ts b/src/backend/modules/machine-access/src/services/oauthJwk.ts index 4bf7ec139..329be1f66 100644 --- a/src/backend/modules/machine-access/src/services/oauthJwk.ts +++ b/src/backend/modules/machine-access/src/services/oauthJwk.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { Service } from '@lowerdeck/service'; +import { delay } from '@mtsrc/delay'; +import { Service } from '@mtsrc/service'; import { generateCustomId } from '@metorial/id'; import { oauthJwkGlobalRepository } from '@metorial/multi-region'; import { addDays } from 'date-fns'; diff --git a/src/backend/modules/machine-access/src/services/oauthOidc.ts b/src/backend/modules/machine-access/src/services/oauthOidc.ts index 92916b399..d807191e2 100644 --- a/src/backend/modules/machine-access/src/services/oauthOidc.ts +++ b/src/backend/modules/machine-access/src/services/oauthOidc.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { getConfig } from '@metorial/config'; import { oauthJwkGlobalRepository } from '@metorial/multi-region'; import type { JsonWebKeyInput } from 'node:crypto'; diff --git a/src/backend/modules/machine-access/src/services/serviceAccount.ts b/src/backend/modules/machine-access/src/services/serviceAccount.ts index 48aaa0152..44632c50f 100644 --- a/src/backend/modules/machine-access/src/services/serviceAccount.ts +++ b/src/backend/modules/machine-access/src/services/serviceAccount.ts @@ -1,6 +1,6 @@ -import { forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { addAfterTransactionHook, diff --git a/src/backend/modules/machine-access/test/apiKey.test.ts b/src/backend/modules/machine-access/test/apiKey.test.ts index 5b9b4bd9a..b0df2b122 100644 --- a/src/backend/modules/machine-access/test/apiKey.test.ts +++ b/src/backend/modules/machine-access/test/apiKey.test.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { apiKeyService } from '../src/services/apiKey'; @@ -28,7 +28,7 @@ vi.mock('@metorial/db', () => ({ addAfterTransactionHook: vi.fn(), ID: { generateId: vi.fn().mockResolvedValue('mock-id') } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: (_: string, fn: any) => ({ build: () => fn() }) } })); vi.mock('@metorial/api-keys', () => ({ @@ -42,7 +42,7 @@ vi.mock('@metorial/api-keys', () => ({ vi.mock('@metorial/config', () => ({ getConfig: () => ({ urls: { apiUrl: 'http://api' } }) })); -vi.mock('@lowerdeck/hash', () => ({ +vi.mock('@mtsrc/hash', () => ({ Hash: { sha512: vi.fn(() => Promise.resolve('sha512')) } })); vi.mock('@metorial/fabric', () => ({ @@ -60,7 +60,7 @@ vi.mock('../src/services/machineAccess', () => ({ deleteMachineAccess: vi.fn(() => Promise.resolve()) } })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: (fn: any) => fn({ prisma: (cb: any) => cb({}) }) } })); diff --git a/src/backend/modules/machine-access/test/machineAccess.test.ts b/src/backend/modules/machine-access/test/machineAccess.test.ts index 7d1ee1ba8..8e17c3a9c 100644 --- a/src/backend/modules/machine-access/test/machineAccess.test.ts +++ b/src/backend/modules/machine-access/test/machineAccess.test.ts @@ -14,7 +14,7 @@ vi.mock('@metorial/module-organization/src/services/organizationActor', () => ({ createOrganizationActor: vi.fn().mockResolvedValue({ oid: 'actor-oid' }) } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: (_: string, factory: any) => ({ build: () => factory() diff --git a/src/backend/modules/machine-access/test/machineAccessAuth.test.ts b/src/backend/modules/machine-access/test/machineAccessAuth.test.ts index 432db49d8..d4614b1da 100644 --- a/src/backend/modules/machine-access/test/machineAccessAuth.test.ts +++ b/src/backend/modules/machine-access/test/machineAccessAuth.test.ts @@ -1,6 +1,6 @@ import { UnifiedApiKey } from '@metorial/api-keys'; import { db } from '@metorial/db'; -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { machineAccessAuthService } from '../src/services/machineAccessAuth'; diff --git a/src/backend/modules/machine-access/test/oauthApplication.test.ts b/src/backend/modules/machine-access/test/oauthApplication.test.ts index b7c173bd6..b684e57f9 100644 --- a/src/backend/modules/machine-access/test/oauthApplication.test.ts +++ b/src/backend/modules/machine-access/test/oauthApplication.test.ts @@ -42,14 +42,14 @@ vi.mock('./../src/services/machineAccess', () => ({ updateMachineAccess: (...args: any[]) => machineAccessUpdateMock(...args) } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: (_: string, factory: any) => ({ build: () => factory() }) } })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: (factory: any) => factory({ prisma: (cb: any) => cb({}) }) } diff --git a/src/backend/modules/machine-access/test/oauthAuthorization.test.ts b/src/backend/modules/machine-access/test/oauthAuthorization.test.ts index ed2cf41ef..0d1b68e69 100644 --- a/src/backend/modules/machine-access/test/oauthAuthorization.test.ts +++ b/src/backend/modules/machine-access/test/oauthAuthorization.test.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; let { @@ -165,7 +165,7 @@ vi.mock('@metorial/module-organization/src/services/organizationActor', () => ({ } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: (_: string, factory: any) => ({ build: () => factory() diff --git a/src/backend/modules/magic/package.json b/src/backend/modules/magic/package.json index e92307852..99aa2b7e7 100644 --- a/src/backend/modules/magic/package.json +++ b/src/backend/modules/magic/package.json @@ -15,25 +15,25 @@ "@metorial/context": "^1.0.0", "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", "@metorial/fabric": "^1.0.0", "@metorial/id": "^1.0.0", "@metorial/mcp-utils": "1.0.0", "@metorial/module-event": "1.0.0", "@metorial/module-search": "^1.0.0", "@metorial/module-subspace": "1.0.0", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "1.0.6", "@metorial/queue": "^1.0.0", "@metorial/redis": "1.0.0", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", "ajv": "^8.17.1", "date-fns": "^4.1.0", "mitt": "^3.0.1", "mongoose": "^8.14.2", - "redis": "^5.6.0" + "redis": "^5.6.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/magic/src/env.ts b/src/backend/modules/magic/src/env.ts index b50c97ae4..d1357c270 100644 --- a/src/backend/modules/magic/src/env.ts +++ b/src/backend/modules/magic/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/modules/magic/src/lib/ensureSession.ts b/src/backend/modules/magic/src/lib/ensureSession.ts index 4c16a1048..07b98253d 100644 --- a/src/backend/modules/magic/src/lib/ensureSession.ts +++ b/src/backend/modules/magic/src/lib/ensureSession.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { ID, Instance, withTransaction } from '@metorial/db'; import { ensureMagicMcpEndpointBacking, diff --git a/src/backend/modules/magic/src/lib/magicMcpConnectHealth.ts b/src/backend/modules/magic/src/lib/magicMcpConnectHealth.ts index 3d4663580..caa541b1a 100644 --- a/src/backend/modules/magic/src/lib/magicMcpConnectHealth.ts +++ b/src/backend/modules/magic/src/lib/magicMcpConnectHealth.ts @@ -3,7 +3,7 @@ import { preconditionFailedError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; +} from '@mtsrc/error'; import { db, type Instance } from '@metorial/db'; import { subspaceMagicMcpBackingService } from '@metorial/module-subspace'; import { MagicMcpResolvedTarget } from './magicMcpTarget'; diff --git a/src/backend/modules/magic/src/lib/magicMcpTarget.ts b/src/backend/modules/magic/src/lib/magicMcpTarget.ts index f0b93b4da..f9128dac5 100644 --- a/src/backend/modules/magic/src/lib/magicMcpTarget.ts +++ b/src/backend/modules/magic/src/lib/magicMcpTarget.ts @@ -1,4 +1,4 @@ -import { conflictError, notFoundError, ServiceError } from '@lowerdeck/error'; +import { conflictError, notFoundError, ServiceError } from '@mtsrc/error'; import { db } from '@metorial/db'; import { magicMcpEndpointInclude } from '../services/magicMcpEndpoint'; diff --git a/src/backend/modules/magic/src/services/magicMcpEndpoint.ts b/src/backend/modules/magic/src/services/magicMcpEndpoint.ts index 355292b28..ef06ca325 100644 --- a/src/backend/modules/magic/src/services/magicMcpEndpoint.ts +++ b/src/backend/modules/magic/src/services/magicMcpEndpoint.ts @@ -3,10 +3,10 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { ConsumerProfile, db, diff --git a/src/backend/modules/magic/src/services/magicMcpGroup.ts b/src/backend/modules/magic/src/services/magicMcpGroup.ts index db286fe2b..6fed255f1 100644 --- a/src/backend/modules/magic/src/services/magicMcpGroup.ts +++ b/src/backend/modules/magic/src/services/magicMcpGroup.ts @@ -14,12 +14,12 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; +} from '@mtsrc/error'; import { generatePlainId } from '@metorial/id'; import { searchMagicMcpGroupIds } from '@metorial/module-search'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { magicMcpGroupCreatedQueue, magicMcpGroupDeletedQueue, diff --git a/src/backend/modules/magic/src/services/magicMcpServer.ts b/src/backend/modules/magic/src/services/magicMcpServer.ts index f76ee5a12..038744ad7 100644 --- a/src/backend/modules/magic/src/services/magicMcpServer.ts +++ b/src/backend/modules/magic/src/services/magicMcpServer.ts @@ -3,10 +3,10 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { Context } from '@metorial/context'; import { ConsumerSurface, diff --git a/src/backend/modules/magic/src/services/magicMcpSession.ts b/src/backend/modules/magic/src/services/magicMcpSession.ts index 714ed91b9..24cc35166 100644 --- a/src/backend/modules/magic/src/services/magicMcpSession.ts +++ b/src/backend/modules/magic/src/services/magicMcpSession.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, Instance, Prisma } from '@metorial/db'; import { consumerMagicMcpReadRoles, type AnyAccessTagSelector } from '@metorial/module-access'; import { getAccessTagFilter } from './consumerAccess'; diff --git a/src/backend/modules/magic/src/services/magicMcpToken.ts b/src/backend/modules/magic/src/services/magicMcpToken.ts index 7de0d1628..d246e3aa0 100644 --- a/src/backend/modules/magic/src/services/magicMcpToken.ts +++ b/src/backend/modules/magic/src/services/magicMcpToken.ts @@ -3,9 +3,9 @@ import { preconditionFailedError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { UnifiedApiKey } from '@metorial/api-keys'; import { getConfig } from '@metorial/config'; import { diff --git a/src/backend/modules/magic/src/services/providerTemplate.ts b/src/backend/modules/magic/src/services/providerTemplate.ts index cba07e43d..1088bf9b8 100644 --- a/src/backend/modules/magic/src/services/providerTemplate.ts +++ b/src/backend/modules/magic/src/services/providerTemplate.ts @@ -1,6 +1,6 @@ -import { notFoundError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, ID, diff --git a/src/backend/modules/magic/test/magicMcpLinks.test.ts b/src/backend/modules/magic/test/magicMcpLinks.test.ts index 9eb8807c3..9d1618693 100644 --- a/src/backend/modules/magic/test/magicMcpLinks.test.ts +++ b/src/backend/modules/magic/test/magicMcpLinks.test.ts @@ -47,7 +47,7 @@ vi.mock('@metorial/db', () => { }; }); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((_: string, factory: () => unknown) => ({ build: () => factory() @@ -55,7 +55,7 @@ vi.mock('@lowerdeck/service', () => ({ } })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: vi.fn(fn => fn) } @@ -95,7 +95,7 @@ vi.mock('@metorial/id', () => ({ generatePlainId: vi.fn(() => 'plainid') })); -vi.mock('@lowerdeck/slugify', () => ({ +vi.mock('@mtsrc/slugify', () => ({ slugify: vi.fn((value?: string | null) => (value ?? 'group').toLowerCase().trim().replace(/\s+/g, '-') ) diff --git a/src/backend/modules/markdown/package.json b/src/backend/modules/markdown/package.json index 8b94855c8..0c228df16 100644 --- a/src/backend/modules/markdown/package.json +++ b/src/backend/modules/markdown/package.json @@ -11,15 +11,9 @@ "dependencies": { "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", "@metorial/fabric": "^1.0.0", "@metorial/id": "^1.0.0", "@metorial/queue": "^1.0.0", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", "date-fns": "^4.1.0", "mongoose": "^8.14.2", "rehype-parse": "^9.0.1", @@ -33,7 +27,13 @@ "remark-rehype": "^11.1.2", "remark-stringify": "^11.0.0", "unified": "^11.0.5", - "unist-util-visit": "^5.0.0" + "unist-util-visit": "^5.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/markdown/src/services/markdown.ts b/src/backend/modules/markdown/src/services/markdown.ts index 771d84487..5f071b9ec 100644 --- a/src/backend/modules/markdown/src/services/markdown.ts +++ b/src/backend/modules/markdown/src/services/markdown.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { createCachedFunction } from '@metorial/cache'; import { Markdown, MarkdownOptions } from '../lib/markdown'; diff --git a/src/backend/modules/markdown/test/markdownService.test.ts b/src/backend/modules/markdown/test/markdownService.test.ts index 9228e71c2..4ec5c6f5c 100644 --- a/src/backend/modules/markdown/test/markdownService.test.ts +++ b/src/backend/modules/markdown/test/markdownService.test.ts @@ -26,7 +26,7 @@ vi.mock('@metorial/cache', () => ({ }) })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name: string, factory: () => any) => ({ build: () => factory() diff --git a/src/backend/modules/organization/package.json b/src/backend/modules/organization/package.json index 6580140e9..d40f8687b 100644 --- a/src/backend/modules/organization/package.json +++ b/src/backend/modules/organization/package.json @@ -13,19 +13,19 @@ "@metorial/config": "^1.0.0", "@metorial/context": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/error": "^1.2.3", "@metorial/fabric": "^1.0.0", "@metorial/id": "^1.0.0", "@metorial/internal-clients": "^1.0.0", "@metorial/module-file": "^1.0.0", "@metorial/module-email": "^1.0.0", - "@lowerdeck/pagination": "^1.0.8", "@metorial/queue": "^1.0.0", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/canonicalize": "^1.0.4", "date-fns": "^4.1.0", - "react": "^19.1.0" + "react": "^19.1.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/canonicalize": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/organization/src/definitions/defaultScopes.ts b/src/backend/modules/organization/src/definitions/defaultScopes.ts index fc269c1f6..a37347398 100644 --- a/src/backend/modules/organization/src/definitions/defaultScopes.ts +++ b/src/backend/modules/organization/src/definitions/defaultScopes.ts @@ -1,5 +1,5 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; import { coreScopes, Scope } from '@metorial/module-access'; let adminOnlyScopes: Scope[] = [ diff --git a/src/backend/modules/organization/src/env.ts b/src/backend/modules/organization/src/env.ts index b50c97ae4..d1357c270 100644 --- a/src/backend/modules/organization/src/env.ts +++ b/src/backend/modules/organization/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/modules/organization/src/lib/accessControl.ts b/src/backend/modules/organization/src/lib/accessControl.ts index a47a6d98e..d371dc86a 100644 --- a/src/backend/modules/organization/src/lib/accessControl.ts +++ b/src/backend/modules/organization/src/lib/accessControl.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { scopeDefinitions } from '@metorial/module-access/src/definitions/scopeDefinitions'; import { Scope, scopes } from '@metorial/module-access/src/definitions/scopeValues'; diff --git a/src/backend/modules/organization/src/services/accessPolicy.ts b/src/backend/modules/organization/src/services/accessPolicy.ts index 9ec91985f..151e56048 100644 --- a/src/backend/modules/organization/src/services/accessPolicy.ts +++ b/src/backend/modules/organization/src/services/accessPolicy.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import { Context } from '@metorial/context'; import { AccessPolicy, diff --git a/src/backend/modules/organization/src/services/accessPolicyAssignment.ts b/src/backend/modules/organization/src/services/accessPolicyAssignment.ts index 9816874de..d04550923 100644 --- a/src/backend/modules/organization/src/services/accessPolicyAssignment.ts +++ b/src/backend/modules/organization/src/services/accessPolicyAssignment.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { AccessPolicy, diff --git a/src/backend/modules/organization/src/services/accessRole.ts b/src/backend/modules/organization/src/services/accessRole.ts index 694cb7e38..36123b021 100644 --- a/src/backend/modules/organization/src/services/accessRole.ts +++ b/src/backend/modules/organization/src/services/accessRole.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import { Context } from '@metorial/context'; import { AccessRole, diff --git a/src/backend/modules/organization/src/services/authBootstrap.ts b/src/backend/modules/organization/src/services/authBootstrap.ts index 834ab3e16..7b445011e 100644 --- a/src/backend/modules/organization/src/services/authBootstrap.ts +++ b/src/backend/modules/organization/src/services/authBootstrap.ts @@ -1,5 +1,5 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Service } from '@lowerdeck/service'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { Organization, diff --git a/src/backend/modules/organization/src/services/effectiveAccess.ts b/src/backend/modules/organization/src/services/effectiveAccess.ts index ebe854d31..319efd3dc 100644 --- a/src/backend/modules/organization/src/services/effectiveAccess.ts +++ b/src/backend/modules/organization/src/services/effectiveAccess.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { AccessPolicy, AccessPolicyAssignment, diff --git a/src/backend/modules/organization/src/services/instance.ts b/src/backend/modules/organization/src/services/instance.ts index 4211cec40..3b2973919 100644 --- a/src/backend/modules/organization/src/services/instance.ts +++ b/src/backend/modules/organization/src/services/instance.ts @@ -3,10 +3,10 @@ import { notFoundError, notImplementedError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import { Context } from '@metorial/context'; import { db, diff --git a/src/backend/modules/organization/src/services/organization.ts b/src/backend/modules/organization/src/services/organization.ts index 8a4ac6e06..e1166d2b1 100644 --- a/src/backend/modules/organization/src/services/organization.ts +++ b/src/backend/modules/organization/src/services/organization.ts @@ -1,13 +1,13 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; +import { canonicalize } from '@mtsrc/canonicalize'; import { forbiddenError, notFoundError, notImplementedError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import { Context } from '@metorial/context'; import { addAfterTransactionHook, diff --git a/src/backend/modules/organization/src/services/organizationActor.ts b/src/backend/modules/organization/src/services/organizationActor.ts index e64e48141..3ba1481f1 100644 --- a/src/backend/modules/organization/src/services/organizationActor.ts +++ b/src/backend/modules/organization/src/services/organizationActor.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { db, diff --git a/src/backend/modules/organization/src/services/organizationInvite.ts b/src/backend/modules/organization/src/services/organizationInvite.ts index f789fb42c..91f07a1de 100644 --- a/src/backend/modules/organization/src/services/organizationInvite.ts +++ b/src/backend/modules/organization/src/services/organizationInvite.ts @@ -1,6 +1,6 @@ -import { conflictError, forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { conflictError, forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { db, diff --git a/src/backend/modules/organization/src/services/organizationInviteJoin.ts b/src/backend/modules/organization/src/services/organizationInviteJoin.ts index 0792e900b..e196490b9 100644 --- a/src/backend/modules/organization/src/services/organizationInviteJoin.ts +++ b/src/backend/modules/organization/src/services/organizationInviteJoin.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { ID, User, withTransaction } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; diff --git a/src/backend/modules/organization/src/services/organizationMember.ts b/src/backend/modules/organization/src/services/organizationMember.ts index 3605e7aac..cca88bbe6 100644 --- a/src/backend/modules/organization/src/services/organizationMember.ts +++ b/src/backend/modules/organization/src/services/organizationMember.ts @@ -1,6 +1,6 @@ -import { conflictError, forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { conflictError, forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { addAfterTransactionHook, diff --git a/src/backend/modules/organization/src/services/project.ts b/src/backend/modules/organization/src/services/project.ts index 6a9d2be46..5de21d5bd 100644 --- a/src/backend/modules/organization/src/services/project.ts +++ b/src/backend/modules/organization/src/services/project.ts @@ -3,10 +3,10 @@ import { notFoundError, notImplementedError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import { Context } from '@metorial/context'; import { addAfterTransactionHook, diff --git a/src/backend/modules/organization/src/services/projectBrand.ts b/src/backend/modules/organization/src/services/projectBrand.ts index 80f5fc516..c5c934ee9 100644 --- a/src/backend/modules/organization/src/services/projectBrand.ts +++ b/src/backend/modules/organization/src/services/projectBrand.ts @@ -1,5 +1,5 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Service } from '@lowerdeck/service'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/backend/modules/organization/src/services/projectRetention.ts b/src/backend/modules/organization/src/services/projectRetention.ts index 489b72294..efdc4625c 100644 --- a/src/backend/modules/organization/src/services/projectRetention.ts +++ b/src/backend/modules/organization/src/services/projectRetention.ts @@ -1,5 +1,5 @@ -import { forbiddenError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { addAfterTransactionHook, diff --git a/src/backend/modules/organization/src/services/team.ts b/src/backend/modules/organization/src/services/team.ts index 22821ab2d..0136ec8e4 100644 --- a/src/backend/modules/organization/src/services/team.ts +++ b/src/backend/modules/organization/src/services/team.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import { Context } from '@metorial/context'; import { db, ID, Organization, OrganizationActor, Team, withTransaction } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; diff --git a/src/backend/modules/organization/test/accessPolicyAssignment.test.ts b/src/backend/modules/organization/test/accessPolicyAssignment.test.ts index 134ed78c4..e4cfbd17a 100644 --- a/src/backend/modules/organization/test/accessPolicyAssignment.test.ts +++ b/src/backend/modules/organization/test/accessPolicyAssignment.test.ts @@ -18,7 +18,7 @@ vi.mock('@metorial/db', () => ({ ) })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name, factory) => ({ build: () => factory() diff --git a/src/backend/modules/organization/test/instance.test.ts b/src/backend/modules/organization/test/instance.test.ts index 1d99cbef9..9ed8d2394 100644 --- a/src/backend/modules/organization/test/instance.test.ts +++ b/src/backend/modules/organization/test/instance.test.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; // Mock external dependencies @@ -35,13 +35,13 @@ vi.mock('@metorial/fabric', () => ({ } })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: vi.fn(fn => fn) } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name, factory) => ({ build: () => factory() @@ -49,7 +49,7 @@ vi.mock('@lowerdeck/service', () => ({ } })); -vi.mock('@lowerdeck/slugify', () => ({ +vi.mock('@mtsrc/slugify', () => ({ createSlugGenerator: vi.fn(() => vi.fn().mockResolvedValue('test-slug')) })); diff --git a/src/backend/modules/organization/test/organization.test.ts b/src/backend/modules/organization/test/organization.test.ts index 78652f6f0..6d84b35d8 100644 --- a/src/backend/modules/organization/test/organization.test.ts +++ b/src/backend/modules/organization/test/organization.test.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; // Mock external dependencies @@ -62,13 +62,13 @@ vi.mock('@metorial/fabric', () => ({ } })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: vi.fn(fn => fn) } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name, factory) => ({ build: () => factory() @@ -76,7 +76,7 @@ vi.mock('@lowerdeck/service', () => ({ } })); -vi.mock('@lowerdeck/slugify', () => ({ +vi.mock('@mtsrc/slugify', () => ({ createSlugGenerator: vi.fn(() => vi.fn().mockResolvedValue('test-org-slug')) })); diff --git a/src/backend/modules/organization/test/organizationActor.test.ts b/src/backend/modules/organization/test/organizationActor.test.ts index 0105d6c2e..2939776dc 100644 --- a/src/backend/modules/organization/test/organizationActor.test.ts +++ b/src/backend/modules/organization/test/organizationActor.test.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; // Mock external dependencies @@ -32,13 +32,13 @@ vi.mock('@metorial/fabric', () => ({ } })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: vi.fn(fn => fn) } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name, factory) => ({ build: () => factory() diff --git a/src/backend/modules/organization/test/organizationInvite.test.ts b/src/backend/modules/organization/test/organizationInvite.test.ts index 3df43ca7b..68932d2c5 100644 --- a/src/backend/modules/organization/test/organizationInvite.test.ts +++ b/src/backend/modules/organization/test/organizationInvite.test.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { addDays } from 'date-fns'; import { beforeEach, describe, expect, it, vi } from 'vitest'; @@ -39,13 +39,13 @@ vi.mock('@metorial/fabric', () => ({ } })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: vi.fn(fn => fn) } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name, factory) => ({ build: () => factory() diff --git a/src/backend/modules/organization/test/organizationInviteJoin.test.ts b/src/backend/modules/organization/test/organizationInviteJoin.test.ts index 370816422..d6746acd1 100644 --- a/src/backend/modules/organization/test/organizationInviteJoin.test.ts +++ b/src/backend/modules/organization/test/organizationInviteJoin.test.ts @@ -1,4 +1,4 @@ -import { ServiceError, notFoundError } from '@lowerdeck/error'; +import { ServiceError, notFoundError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; // Mock external dependencies @@ -40,7 +40,7 @@ vi.mock('@metorial/fabric', () => ({ } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name, factory) => ({ build: () => factory() diff --git a/src/backend/modules/organization/test/organizationMember.test.ts b/src/backend/modules/organization/test/organizationMember.test.ts index 2e8cba205..29e4ace04 100644 --- a/src/backend/modules/organization/test/organizationMember.test.ts +++ b/src/backend/modules/organization/test/organizationMember.test.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; // Mock external dependencies @@ -53,13 +53,13 @@ vi.mock('@metorial/module-consumer', () => ({ syncOrgMemberToConsumer: vi.fn() })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: vi.fn(fn => fn) } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name, factory) => ({ build: () => factory() diff --git a/src/backend/modules/organization/test/project.test.ts b/src/backend/modules/organization/test/project.test.ts index 8234fa2ad..0756ea666 100644 --- a/src/backend/modules/organization/test/project.test.ts +++ b/src/backend/modules/organization/test/project.test.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { beforeEach, describe, expect, it, vi } from 'vitest'; // Mock external dependencies @@ -47,13 +47,13 @@ vi.mock('@metorial/fabric', () => ({ } })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: vi.fn(fn => fn) } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name, factory) => ({ build: () => factory() @@ -61,7 +61,7 @@ vi.mock('@lowerdeck/service', () => ({ } })); -vi.mock('@lowerdeck/slugify', () => ({ +vi.mock('@mtsrc/slugify', () => ({ createSlugGenerator: vi.fn(() => vi.fn().mockResolvedValue('test-slug')) })); diff --git a/src/backend/modules/organization/test/projectRetention.test.ts b/src/backend/modules/organization/test/projectRetention.test.ts index b63e87971..8aa5ba39e 100644 --- a/src/backend/modules/organization/test/projectRetention.test.ts +++ b/src/backend/modules/organization/test/projectRetention.test.ts @@ -38,7 +38,7 @@ vi.mock('@metorial/fabric', () => ({ } })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((name, factory) => ({ build: () => factory() diff --git a/src/backend/modules/protect/package.json b/src/backend/modules/protect/package.json index 2e7324e24..4bfb52320 100644 --- a/src/backend/modules/protect/package.json +++ b/src/backend/modules/protect/package.json @@ -10,13 +10,13 @@ }, "dependencies": { "@metorial/queue": "1.0.0", - "@lowerdeck/error": "^1.2.3", "@metorial/module-organization": "1.0.0", - "@lowerdeck/service": "1.0.7", "@metorial/context": "1.0.0", "@metorial/db": "1.0.0", "@metorial/module-machine-access": "1.0.0", - "@metorial/module-user": "1.0.0" + "@metorial/module-user": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/service": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/protect/src/services/access.ts b/src/backend/modules/protect/src/services/access.ts index 40c34f3b0..efbc288a6 100644 --- a/src/backend/modules/protect/src/services/access.ts +++ b/src/backend/modules/protect/src/services/access.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { AccessLimiter, AccessLimiterTarget, diff --git a/src/backend/modules/search/package.json b/src/backend/modules/search/package.json index 58cbf1d13..123edab53 100644 --- a/src/backend/modules/search/package.json +++ b/src/backend/modules/search/package.json @@ -10,8 +10,8 @@ }, "dependencies": { "@metorial-platform-systems/voyager-client": "workspace:*", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/validation": "^1.0.10" + "@mtsrc/env": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/search/src/env.ts b/src/backend/modules/search/src/env.ts index b125d23bf..72c0471b9 100644 --- a/src/backend/modules/search/src/env.ts +++ b/src/backend/modules/search/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/modules/subspace/package.json b/src/backend/modules/subspace/package.json index b130df650..2b6d5d081 100644 --- a/src/backend/modules/subspace/package.json +++ b/src/backend/modules/subspace/package.json @@ -9,9 +9,6 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial-platform-systems/subspace-client": "^1.0.0", "@metorial/context": "1.0.0", "@metorial/db": "1.0.0", @@ -21,12 +18,15 @@ "@metorial/module-organization": "1.0.0", "@metorial/module-usage": "1.0.0", "@metorial/module-user": "1.0.0", - "@metorial/queue": "1.0.0" + "@metorial/queue": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { - "@lowerdeck/rpc-server": "^1.0.11", "@metorial/tsconfig": "^1.0.0", "typescript": "5.8.2", - "vitest": "^3.1.2" + "vitest": "^3.1.2", + "@mtsrc/rpc-server": "1.0.0" } } \ No newline at end of file diff --git a/src/backend/modules/subspace/src/env.ts b/src/backend/modules/subspace/src/env.ts index 6da91ee3c..de685dc03 100644 --- a/src/backend/modules/subspace/src/env.ts +++ b/src/backend/modules/subspace/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ subspace: { diff --git a/src/backend/modules/subspace/src/lib/subspaceService.ts b/src/backend/modules/subspace/src/lib/subspaceService.ts index 03d29f295..1c4f86b68 100644 --- a/src/backend/modules/subspace/src/lib/subspaceService.ts +++ b/src/backend/modules/subspace/src/lib/subspaceService.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { Consumer, type Instance, type OrganizationActor } from '@metorial/db'; import type { ProviderEventBase } from '@metorial/fabric'; import { ensureSubspaceConsumerActor } from '@metorial/internal-clients'; diff --git a/src/backend/modules/subspace/src/proxy/index.ts b/src/backend/modules/subspace/src/proxy/index.ts index 783f188f1..206efc1dc 100644 --- a/src/backend/modules/subspace/src/proxy/index.ts +++ b/src/backend/modules/subspace/src/proxy/index.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import type { Instance } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; import { usageService } from '@metorial/module-usage'; diff --git a/src/backend/modules/subspace/src/services/identity.ts b/src/backend/modules/subspace/src/services/identity.ts index 8ea3873fe..cadf4e0e1 100644 --- a/src/backend/modules/subspace/src/services/identity.ts +++ b/src/backend/modules/subspace/src/services/identity.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; import { db } from '@metorial/db'; import { usageService } from '@metorial/module-usage'; import { createSubspaceService, toEventBase } from '../lib/subspaceService'; diff --git a/src/backend/modules/subspace/src/services/identityActor.ts b/src/backend/modules/subspace/src/services/identityActor.ts index ca0f6ddaa..43735f349 100644 --- a/src/backend/modules/subspace/src/services/identityActor.ts +++ b/src/backend/modules/subspace/src/services/identityActor.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; import { Consumer, ConsumerProfile, diff --git a/src/backend/modules/subspace/src/services/identityDelegation.ts b/src/backend/modules/subspace/src/services/identityDelegation.ts index b5b16dd3f..633fb67e1 100644 --- a/src/backend/modules/subspace/src/services/identityDelegation.ts +++ b/src/backend/modules/subspace/src/services/identityDelegation.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import { usageService } from '@metorial/module-usage'; import { createSubspaceService, toEventBase } from '../lib/subspaceService'; import { subspace } from '../subspace'; diff --git a/src/backend/modules/subspace/src/services/identityDelegationRequest.ts b/src/backend/modules/subspace/src/services/identityDelegationRequest.ts index 8a4e9e8ce..bcbe05ea0 100644 --- a/src/backend/modules/subspace/src/services/identityDelegationRequest.ts +++ b/src/backend/modules/subspace/src/services/identityDelegationRequest.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import { usageService } from '@metorial/module-usage'; import { createSubspaceService, toEventBase } from '../lib/subspaceService'; import { subspace } from '../subspace'; diff --git a/src/backend/modules/subspace/src/services/providerAuthExport.ts b/src/backend/modules/subspace/src/services/providerAuthExport.ts index 01ff3057e..b372343b8 100644 --- a/src/backend/modules/subspace/src/services/providerAuthExport.ts +++ b/src/backend/modules/subspace/src/services/providerAuthExport.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import { Fabric } from '@metorial/fabric'; import { usageService } from '@metorial/module-usage'; import { createSubspaceService, toEventBase } from '../lib/subspaceService'; diff --git a/src/backend/modules/subspace/src/services/providerAuthImport.ts b/src/backend/modules/subspace/src/services/providerAuthImport.ts index 67895962a..6a84cfdfe 100644 --- a/src/backend/modules/subspace/src/services/providerAuthImport.ts +++ b/src/backend/modules/subspace/src/services/providerAuthImport.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import { Fabric } from '@metorial/fabric'; import { usageService } from '@metorial/module-usage'; import { createSubspaceService, toEventBase } from '../lib/subspaceService'; diff --git a/src/backend/modules/subspace/src/services/providerConfig.ts b/src/backend/modules/subspace/src/services/providerConfig.ts index cf2f614d7..e5a8bc1ba 100644 --- a/src/backend/modules/subspace/src/services/providerConfig.ts +++ b/src/backend/modules/subspace/src/services/providerConfig.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import { Fabric } from '@metorial/fabric'; import { usageService } from '@metorial/module-usage'; import { resolveConsumerActorIds } from '../lib/resolveConsumerActors'; diff --git a/src/backend/modules/subspace/src/services/providerInvocation.ts b/src/backend/modules/subspace/src/services/providerInvocation.ts index 536b109b1..3f9e847f6 100644 --- a/src/backend/modules/subspace/src/services/providerInvocation.ts +++ b/src/backend/modules/subspace/src/services/providerInvocation.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import type { Instance } from '@metorial/db'; import { getTenantForSubspace, subspace } from '../subspace'; diff --git a/src/backend/modules/subspace/src/services/providerSetupSession.ts b/src/backend/modules/subspace/src/services/providerSetupSession.ts index 69d94a01e..ede072200 100644 --- a/src/backend/modules/subspace/src/services/providerSetupSession.ts +++ b/src/backend/modules/subspace/src/services/providerSetupSession.ts @@ -1,4 +1,4 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; import { db } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; import { createSubspaceService, toEventBase } from '../lib/subspaceService'; diff --git a/src/backend/modules/subspace/src/services/session.ts b/src/backend/modules/subspace/src/services/session.ts index 558893e98..e98d23456 100644 --- a/src/backend/modules/subspace/src/services/session.ts +++ b/src/backend/modules/subspace/src/services/session.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; import { db, Instance, MagicMcpServer, Prisma } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; import { sessionClientSecretReferenceService } from '@metorial/module-access'; diff --git a/src/backend/modules/subspace/src/services/sessionProvider.ts b/src/backend/modules/subspace/src/services/sessionProvider.ts index 9ee24e2a4..d02493e2f 100644 --- a/src/backend/modules/subspace/src/services/sessionProvider.ts +++ b/src/backend/modules/subspace/src/services/sessionProvider.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import { Fabric } from '@metorial/fabric'; import { usageService } from '@metorial/module-usage'; import { narrowSessionIdFilter } from '../lib/fineGrainedSessionFilter'; diff --git a/src/backend/modules/subspace/src/services/sessionTemplate.ts b/src/backend/modules/subspace/src/services/sessionTemplate.ts index 9e6a1e56e..3478a9ff6 100644 --- a/src/backend/modules/subspace/src/services/sessionTemplate.ts +++ b/src/backend/modules/subspace/src/services/sessionTemplate.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { db } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; import { createSubspaceService, toEventBase } from '../lib/subspaceService'; diff --git a/src/backend/modules/subspace/src/services/skill.ts b/src/backend/modules/subspace/src/services/skill.ts index 555a6979e..149a863c3 100644 --- a/src/backend/modules/subspace/src/services/skill.ts +++ b/src/backend/modules/subspace/src/services/skill.ts @@ -1,4 +1,4 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; +import { canonicalize } from '@mtsrc/canonicalize'; import { Consumer, ConsumerGroup, diff --git a/src/backend/modules/usage/package.json b/src/backend/modules/usage/package.json index ad1c30129..2f1c10bfb 100644 --- a/src/backend/modules/usage/package.json +++ b/src/backend/modules/usage/package.json @@ -11,17 +11,17 @@ "dependencies": { "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", "@metorial/fabric": "^1.0.0", "@metorial/id": "^1.0.0", "@metorial/queue": "^1.0.0", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/validation": "^1.0.10", - "@lowerdeck/service": "^1.0.7", "date-fns": "^4.1.0", - "mongoose": "^8.14.2" + "mongoose": "^8.14.2", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@mtsrc/service": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/usage/src/db.ts b/src/backend/modules/usage/src/db.ts index 692002956..84977c015 100644 --- a/src/backend/modules/usage/src/db.ts +++ b/src/backend/modules/usage/src/db.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { getSentry } from '@lowerdeck/sentry'; +import { delay } from '@mtsrc/delay'; +import { getSentry } from '@mtsrc/sentry'; import { endOfDay, endOfHour, startOfDay, startOfHour } from 'date-fns'; import mongoose from 'mongoose'; import { env } from './env'; diff --git a/src/backend/modules/usage/src/env.ts b/src/backend/modules/usage/src/env.ts index 859f1d8bf..a7a032410 100644 --- a/src/backend/modules/usage/src/env.ts +++ b/src/backend/modules/usage/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ db: { diff --git a/src/backend/modules/usage/src/services/usage.ts b/src/backend/modules/usage/src/services/usage.ts index 5b344b96a..beda2484e 100644 --- a/src/backend/modules/usage/src/services/usage.ts +++ b/src/backend/modules/usage/src/services/usage.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { getUsageTimeline, ingestUsage } from '../db'; class UsageServiceImpl { diff --git a/src/backend/modules/usage/test/db.test.ts b/src/backend/modules/usage/test/db.test.ts index afe442ae9..27d3709e4 100644 --- a/src/backend/modules/usage/test/db.test.ts +++ b/src/backend/modules/usage/test/db.test.ts @@ -4,11 +4,11 @@ import type { UsageRecord } from '../src/db'; // Mock dependencies import { vi } from 'vitest'; -vi.mock('@lowerdeck/delay', () => ({ +vi.mock('@mtsrc/delay', () => ({ delay: vi.fn().mockResolvedValue(undefined) })); -vi.mock('@lowerdeck/sentry', () => ({ +vi.mock('@mtsrc/sentry', () => ({ getSentry: vi.fn(() => ({ captureException: vi.fn() })) diff --git a/src/backend/modules/usage/test/index.test.ts b/src/backend/modules/usage/test/index.test.ts index e2e57e3d9..cce698305 100644 --- a/src/backend/modules/usage/test/index.test.ts +++ b/src/backend/modules/usage/test/index.test.ts @@ -5,11 +5,11 @@ vi.mock('@metorial/queue', () => ({ combineQueueProcessors: vi.fn(processors => processors) })); -vi.mock('@lowerdeck/delay', () => ({ +vi.mock('@mtsrc/delay', () => ({ delay: vi.fn().mockResolvedValue(undefined) })); -vi.mock('@lowerdeck/sentry', () => ({ +vi.mock('@mtsrc/sentry', () => ({ getSentry: vi.fn(() => ({ captureException: vi.fn() })) diff --git a/src/backend/modules/user/package.json b/src/backend/modules/user/package.json index f72d91d53..3e3967757 100644 --- a/src/backend/modules/user/package.json +++ b/src/backend/modules/user/package.json @@ -12,13 +12,13 @@ "@metorial/context": "^1.0.0", "@metorial/cron": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", "@metorial/id": "^1.0.0", "@metorial/module-file": "^1.0.0", "@metorial/queue": "^1.0.0", - "@lowerdeck/service": "^1.0.7", - "@metorial/fabric": "^1.0.0" + "@metorial/fabric": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/service": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/modules/user/src/services/user.ts b/src/backend/modules/user/src/services/user.ts index cafb07b43..8484edcfb 100644 --- a/src/backend/modules/user/src/services/user.ts +++ b/src/backend/modules/user/src/services/user.ts @@ -1,12 +1,12 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; +import { canonicalize } from '@mtsrc/canonicalize'; import { conflictError, forbiddenError, notFoundError, notImplementedError, ServiceError -} from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { db, ID, User, withTransaction } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; diff --git a/src/backend/modules/user/src/services/userAuth.ts b/src/backend/modules/user/src/services/userAuth.ts index 8e5397af6..e34491d18 100644 --- a/src/backend/modules/user/src/services/userAuth.ts +++ b/src/backend/modules/user/src/services/userAuth.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { User, UserSession, withTransaction } from '@metorial/db'; import { userService } from './user'; diff --git a/src/backend/modules/user/src/services/userSession.ts b/src/backend/modules/user/src/services/userSession.ts index d2d6363ac..e6c9c6517 100644 --- a/src/backend/modules/user/src/services/userSession.ts +++ b/src/backend/modules/user/src/services/userSession.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { Context } from '@metorial/context'; import { db, ID, User, UserSession, withTransaction } from '@metorial/db'; import { Fabric } from '@metorial/fabric'; diff --git a/src/backend/modules/user/test/index.test.ts b/src/backend/modules/user/test/index.test.ts index dac0f94ec..730b00613 100644 --- a/src/backend/modules/user/test/index.test.ts +++ b/src/backend/modules/user/test/index.test.ts @@ -37,7 +37,7 @@ vi.mock('@metorial/fabric', () => ({ } })); -vi.mock('@lowerdeck/error', () => ({ +vi.mock('@mtsrc/error', () => ({ conflictError: vi.fn(), forbiddenError: vi.fn(), notFoundError: vi.fn(), @@ -47,7 +47,7 @@ vi.mock('@lowerdeck/error', () => ({ ServiceError: class ServiceError extends Error {} })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn(() => ({ build: vi.fn(() => ({})) diff --git a/src/backend/modules/user/test/user.test.ts b/src/backend/modules/user/test/user.test.ts index f0d465506..34e4185dd 100644 --- a/src/backend/modules/user/test/user.test.ts +++ b/src/backend/modules/user/test/user.test.ts @@ -38,7 +38,7 @@ vi.mock('@metorial/fabric', () => ({ } })); -vi.mock('@lowerdeck/error', () => ({ +vi.mock('@mtsrc/error', () => ({ conflictError: vi.fn(opts => ({ type: 'conflict', ...opts })), forbiddenError: vi.fn(opts => ({ type: 'forbidden', ...opts })), notFoundError: vi.fn(id => ({ type: 'not_found', id })), diff --git a/src/backend/modules/user/test/userAuth.test.ts b/src/backend/modules/user/test/userAuth.test.ts index 193370de2..76fdf97da 100644 --- a/src/backend/modules/user/test/userAuth.test.ts +++ b/src/backend/modules/user/test/userAuth.test.ts @@ -19,7 +19,7 @@ vi.mock('@metorial/db', () => ({ ) })); -vi.mock('@lowerdeck/error', () => ({ +vi.mock('@mtsrc/error', () => ({ badRequestError: vi.fn(opts => ({ type: 'bad_request', ...opts })), unauthorizedError: vi.fn(opts => ({ type: 'unauthorized', ...opts })), ServiceError: class ServiceError extends Error { diff --git a/src/backend/multi-region/package.json b/src/backend/multi-region/package.json index c6757d2e6..a3b724e59 100644 --- a/src/backend/multi-region/package.json +++ b/src/backend/multi-region/package.json @@ -12,14 +12,6 @@ }, "dependencies": { "@aws-sdk/rds-signer": "^3.1018.0", - "@lowerdeck/base62": "^1.0.4", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/shadow-id": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial/cache": "^1.0.0", "@metorial/context": "^1.0.0", "@metorial/cron": "^1.0.0", @@ -33,7 +25,15 @@ "prisma": "^7.4.1", "prisma-json-types-generator": "^4.1.1", "stripe": "^18.5.0", - "typescript": "^5.8.3" + "typescript": "^5.8.3", + "@mtsrc/base62": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/backend/multi-region/src/env.ts b/src/backend/multi-region/src/env.ts index f286f5b44..bf5061bed 100644 --- a/src/backend/multi-region/src/env.ts +++ b/src/backend/multi-region/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/backend/multi-region/src/repositories/oauth.ts b/src/backend/multi-region/src/repositories/oauth.ts index 5c68e9c3f..9ecffa179 100644 --- a/src/backend/multi-region/src/repositories/oauth.ts +++ b/src/backend/multi-region/src/repositories/oauth.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { User } from '@metorial/db'; import { cell } from '../cell'; import { globalDB, Prisma } from '../db'; diff --git a/src/backend/multi-region/src/repositories/oauthJwk.ts b/src/backend/multi-region/src/repositories/oauthJwk.ts index 55a6bf147..fab514891 100644 --- a/src/backend/multi-region/src/repositories/oauthJwk.ts +++ b/src/backend/multi-region/src/repositories/oauthJwk.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { generateCustomId } from '@metorial/id'; import { cell } from '../cell'; import { globalDB, OAuthJwkStatus, Prisma } from '../db'; diff --git a/src/backend/multi-region/src/sync/fromDeployment/index.ts b/src/backend/multi-region/src/sync/fromDeployment/index.ts index de55616db..002bb5702 100644 --- a/src/backend/multi-region/src/sync/fromDeployment/index.ts +++ b/src/backend/multi-region/src/sync/fromDeployment/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { syncConsumerSurfacesCron, syncConsumerSurfaceSingleQueueProcessor, diff --git a/src/backend/multi-region/src/sync/toDeployment/index.ts b/src/backend/multi-region/src/sync/toDeployment/index.ts index 12d54b063..4ee1de806 100644 --- a/src/backend/multi-region/src/sync/toDeployment/index.ts +++ b/src/backend/multi-region/src/sync/toDeployment/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { syncConsumerSurfaceToDeploymentQueueProcessor } from './consumerSurface'; import { syncOAuthAppToDeploymentQueueProcessor } from './oauth'; import { syncOrganizationToDeploymentQueueProcessor } from './organization'; diff --git a/src/frontend/apps/dashboard/package.json b/src/frontend/apps/dashboard/package.json index 259510f76..2cfafbc03 100644 --- a/src/frontend/apps/dashboard/package.json +++ b/src/frontend/apps/dashboard/package.json @@ -10,11 +10,6 @@ }, "dependencies": { "@floating-ui/react": "^0.27.16", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/case": "^1.0.9", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/sentry": "^1.0.2", "@metorial/chart": "^1.0.0", "@metorial/code-editor": "^1.0.0", "@metorial/dashboard-sdk": "1.0.0-internal", @@ -74,7 +69,12 @@ "react-use": "^17.5.1", "remark-gfm": "^4.0.1", "styled-components": "^6.1.13", - "tiptap-markdown": "^0.9.0" + "tiptap-markdown": "^0.9.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/case": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/sentry": "1.0.0" }, "devDependencies": { "vite-plugin-html": "^3.2.2", diff --git a/src/frontend/apps/dashboard/src/components/table/components/index.tsx b/src/frontend/apps/dashboard/src/components/table/components/index.tsx index 853ceb1dd..556be4606 100644 --- a/src/frontend/apps/dashboard/src/components/table/components/index.tsx +++ b/src/frontend/apps/dashboard/src/components/table/components/index.tsx @@ -1,5 +1,5 @@ import { usePaginationSearchParamsEnabled } from '@metorial/data-hooks'; -import { memo } from '@lowerdeck/memo'; +import { memo } from '@mtsrc/memo'; import { Button, CenteredSpinner, diff --git a/src/frontend/apps/dashboard/src/components/table/type.ts b/src/frontend/apps/dashboard/src/components/table/type.ts index 09f07bebe..92b0943d5 100644 --- a/src/frontend/apps/dashboard/src/components/table/type.ts +++ b/src/frontend/apps/dashboard/src/components/table/type.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { FilterPayload } from './filter'; export type TableColumn = { diff --git a/src/frontend/apps/dashboard/src/slices/product/scenes/apiKeys/index.tsx b/src/frontend/apps/dashboard/src/slices/product/scenes/apiKeys/index.tsx index 2342feb27..893c0ef51 100644 --- a/src/frontend/apps/dashboard/src/slices/product/scenes/apiKeys/index.tsx +++ b/src/frontend/apps/dashboard/src/slices/product/scenes/apiKeys/index.tsx @@ -1,4 +1,4 @@ -import { capitalize } from '@lowerdeck/case'; +import { capitalize } from '@mtsrc/case'; import { ApiKeysCreateBody, ApiKeysGetOutput, diff --git a/src/frontend/apps/dashboard/src/slices/product/scenes/form/form.ts b/src/frontend/apps/dashboard/src/slices/product/scenes/form/form.ts index ded08136c..59d60f368 100644 --- a/src/frontend/apps/dashboard/src/slices/product/scenes/form/form.ts +++ b/src/frontend/apps/dashboard/src/slices/product/scenes/form/form.ts @@ -1,4 +1,4 @@ -import { ValidationType } from '@lowerdeck/validation'; +import { ValidationType } from '@mtsrc/validation'; import { useForm } from '@metorial/data-hooks'; import { FormikConfig } from 'formik'; import React from 'react'; diff --git a/src/frontend/apps/dashboard/src/slices/product/scenes/mcpConnectionInstructions/connectionTypes.ts b/src/frontend/apps/dashboard/src/slices/product/scenes/mcpConnectionInstructions/connectionTypes.ts index 44feab5bb..24dd1cd3b 100644 --- a/src/frontend/apps/dashboard/src/slices/product/scenes/mcpConnectionInstructions/connectionTypes.ts +++ b/src/frontend/apps/dashboard/src/slices/product/scenes/mcpConnectionInstructions/connectionTypes.ts @@ -1,4 +1,4 @@ -import { slugify } from '@lowerdeck/slugify'; +import { slugify } from '@mtsrc/slugify'; type ConnectionTarget = { name?: string | null; diff --git a/src/frontend/config/package.json b/src/frontend/config/package.json index 4e3623b43..336800b99 100644 --- a/src/frontend/config/package.json +++ b/src/frontend/config/package.json @@ -10,10 +10,10 @@ }, "dependencies": {}, "devDependencies": { - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/join-paths": "^1.0.4", "@metorial/tsconfig": "^1.0.0", "typescript": "5.8.2", - "vitest": "^3.1.2" + "vitest": "^3.1.2", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/join-paths": "1.0.0" } } \ No newline at end of file diff --git a/src/frontend/config/src/index.ts b/src/frontend/config/src/index.ts index aef5f8ab2..132e836c7 100644 --- a/src/frontend/config/src/index.ts +++ b/src/frontend/config/src/index.ts @@ -1,4 +1,4 @@ -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { defaultConfig, FrontendConfig, RequiredFrontendConfig } from './type'; let configRef: { current: FrontendConfig | null } = { current: null }; diff --git a/src/frontend/config/src/paths.ts b/src/frontend/config/src/paths.ts index 2f8e4a343..2ac0c8f20 100644 --- a/src/frontend/config/src/paths.ts +++ b/src/frontend/config/src/paths.ts @@ -1,4 +1,4 @@ -import { joinPaths } from '@lowerdeck/join-paths'; +import { joinPaths } from '@mtsrc/join-paths'; export type EntityParam = { slug: string } | null | undefined; export type SubPages = (string | null | undefined | object)[]; diff --git a/src/frontend/state/package.json b/src/frontend/state/package.json index 8afcf07a1..aee150297 100644 --- a/src/frontend/state/package.json +++ b/src/frontend/state/package.json @@ -14,13 +14,13 @@ "@metorial/frontend-config": "^1.0.0", "@metorial/data-hooks": "^1.0.0", "@metorial-platform-systems/synthesis-client": "1.0.0", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/sentry": "^1.0.2", "@metorial/generated": "latest", "@metorial/storage": "^1.0.0", "react": "^19.1.0", - "react-router-dom": "^6.26.1" + "react-router-dom": "^6.26.1", + "@mtsrc/error": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/sentry": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/frontend/state/src/deployment/loaders/providerSetupSessions.ts b/src/frontend/state/src/deployment/loaders/providerSetupSessions.ts index 9728d44e3..397e548f2 100644 --- a/src/frontend/state/src/deployment/loaders/providerSetupSessions.ts +++ b/src/frontend/state/src/deployment/loaders/providerSetupSessions.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { DashboardInstanceProviderDeploymentsSetupSessionsCreateBody, DashboardInstanceProviderDeploymentsSetupSessionsGetOutput diff --git a/src/frontend/state/src/lib/mutation.ts b/src/frontend/state/src/lib/mutation.ts index 0ae14d5e6..7527cab06 100644 --- a/src/frontend/state/src/lib/mutation.ts +++ b/src/frontend/state/src/lib/mutation.ts @@ -1,4 +1,4 @@ -import { isServiceError } from '@lowerdeck/error'; +import { isServiceError } from '@mtsrc/error'; import { toast } from 'sonner'; export let mutation = async (cb: () => Promise) => { diff --git a/src/frontend/state/src/skills/loaders/skillExports.ts b/src/frontend/state/src/skills/loaders/skillExports.ts index df08ec1b8..26ce8d1e9 100644 --- a/src/frontend/state/src/skills/loaders/skillExports.ts +++ b/src/frontend/state/src/skills/loaders/skillExports.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import type { DashboardInstanceSkillsExportsCreateBody, DashboardInstanceSkillsExportsGetOutput diff --git a/src/frontend/state/src/user/auth/withAuth.ts b/src/frontend/state/src/user/auth/withAuth.ts index bcc5722b1..615c1d7c6 100644 --- a/src/frontend/state/src/user/auth/withAuth.ts +++ b/src/frontend/state/src/user/auth/withAuth.ts @@ -1,7 +1,7 @@ -import { delay } from '@lowerdeck/delay'; -import { isServiceError } from '@lowerdeck/error'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; -import { getSentry } from '@lowerdeck/sentry'; +import { delay } from '@mtsrc/delay'; +import { isServiceError } from '@mtsrc/error'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; +import { getSentry } from '@mtsrc/sentry'; import { MetorialDashboardSDK, MetorialUser } from '@metorial/dashboard-sdk'; import { isMetorialSDKError } from '@metorial/util-endpoint'; import { withDashboardSDK } from '../../sdk'; diff --git a/src/packages/backend/cache/package.json b/src/packages/backend/cache/package.json index d4e1c360a..795f2d852 100644 --- a/src/packages/backend/cache/package.json +++ b/src/packages/backend/cache/package.json @@ -9,7 +9,7 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/cache": "^1.0.2" + "@mtsrc/cache": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/backend/cache/src/index.ts b/src/packages/backend/cache/src/index.ts index 750dd810e..8b067122e 100644 --- a/src/packages/backend/cache/src/index.ts +++ b/src/packages/backend/cache/src/index.ts @@ -1,7 +1,7 @@ import { createCachedFunction as innerCreateCachedFunction, createLocallyCachedFunction as innerCreateLocallyCachedFunction -} from '@lowerdeck/cache'; +} from '@mtsrc/cache'; import { getConfig } from '@metorial/config'; export let createCachedFunction = (opts: { diff --git a/src/packages/backend/consumer-auth/package.json b/src/packages/backend/consumer-auth/package.json index c4716ae91..89f1078a0 100644 --- a/src/packages/backend/consumer-auth/package.json +++ b/src/packages/backend/consumer-auth/package.json @@ -9,11 +9,11 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/error": "1.2.3", - "@lowerdeck/tokens": "^1.0.5", "@metorial-platform-systems/ares-client": "^1.0.0", "@metorial/config": "1.0.0", - "@metorial/db": "1.0.0" + "@metorial/db": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/tokens": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/backend/consumer-auth/src/index.ts b/src/packages/backend/consumer-auth/src/index.ts index 47010be50..524d11472 100644 --- a/src/packages/backend/consumer-auth/src/index.ts +++ b/src/packages/backend/consumer-auth/src/index.ts @@ -1,5 +1,5 @@ -import { preconditionFailedError, ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Tokens } from '@lowerdeck/tokens'; +import { preconditionFailedError, ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Tokens } from '@mtsrc/tokens'; import { createAresInternalClient } from '@metorial-platform-systems/ares-client'; import { getConfig } from '@metorial/config'; import { diff --git a/src/packages/backend/cron/package.json b/src/packages/backend/cron/package.json index ce8fd7941..62cfc513a 100644 --- a/src/packages/backend/cron/package.json +++ b/src/packages/backend/cron/package.json @@ -9,8 +9,8 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@metorial/queue": "^1.0.0" + "@metorial/queue": "^1.0.0", + "@mtsrc/cron": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/backend/cron/src/index.ts b/src/packages/backend/cron/src/index.ts index 17922f402..de2dea3bb 100644 --- a/src/packages/backend/cron/src/index.ts +++ b/src/packages/backend/cron/src/index.ts @@ -1,4 +1,4 @@ -import { createCron as innerCreateCron } from '@lowerdeck/cron'; +import { createCron as innerCreateCron } from '@mtsrc/cron'; import { getConfig } from '@metorial/config'; import { IQueueProcessor } from '@metorial/queue'; diff --git a/src/packages/backend/event/package.json b/src/packages/backend/event/package.json index a99bc9886..dcb5f7841 100644 --- a/src/packages/backend/event/package.json +++ b/src/packages/backend/event/package.json @@ -10,8 +10,8 @@ }, "dependencies": { "p-queue": "^8.0.1", - "@lowerdeck/memo": "^1.0.4", - "@metorial/redis": "^1.0.0" + "@metorial/redis": "^1.0.0", + "@mtsrc/memo": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/backend/event/src/eventObject.ts b/src/packages/backend/event/src/eventObject.ts index 4e9879ff1..e9ae6ef4f 100644 --- a/src/packages/backend/event/src/eventObject.ts +++ b/src/packages/backend/event/src/eventObject.ts @@ -1,5 +1,5 @@ -import { memo } from '@lowerdeck/memo'; -import { getSentry } from '@lowerdeck/sentry'; +import { memo } from '@mtsrc/memo'; +import { getSentry } from '@mtsrc/sentry'; import { getConfig } from '@metorial/config'; import { RedisStreams } from '@metorial/redis'; import PQueue from 'p-queue'; diff --git a/src/packages/backend/fabric/package.json b/src/packages/backend/fabric/package.json index 64a8004c1..cb6c19486 100644 --- a/src/packages/backend/fabric/package.json +++ b/src/packages/backend/fabric/package.json @@ -11,7 +11,7 @@ "dependencies": { "@metorial/context": "^1.0.0", "@metorial/db": "^1.0.0", - "@lowerdeck/emitter": "^1.0.4" + "@mtsrc/emitter": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/backend/lock/package.json b/src/packages/backend/lock/package.json index 6c44fe2c8..edc96eb54 100644 --- a/src/packages/backend/lock/package.json +++ b/src/packages/backend/lock/package.json @@ -9,10 +9,10 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/lock": "^1.0.6", "@metorial/redis": "^1.0.0", "@types/bun": "^1.2.11", - "superjson": "^2.2.5" + "superjson": "^2.2.5", + "@mtsrc/lock": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/backend/lock/src/index.ts b/src/packages/backend/lock/src/index.ts index 78dd8c109..318a3998f 100644 --- a/src/packages/backend/lock/src/index.ts +++ b/src/packages/backend/lock/src/index.ts @@ -1,4 +1,4 @@ -import { createLock as rootCreateLock } from '@lowerdeck/lock'; +import { createLock as rootCreateLock } from '@mtsrc/lock'; import { getConfig } from '@metorial/config'; export let createLock = ({ name }: { name: string }) => { diff --git a/src/packages/backend/queue/package.json b/src/packages/backend/queue/package.json index 25196b421..6c4d6431a 100644 --- a/src/packages/backend/queue/package.json +++ b/src/packages/backend/queue/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@metorial/config": "^1.0.0", - "@lowerdeck/queue": "^1.0.11" + "@mtsrc/queue": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/backend/queue/src/index.ts b/src/packages/backend/queue/src/index.ts index 43cb3c716..0cd81ce07 100644 --- a/src/packages/backend/queue/src/index.ts +++ b/src/packages/backend/queue/src/index.ts @@ -1,4 +1,4 @@ -import { createQueue as innerCreateQueue } from '@lowerdeck/queue'; +import { createQueue as innerCreateQueue } from '@mtsrc/queue'; import { getConfig } from '@metorial/config'; import type { JobsOptions, QueueOptions, WorkerOptions } from 'bullmq'; @@ -24,4 +24,4 @@ export { runQueueProcessors, type IQueue, type IQueueProcessor -} from '@lowerdeck/queue'; +} from '@mtsrc/queue'; diff --git a/src/packages/backend/redis/package.json b/src/packages/backend/redis/package.json index 0ebc5b766..c9ed72612 100644 --- a/src/packages/backend/redis/package.json +++ b/src/packages/backend/redis/package.json @@ -14,12 +14,12 @@ "nanoid": "^5.0.7", "p-queue": "^8.0.1", "redis": "^5.6.0", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/random-number": "^1.0.4", "@metorial/config": "^1.0.0", - "@metorial/id": "^1.0.0" + "@metorial/id": "^1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/random-number": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/backend/redis/src/redis.ts b/src/packages/backend/redis/src/redis.ts index c5a98d6b5..30635315f 100644 --- a/src/packages/backend/redis/src/redis.ts +++ b/src/packages/backend/redis/src/redis.ts @@ -1,5 +1,5 @@ -import { memo } from '@lowerdeck/memo'; -import { getSentry } from '@lowerdeck/sentry'; +import { memo } from '@mtsrc/memo'; +import { getSentry } from '@mtsrc/sentry'; import { getConfig } from '@metorial/config'; import { createClient, RedisClientOptions } from 'redis'; import { parseRedisUrl } from './utils/parseRedisUrl'; diff --git a/src/packages/backend/redis/src/redisStreams.ts b/src/packages/backend/redis/src/redisStreams.ts index 65c767d2e..b14c55f21 100644 --- a/src/packages/backend/redis/src/redisStreams.ts +++ b/src/packages/backend/redis/src/redisStreams.ts @@ -1,6 +1,6 @@ -import { randomNumber } from '@lowerdeck/random-number'; -import { getSentry } from '@lowerdeck/sentry'; -import { serialize } from '@lowerdeck/serialize'; +import { randomNumber } from '@mtsrc/random-number'; +import { getSentry } from '@mtsrc/sentry'; +import { serialize } from '@mtsrc/serialize'; import { getConfig } from '@metorial/config'; import { generateCustomId } from '@metorial/id'; import Redis from 'ioredis'; diff --git a/src/packages/backend/rpc/package.json b/src/packages/backend/rpc/package.json index 67a981fa2..2e6af465e 100644 --- a/src/packages/backend/rpc/package.json +++ b/src/packages/backend/rpc/package.json @@ -9,16 +9,16 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", "@metorial/id": "^1.0.0", - "@lowerdeck/memo": "^1.0.4", - "@lowerdeck/proxy": "^1.0.4", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/validation": "^1.0.10", "@sentry/core": "^8.22.0", - "cookie": "^1.0.2" + "cookie": "^1.0.2", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/memo": "1.0.0", + "@mtsrc/proxy": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/backend/rpc/src/client/request.ts b/src/packages/backend/rpc/src/client/request.ts index c3b6493dc..b18c36474 100644 --- a/src/packages/backend/rpc/src/client/request.ts +++ b/src/packages/backend/rpc/src/client/request.ts @@ -1,7 +1,7 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { internalServerError, isServiceError, ServiceError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; -import { serialize } from '@lowerdeck/serialize'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { internalServerError, isServiceError, ServiceError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; +import { serialize } from '@mtsrc/serialize'; import { Call, generateRequestId, Requester } from './shared/requester'; let Sentry = getSentry(); diff --git a/src/packages/backend/rpc/src/client/shared/clientBuilder.ts b/src/packages/backend/rpc/src/client/shared/clientBuilder.ts index ec387606a..c706baa01 100644 --- a/src/packages/backend/rpc/src/client/shared/clientBuilder.ts +++ b/src/packages/backend/rpc/src/client/shared/clientBuilder.ts @@ -1,4 +1,4 @@ -import { proxy } from '@lowerdeck/proxy'; +import { proxy } from '@mtsrc/proxy'; import { Requester } from './requester'; export interface ClientOpts { diff --git a/src/packages/backend/rpc/src/client/shared/requester.ts b/src/packages/backend/rpc/src/client/shared/requester.ts index a11dc54b1..abafb6774 100644 --- a/src/packages/backend/rpc/src/client/shared/requester.ts +++ b/src/packages/backend/rpc/src/client/shared/requester.ts @@ -1,4 +1,4 @@ -import { memo } from '@lowerdeck/memo'; +import { memo } from '@mtsrc/memo'; import { generatePlainId } from '@metorial/id'; let index = 0; diff --git a/src/packages/backend/rpc/src/server/controller.test.ts b/src/packages/backend/rpc/src/server/controller.test.ts index 7dcdf5923..48d4ce340 100644 --- a/src/packages/backend/rpc/src/server/controller.test.ts +++ b/src/packages/backend/rpc/src/server/controller.test.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { describe, expect, test } from 'vitest'; import { Group } from './controller'; diff --git a/src/packages/backend/rpc/src/server/controller.ts b/src/packages/backend/rpc/src/server/controller.ts index 78d15aeeb..2fde17ea4 100644 --- a/src/packages/backend/rpc/src/server/controller.ts +++ b/src/packages/backend/rpc/src/server/controller.ts @@ -1,5 +1,5 @@ -import { ValidationType } from '@lowerdeck/validation'; -import { ServiceError, validationError } from '@lowerdeck/error'; +import { ValidationType } from '@mtsrc/validation'; +import { ServiceError, validationError } from '@mtsrc/error'; import * as Cookie from 'cookie'; export type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'; diff --git a/src/packages/backend/rpc/src/server/rpcMux.ts b/src/packages/backend/rpc/src/server/rpcMux.ts index d8b24003d..b80af3fbb 100644 --- a/src/packages/backend/rpc/src/server/rpcMux.ts +++ b/src/packages/backend/rpc/src/server/rpcMux.ts @@ -3,12 +3,12 @@ import { notAcceptableError, notFoundError, validationError -} from '@lowerdeck/error'; -import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context'; -import { memo } from '@lowerdeck/memo'; -import { getSentry } from '@lowerdeck/sentry'; -import { serialize } from '@lowerdeck/serialize'; -import { v } from '@lowerdeck/validation'; +} from '@mtsrc/error'; +import { createExecutionContext, provideExecutionContext } from '@mtsrc/execution-context'; +import { memo } from '@mtsrc/memo'; +import { getSentry } from '@mtsrc/sentry'; +import { serialize } from '@mtsrc/serialize'; +import { v } from '@mtsrc/validation'; import { generateCustomId } from '@metorial/id'; import * as Cookie from 'cookie'; import { parseForwardedFor } from '../client/lib/extractIp'; diff --git a/src/packages/backend/rpc/src/server/server.ts b/src/packages/backend/rpc/src/server/server.ts index 07653c65b..bb2aa36c5 100644 --- a/src/packages/backend/rpc/src/server/server.ts +++ b/src/packages/backend/rpc/src/server/server.ts @@ -1,5 +1,5 @@ -import { getSentry } from '@lowerdeck/sentry'; -import { internalServerError, isServiceError, notFoundError } from '@lowerdeck/error'; +import { getSentry } from '@mtsrc/sentry'; +import { internalServerError, isServiceError, notFoundError } from '@mtsrc/error'; import { Controller, Handler, ServiceRequest } from './controller'; let Sentry = getSentry(); diff --git a/src/packages/frontend/data-hooks/package.json b/src/packages/frontend/data-hooks/package.json index 7553c5bd4..2cb954ead 100644 --- a/src/packages/frontend/data-hooks/package.json +++ b/src/packages/frontend/data-hooks/package.json @@ -14,8 +14,8 @@ "react-router-dom": "^6.26.1", "yup": "^1.4.0", "@metorial/ui": "1.0.0", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/memo": "1.0.4" + "@mtsrc/error": "1.0.0", + "@mtsrc/memo": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/frontend/data-hooks/src/lib/renderWithLoader.ts b/src/packages/frontend/data-hooks/src/lib/renderWithLoader.ts index 6fac95788..511c7d09b 100644 --- a/src/packages/frontend/data-hooks/src/lib/renderWithLoader.ts +++ b/src/packages/frontend/data-hooks/src/lib/renderWithLoader.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { Button, CenteredSpinner, Error } from '@metorial/ui'; import { MetorialSDKError } from '@metorial/util-endpoint'; import React, { Fragment, useEffect, useRef, useState } from 'react'; diff --git a/src/packages/frontend/data-hooks/src/loader/index.ts b/src/packages/frontend/data-hooks/src/loader/index.ts index 2f9d5fa21..42e400921 100644 --- a/src/packages/frontend/data-hooks/src/loader/index.ts +++ b/src/packages/frontend/data-hooks/src/loader/index.ts @@ -1,12 +1,12 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; +import { canonicalize } from '@mtsrc/canonicalize'; import { createError, internalServerError, isServiceError, ServiceError -} from '@lowerdeck/error'; -import { memo } from '@lowerdeck/memo'; -import { getSentry } from '@lowerdeck/sentry'; +} from '@mtsrc/error'; +import { memo } from '@mtsrc/memo'; +import { getSentry } from '@mtsrc/sentry'; import { isMetorialSDKError } from '@metorial/util-endpoint'; import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; import { onFocus } from '../lib/onFocus'; diff --git a/src/packages/frontend/data-hooks/src/useForm.tsx b/src/packages/frontend/data-hooks/src/useForm.tsx index d7ad6fcaf..afedc87a7 100644 --- a/src/packages/frontend/data-hooks/src/useForm.tsx +++ b/src/packages/frontend/data-hooks/src/useForm.tsx @@ -1,4 +1,4 @@ -import type { ValidationType } from '@lowerdeck/validation'; +import type { ValidationType } from '@mtsrc/validation'; import { Error } from '@metorial/ui'; import equal from 'fast-deep-equal'; import type { FormikConfig } from 'formik'; diff --git a/src/packages/frontend/data-hooks/src/useMutation.ts b/src/packages/frontend/data-hooks/src/useMutation.ts index 94eb79733..3eb893770 100644 --- a/src/packages/frontend/data-hooks/src/useMutation.ts +++ b/src/packages/frontend/data-hooks/src/useMutation.ts @@ -1,5 +1,5 @@ -import { getSentry } from '@lowerdeck/sentry'; -import { ServiceError, internalServerError, isServiceError } from '@lowerdeck/error'; +import { getSentry } from '@mtsrc/sentry'; +import { ServiceError, internalServerError, isServiceError } from '@mtsrc/error'; import { Error } from '@metorial/ui'; import { isMetorialSDKError } from '@metorial/util-endpoint'; import React, { useEffect, useRef, useState } from 'react'; diff --git a/src/packages/frontend/data-hooks/src/useStack.ts b/src/packages/frontend/data-hooks/src/useStack.ts index f92d76eea..c39d3b868 100644 --- a/src/packages/frontend/data-hooks/src/useStack.ts +++ b/src/packages/frontend/data-hooks/src/useStack.ts @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; export let useStack = ( ..._loaders: ( diff --git a/src/packages/frontend/microfrontend/src/slice.ts b/src/packages/frontend/microfrontend/src/slice.ts index 1a2e78bcd..5f2ac4c01 100644 --- a/src/packages/frontend/microfrontend/src/slice.ts +++ b/src/packages/frontend/microfrontend/src/slice.ts @@ -1,4 +1,4 @@ -import { joinPaths } from '@lowerdeck/join-paths'; +import { joinPaths } from '@mtsrc/join-paths'; import { ErrorPage, NotFound } from '@metorial/pages'; import { ModalRoot, Toaster } from '@metorial/ui'; import React, { ReactNode, useEffect } from 'react'; diff --git a/src/packages/frontend/ui/package.json b/src/packages/frontend/ui/package.json index 52df7d312..d0e50d6c6 100644 --- a/src/packages/frontend/ui/package.json +++ b/src/packages/frontend/ui/package.json @@ -15,7 +15,6 @@ "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@looped/hooks": "^0.1.3", - "@lowerdeck/memo": "^1.0.4", "@radix-ui/react-accordion": "^1.2.8", "@radix-ui/react-alert-dialog": "^1.1.11", "@radix-ui/react-checkbox": "^1.2.3", @@ -42,7 +41,8 @@ "shleemy": "^1.2.2", "sonner": "^2.0.3", "styled-components": "^6.1.13", - "use-delayed": "^0.1.0" + "use-delayed": "^0.1.0", + "@mtsrc/memo": "1.0.0" }, "devDependencies": { "esbuild-plugin-styled-components": "^3.0.1", diff --git a/src/packages/frontend/ui/src/badge/constants.ts b/src/packages/frontend/ui/src/badge/constants.ts index 43e5baebc..e67702418 100644 --- a/src/packages/frontend/ui/src/badge/constants.ts +++ b/src/packages/frontend/ui/src/badge/constants.ts @@ -1,4 +1,4 @@ -import { memo } from '@lowerdeck/memo'; +import { memo } from '@mtsrc/memo'; import { theme } from '..'; import { ColorType, getColorKey } from '../theme/colors'; diff --git a/src/packages/frontend/ui/src/button/constants.ts b/src/packages/frontend/ui/src/button/constants.ts index a0d1a3383..9b157d61b 100644 --- a/src/packages/frontend/ui/src/button/constants.ts +++ b/src/packages/frontend/ui/src/button/constants.ts @@ -1,4 +1,4 @@ -import { memo } from '@lowerdeck/memo'; +import { memo } from '@mtsrc/memo'; import { theme } from '../theme'; import { ColorType, getColorKey, getForegroundColor } from '../theme/colors'; import { linearGradient } from '../theme/gradient'; diff --git a/src/packages/frontend/ui/src/callout/constants.ts b/src/packages/frontend/ui/src/callout/constants.ts index c002d0db3..921f40304 100644 --- a/src/packages/frontend/ui/src/callout/constants.ts +++ b/src/packages/frontend/ui/src/callout/constants.ts @@ -1,4 +1,4 @@ -import { memo } from '@lowerdeck/memo'; +import { memo } from '@mtsrc/memo'; import { theme } from '../theme'; import { ColorType, getColorKey } from '../theme/colors'; diff --git a/src/packages/frontend/ui/src/theme/colors.ts b/src/packages/frontend/ui/src/theme/colors.ts index 14502be82..73698cfdc 100644 --- a/src/packages/frontend/ui/src/theme/colors.ts +++ b/src/packages/frontend/ui/src/theme/colors.ts @@ -1,4 +1,4 @@ -import { memo } from '@lowerdeck/memo'; +import { memo } from '@mtsrc/memo'; import { ThemeTokenFactory, createThemeToken } from './tokens'; export let colors = { diff --git a/src/packages/mcp/unified-id/src/index.ts b/src/packages/mcp/unified-id/src/index.ts index e82e71d90..936ea20ea 100644 --- a/src/packages/mcp/unified-id/src/index.ts +++ b/src/packages/mcp/unified-id/src/index.ts @@ -1,4 +1,4 @@ -import { base62 } from '@lowerdeck/base62'; +import { base62 } from '@mtsrc/base62'; import type { SessionMessageType } from '@metorial/db'; import { MCP_IDS } from '@metorial/mcp-utils'; diff --git a/src/packages/server/api-keys/package.json b/src/packages/server/api-keys/package.json index c5a613c9c..940457267 100644 --- a/src/packages/server/api-keys/package.json +++ b/src/packages/server/api-keys/package.json @@ -9,7 +9,7 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/error": "^1.2.3" + "@mtsrc/error": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/server/bearer/src/parseBearerToken.ts b/src/packages/server/bearer/src/parseBearerToken.ts index 77044a821..abd3b3048 100644 --- a/src/packages/server/bearer/src/parseBearerToken.ts +++ b/src/packages/server/bearer/src/parseBearerToken.ts @@ -1,4 +1,4 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; export let parseBearerToken = (request: Request) => { let authorization = request.headers.get('Authorization'); diff --git a/src/packages/server/presenter/src/presenter.ts b/src/packages/server/presenter/src/presenter.ts index 4093c8952..1c83b2b37 100644 --- a/src/packages/server/presenter/src/presenter.ts +++ b/src/packages/server/presenter/src/presenter.ts @@ -1,4 +1,4 @@ -import { introspectType, ValidationType } from '@lowerdeck/validation'; +import { introspectType, ValidationType } from '@mtsrc/validation'; export interface PresenterContext { // instance: Instance; diff --git a/src/packages/server/rest/src/controller.ts b/src/packages/server/rest/src/controller.ts index 58344da81..221570906 100644 --- a/src/packages/server/rest/src/controller.ts +++ b/src/packages/server/rest/src/controller.ts @@ -1,6 +1,6 @@ -import { IntrospectedType, introspectType, v, ValidationType } from '@lowerdeck/validation'; +import { IntrospectedType, introspectType, v, ValidationType } from '@mtsrc/validation'; import { Context } from '@metorial/context'; -import { ServiceError, validationError } from '@lowerdeck/error'; +import { ServiceError, validationError } from '@mtsrc/error'; export interface ServiceRequest { body: any; diff --git a/src/packages/server/rest/src/parseBody.ts b/src/packages/server/rest/src/parseBody.ts index 1deac8bcd..2e5680967 100644 --- a/src/packages/server/rest/src/parseBody.ts +++ b/src/packages/server/rest/src/parseBody.ts @@ -1,4 +1,4 @@ -import { ServiceError, badRequestError } from '@lowerdeck/error'; +import { ServiceError, badRequestError } from '@mtsrc/error'; import { Context } from 'hono'; import qs from 'qs'; diff --git a/src/packages/server/rest/src/ratelimit.ts b/src/packages/server/rest/src/ratelimit.ts index 009e8448c..3dc97202b 100644 --- a/src/packages/server/rest/src/ratelimit.ts +++ b/src/packages/server/rest/src/ratelimit.ts @@ -1,5 +1,5 @@ import { Context } from '@metorial/context'; -import { createError } from '@lowerdeck/error'; +import { createError } from '@mtsrc/error'; import { parseRedisUrl } from '@metorial/redis'; import ARL from 'async-ratelimiter'; import Redis from 'ioredis'; diff --git a/src/packages/server/rest/src/server.ts b/src/packages/server/rest/src/server.ts index 03f0b9484..5dcae23bd 100644 --- a/src/packages/server/rest/src/server.ts +++ b/src/packages/server/rest/src/server.ts @@ -3,9 +3,9 @@ import { internalServerError, isServiceError, notFoundError -} from '@lowerdeck/error'; -import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context'; -import { getSentry } from '@lowerdeck/sentry'; +} from '@mtsrc/error'; +import { createExecutionContext, provideExecutionContext } from '@mtsrc/execution-context'; +import { getSentry } from '@mtsrc/sentry'; import { Context } from '@metorial/context'; import { generateId } from '@metorial/id'; import { PresenterContext } from '@metorial/presenter'; diff --git a/src/packages/shared/id/package.json b/src/packages/shared/id/package.json index fa2aaf8a4..56de5f844 100644 --- a/src/packages/shared/id/package.json +++ b/src/packages/shared/id/package.json @@ -9,11 +9,11 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/base62": "^1.0.4", - "@lowerdeck/hash": "^1.0.4", "nanoid": "^5.0.7", - "short-uuid": "^5.2.0" + "short-uuid": "^5.2.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/base62": "1.0.0", + "@mtsrc/hash": "1.0.0" }, "devDependencies": { "@metorial/tsconfig": "^1.0.0", diff --git a/src/packages/shared/id/src/id.ts b/src/packages/shared/id/src/id.ts index ec1fdadd3..12db40d75 100644 --- a/src/packages/shared/id/src/id.ts +++ b/src/packages/shared/id/src/id.ts @@ -1,6 +1,6 @@ -import { Hash } from '@lowerdeck/hash'; -import { Snowflake } from '@lowerdeck/snowflake'; -import { ServiceError, badRequestError } from '@lowerdeck/error'; +import { Hash } from '@mtsrc/hash'; +import { Snowflake } from '@mtsrc/snowflake'; +import { ServiceError, badRequestError } from '@mtsrc/error'; import { customAlphabet } from 'nanoid'; import short from 'short-uuid'; diff --git a/src/packages/shared/tsconfig/base.json b/src/packages/shared/tsconfig/base.json index 4bc506a2e..51de32a1e 100644 --- a/src/packages/shared/tsconfig/base.json +++ b/src/packages/shared/tsconfig/base.json @@ -9,7 +9,7 @@ "forceConsistentCasingInFileNames": true, "inlineSources": false, "isolatedModules": true, - "moduleResolution": "node", + "moduleResolution": "bundler", "lib": [ "ESNext", "DOM", diff --git a/src/systems/_clients/ares/package.json b/src/systems/_clients/ares/package.json index 2dfc57c28..5fd79f4e8 100644 --- a/src/systems/_clients/ares/package.json +++ b/src/systems/_clients/ares/package.json @@ -30,7 +30,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4" + "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/ares/src/index.ts b/src/systems/_clients/ares/src/index.ts index c5972e325..1bf6b40c3 100644 --- a/src/systems/_clients/ares/src/index.ts +++ b/src/systems/_clients/ares/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { InternalClient } from '../../../ares/service/src/apis/internal'; type ClientOpts = Parameters[0]; diff --git a/src/systems/_clients/cargo/package.json b/src/systems/_clients/cargo/package.json index 8877846e9..2c5986b88 100644 --- a/src/systems/_clients/cargo/package.json +++ b/src/systems/_clients/cargo/package.json @@ -30,8 +30,8 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@types/bun": "^1.3.7" + "@types/bun": "^1.3.7", + "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/cargo/src/index.ts b/src/systems/_clients/cargo/src/index.ts index eef423d3e..2ff35523c 100644 --- a/src/systems/_clients/cargo/src/index.ts +++ b/src/systems/_clients/cargo/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { CargoClient } from '../../../cargo/service/src/controllers'; type RpcClientOpts = Parameters[0]; diff --git a/src/systems/_clients/forge/dts-bundle-generator.config.json b/src/systems/_clients/forge/dts-bundle-generator.config.json index 36ef42b08..13756f70e 100644 --- a/src/systems/_clients/forge/dts-bundle-generator.config.json +++ b/src/systems/_clients/forge/dts-bundle-generator.config.json @@ -6,9 +6,6 @@ "noCheck": false, "libraries": { "inlinedLibraries": [ - "@lowerdeck/rpc-client", - "@lowerdeck/rpc-server", - "@lowerdeck/validation", "@metorial-platform-systems/object-storage-client" ] } diff --git a/src/systems/_clients/forge/package.json b/src/systems/_clients/forge/package.json index 6fbbffb3c..17d287916 100644 --- a/src/systems/_clients/forge/package.json +++ b/src/systems/_clients/forge/package.json @@ -30,10 +30,10 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10", "@metorial/util-websocket": "^1.0.0", - "@types/bun": "^1.3.7" + "@types/bun": "^1.3.7", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/forge/src/index.ts b/src/systems/_clients/forge/src/index.ts index 104d84604..6b7b1132b 100644 --- a/src/systems/_clients/forge/src/index.ts +++ b/src/systems/_clients/forge/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { ForgeClient } from '../../../forge/service/src/controllers'; type ClientOpts = Parameters[0]; diff --git a/src/systems/_clients/function-bay/package.json b/src/systems/_clients/function-bay/package.json index 4edd2f297..a8b5edc8d 100644 --- a/src/systems/_clients/function-bay/package.json +++ b/src/systems/_clients/function-bay/package.json @@ -30,7 +30,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4" + "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/function-bay/src/index.ts b/src/systems/_clients/function-bay/src/index.ts index 219cd9992..a4759b61f 100644 --- a/src/systems/_clients/function-bay/src/index.ts +++ b/src/systems/_clients/function-bay/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { FunctionBayClient } from '../../../function-bay/service/src/controllers'; type ClientOpts = Parameters[0]; diff --git a/src/systems/_clients/origin-client/dts-bundle-generator.config.json b/src/systems/_clients/origin-client/dts-bundle-generator.config.json index 51547a10f..023f67db9 100644 --- a/src/systems/_clients/origin-client/dts-bundle-generator.config.json +++ b/src/systems/_clients/origin-client/dts-bundle-generator.config.json @@ -9,9 +9,6 @@ "noCheck": true, "libraries": { "inlinedLibraries": [ - "@lowerdeck/rpc-client", - "@lowerdeck/rpc-server", - "@lowerdeck/validation", "@metorial-platform-systems/object-storage-client" ] } diff --git a/src/systems/_clients/origin-client/package.json b/src/systems/_clients/origin-client/package.json index 7ddddc197..9f4b272c3 100644 --- a/src/systems/_clients/origin-client/package.json +++ b/src/systems/_clients/origin-client/package.json @@ -28,11 +28,11 @@ "test": "vitest run --passWithNoTests", "lint": "prettier src/**/*.ts --check", "prebuild": "cd ../../origin/apps/service && bunx prisma generate", - "build": "rm -rf ./dist && microbundle && dts-bundle-generator --config dts-bundle-generator.config.json", + "build": "rm -rf ./dist && microbundle && dts-bundle-generator --config dts-bundle-generator.config.json --external-imports @mtsrc/rpc-client @mtsrc/rpc-server @mtsrc/validation", "prepublish": "bun run build" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4" + "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { "@types/node": "^25.0.3", diff --git a/src/systems/_clients/origin-client/src/index.ts b/src/systems/_clients/origin-client/src/index.ts index 0f4af453d..81bc7add3 100644 --- a/src/systems/_clients/origin-client/src/index.ts +++ b/src/systems/_clients/origin-client/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { OriginClient } from '../../../origin/apps/service/src/controllers'; type ClientOpts = Parameters[0]; diff --git a/src/systems/_clients/origin-client/tsconfig.dts.json b/src/systems/_clients/origin-client/tsconfig.dts.json index 68a50ac9f..75880c336 100644 --- a/src/systems/_clients/origin-client/tsconfig.dts.json +++ b/src/systems/_clients/origin-client/tsconfig.dts.json @@ -6,11 +6,23 @@ "noEmit": true, "skipDefaultLibCheck": true, "types": [], + "moduleResolution": "bundler", "baseUrl": ".", "paths": { - "@metorial/code-bucket-service-generated": ["./stubs/code-bucket-service-generated.ts"] + "@metorial/code-bucket-service-generated": ["./stubs/code-bucket-service-generated.ts"], + "@mtsrc/validation": ["../../../_shared/util/validation/src/index.ts"], + "@mtsrc/rpc-client": ["../../../_shared/rpc/rpc-client/src/index.ts"], + "@mtsrc/rpc-server": ["../../../_shared/rpc/rpc-server/src/index.ts"], + "@mtsrc/error": ["../../../_shared/backend/error/src/index.ts"] } }, + "include": [ + "src/**/*", + "../../../_shared/util/validation/src/**/*", + "../../../_shared/rpc/rpc-client/src/**/*", + "../../../_shared/rpc/rpc-server/src/**/*", + "../../../_shared/backend/error/src/**/*" + ], "exclude": [ "dist", "node_modules" diff --git a/src/systems/_clients/origin-client/tsconfig.json b/src/systems/_clients/origin-client/tsconfig.json index be4c26e70..b0ed214d7 100644 --- a/src/systems/_clients/origin-client/tsconfig.json +++ b/src/systems/_clients/origin-client/tsconfig.json @@ -13,7 +13,7 @@ "forceConsistentCasingInFileNames": true, "inlineSources": false, "isolatedModules": true, - "moduleResolution": "node", + "moduleResolution": "bundler", "module": "esnext", "lib": [ "ESNext", diff --git a/src/systems/_clients/relay/README.md b/src/systems/_clients/relay/README.md index 3dc22a157..677483790 100644 --- a/src/systems/_clients/relay/README.md +++ b/src/systems/_clients/relay/README.md @@ -5,7 +5,7 @@ A client library for interacting with the Metorial Relay platform using TypeScri ## Usage ```ts -import { createRelayClient } from '@lowerdeck/forge-client'; +import { createRelayClient } from '@mtsrc/forge-client'; let forge = createRelayClient({ endpoint: '...' diff --git a/src/systems/_clients/relay/package.json b/src/systems/_clients/relay/package.json index 0d0fef01c..fb726a8f5 100644 --- a/src/systems/_clients/relay/package.json +++ b/src/systems/_clients/relay/package.json @@ -30,9 +30,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", "@react-email/components": "^1.0.7", - "react": "^19.2.4" + "react": "^19.2.4", + "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { "@types/react": "^19.0.0", diff --git a/src/systems/_clients/relay/src/index.ts b/src/systems/_clients/relay/src/index.ts index 29cb04c78..5e63ea002 100644 --- a/src/systems/_clients/relay/src/index.ts +++ b/src/systems/_clients/relay/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { RelayClient } from '../../../relay/service/src/controllers'; export * from './templates'; diff --git a/src/systems/_clients/shuttle/package.json b/src/systems/_clients/shuttle/package.json index e4beb91ed..cec9aad18 100644 --- a/src/systems/_clients/shuttle/package.json +++ b/src/systems/_clients/shuttle/package.json @@ -30,10 +30,10 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10", "@metorial/util-websocket": "^1.0.0", - "@types/bun": "^1.3.7" + "@types/bun": "^1.3.7", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/shuttle/src/controller.ts b/src/systems/_clients/shuttle/src/controller.ts index 04cd71654..42f3d1f8f 100644 --- a/src/systems/_clients/shuttle/src/controller.ts +++ b/src/systems/_clients/shuttle/src/controller.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { ShuttleClient } from '../../../shuttle/service/src/apis/controllers'; type ClientOpts = Parameters[0]; diff --git a/src/systems/_clients/signal/package.json b/src/systems/_clients/signal/package.json index b9f49aa0c..c278c070e 100644 --- a/src/systems/_clients/signal/package.json +++ b/src/systems/_clients/signal/package.json @@ -30,8 +30,8 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10" + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/signal/src/index.ts b/src/systems/_clients/signal/src/index.ts index fc30c9d67..0b0bcb223 100644 --- a/src/systems/_clients/signal/src/index.ts +++ b/src/systems/_clients/signal/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { SignalClient } from '../../../signal/service/src/controllers'; type ClientOpts = Parameters[0]; diff --git a/src/systems/_clients/slates/package.json b/src/systems/_clients/slates/package.json index 11eab5b79..f31fa872f 100644 --- a/src/systems/_clients/slates/package.json +++ b/src/systems/_clients/slates/package.json @@ -30,9 +30,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/function-bay-client": "workspace:*" + "@metorial-platform-systems/function-bay-client": "workspace:*", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/slates/src/index.ts b/src/systems/_clients/slates/src/index.ts index 0f4a1b376..15cb5a230 100644 --- a/src/systems/_clients/slates/src/index.ts +++ b/src/systems/_clients/slates/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { SlatesHubClient } from '../../../slates/apps/hub/src/apis/internal'; type ClientOpts = Parameters[0]; diff --git a/src/systems/_clients/subspace/package.json b/src/systems/_clients/subspace/package.json index af14edd8a..ca150db3f 100644 --- a/src/systems/_clients/subspace/package.json +++ b/src/systems/_clients/subspace/package.json @@ -30,8 +30,8 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/validation": "^1.0.10" + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/subspace/src/index.ts b/src/systems/_clients/subspace/src/index.ts index 30736f4eb..3a8e5ae9b 100644 --- a/src/systems/_clients/subspace/src/index.ts +++ b/src/systems/_clients/subspace/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { SubspaceControllerClient } from '../../../subspace/apps/controller/src/controllers'; export let createSubspaceControllerClient = ( diff --git a/src/systems/_clients/synthesis/package.json b/src/systems/_clients/synthesis/package.json index c3f58bb69..b56a098e2 100644 --- a/src/systems/_clients/synthesis/package.json +++ b/src/systems/_clients/synthesis/package.json @@ -30,7 +30,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4" + "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/synthesis/src/index.ts b/src/systems/_clients/synthesis/src/index.ts index d441e8c64..5ec36fdda 100644 --- a/src/systems/_clients/synthesis/src/index.ts +++ b/src/systems/_clients/synthesis/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { SynthesisClient } from '../../../synthesis/service/src/controllers'; export * from '../../../synthesis/service/src/lib/delta/client'; export * from '../../../synthesis/service/src/lib/delta/types'; diff --git a/src/systems/_clients/voyager/README.md b/src/systems/_clients/voyager/README.md index b126e40aa..84c48d023 100644 --- a/src/systems/_clients/voyager/README.md +++ b/src/systems/_clients/voyager/README.md @@ -5,7 +5,7 @@ A client library for interacting with the Metorial Voyager platform using TypeSc ## Usage ```ts -import { createVoyagerClient } from '@lowerdeck/voyager-client'; +import { createVoyagerClient } from '@mtsrc/voyager-client'; let voyager = createVoyagerClient({ endpoint: '...' diff --git a/src/systems/_clients/voyager/package.json b/src/systems/_clients/voyager/package.json index a223c4e91..3c51cc218 100644 --- a/src/systems/_clients/voyager/package.json +++ b/src/systems/_clients/voyager/package.json @@ -30,7 +30,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4" + "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { "tsup": "^8.5.1", diff --git a/src/systems/_clients/voyager/src/index.ts b/src/systems/_clients/voyager/src/index.ts index 9bb677d5d..f1d1e6a53 100644 --- a/src/systems/_clients/voyager/src/index.ts +++ b/src/systems/_clients/voyager/src/index.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { VoyagerClient } from '../../../voyager/service/src/controllers'; type ClientOpts = Parameters[0]; diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index 3feb14651..c1b6eea12 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -26,7 +26,7 @@ WORKDIR /app/src/systems/ares/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/ares/service/frontend/admin/src/pages/_error/serviceError.tsx b/src/systems/ares/service/frontend/admin/src/pages/_error/serviceError.tsx index de4f124ae..f89016217 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/_error/serviceError.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/_error/serviceError.tsx @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { ErrorPage, NotFound } from '@metorial-io/pages'; export let ServiceErrorPage = ({ error }: { error: ServiceError }) => { diff --git a/src/systems/ares/service/frontend/admin/src/state/client.ts b/src/systems/ares/service/frontend/admin/src/state/client.ts index 4fde54b44..ccc9b98cd 100644 --- a/src/systems/ares/service/frontend/admin/src/state/client.ts +++ b/src/systems/ares/service/frontend/admin/src/state/client.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { AdminClient } from '../../../../src/apis/admin/controllers'; export let adminClient = createClient({ diff --git a/src/systems/ares/service/frontend/admin/src/state/index.ts b/src/systems/ares/service/frontend/admin/src/state/index.ts index b8ce4b74b..fadf0488d 100644 --- a/src/systems/ares/service/frontend/admin/src/state/index.ts +++ b/src/systems/ares/service/frontend/admin/src/state/index.ts @@ -1,4 +1,4 @@ -import { isServiceError } from '@lowerdeck/error'; +import { isServiceError } from '@mtsrc/error'; import { createLoader } from '@metorial-io/data-hooks'; import { adminClient } from './client'; diff --git a/src/systems/ares/service/frontend/auth/src/pages/_error/serviceError.tsx b/src/systems/ares/service/frontend/auth/src/pages/_error/serviceError.tsx index de4f124ae..f89016217 100644 --- a/src/systems/ares/service/frontend/auth/src/pages/_error/serviceError.tsx +++ b/src/systems/ares/service/frontend/auth/src/pages/_error/serviceError.tsx @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { ErrorPage, NotFound } from '@metorial-io/pages'; export let ServiceErrorPage = ({ error }: { error: ServiceError }) => { diff --git a/src/systems/ares/service/frontend/auth/src/scenes/authHome.tsx b/src/systems/ares/service/frontend/auth/src/scenes/authHome.tsx index b99f3feb8..cbdc3eaec 100644 --- a/src/systems/ares/service/frontend/auth/src/scenes/authHome.tsx +++ b/src/systems/ares/service/frontend/auth/src/scenes/authHome.tsx @@ -1,5 +1,5 @@ import { useInterval } from '@looped/hooks'; -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { Turnstile } from '@marsidev/react-turnstile'; import { useForm, useMutation } from '@metorial-io/data-hooks'; import { diff --git a/src/systems/ares/service/frontend/auth/src/state/client.ts b/src/systems/ares/service/frontend/auth/src/state/client.ts index 01b92b501..aa5e7a7ba 100644 --- a/src/systems/ares/service/frontend/auth/src/state/client.ts +++ b/src/systems/ares/service/frontend/auth/src/state/client.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { AuthClient } from '../../../../src/apis/auth/controllers'; export let authClient = createClient({ diff --git a/src/systems/ares/service/package.json b/src/systems/ares/service/package.json index 10cbc493d..0ef3b45b6 100644 --- a/src/systems/ares/service/package.json +++ b/src/systems/ares/service/package.json @@ -28,12 +28,12 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", "@vitejs/plugin-react": "4.3.1", - "vitest": "4.0.17" + "vitest": "4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5.5.3" @@ -44,31 +44,6 @@ "@aws-sdk/client-lambda": "^3.958.0", "@boxyhq/saml-jackson": "^1.52.2", "@looped/hooks": "^0.1.3", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/event": "^1.0.3", - "@lowerdeck/forwarded-for": "^1.0.4", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/ip-info": "^1.0.4", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/tokens": "^1.0.5", - "@lowerdeck/validation": "^1.0.10", "@marsidev/react-turnstile": "^1.4.2", "@metorial-io/data-hooks": "^1.0.1", "@metorial-io/layout": "^1.0.1", @@ -96,7 +71,32 @@ "styled-components": "^6.1.13", "ua-parser-js": "1", "vite": "5.4.21", - "yaml": "^2.8.2" + "yaml": "^2.8.2", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/event": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/ip-info": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/tokens": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "overrides": { "@react-email/components": "1.0.8" diff --git a/src/systems/ares/service/src/apis/admin/controllers/accessGroup.ts b/src/systems/ares/service/src/apis/admin/controllers/accessGroup.ts index 756ba29d1..82358b5d4 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/accessGroup.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/accessGroup.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { accessGroupService } from '../../../services/accessGroup'; import { adminService } from '../../../services/admin'; import { adminApp } from '../middleware/admin'; diff --git a/src/systems/ares/service/src/apis/admin/controllers/admin.ts b/src/systems/ares/service/src/apis/admin/controllers/admin.ts index f6839e468..ab76c4d5b 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/admin.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/admin.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { adminService } from '../../../services/admin'; import { adminApp } from '../middleware/admin'; import { adminPresenter } from '../presenters'; diff --git a/src/systems/ares/service/src/apis/admin/controllers/app.ts b/src/systems/ares/service/src/apis/admin/controllers/app.ts index 4bdf8cadd..6fef5169d 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/app.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/app.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { adminService } from '../../../services/admin'; import { adminApp } from '../middleware/admin'; import { appPresenter } from '../presenters'; diff --git a/src/systems/ares/service/src/apis/admin/controllers/auditLog.ts b/src/systems/ares/service/src/apis/admin/controllers/auditLog.ts index 8df468510..bb27f0854 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/auditLog.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/auditLog.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { adminService } from '../../../services/admin'; import { auditLogService } from '../../../services/auditLog'; import { adminApp } from '../middleware/admin'; diff --git a/src/systems/ares/service/src/apis/admin/controllers/auth.ts b/src/systems/ares/service/src/apis/admin/controllers/auth.ts index df655460b..9519a8cd4 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/auth.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/auth.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { db } from '../../../db'; import { getId } from '../../../id'; import { ADMIN_APP_SLUG } from '../../../lib/adminApp'; diff --git a/src/systems/ares/service/src/apis/admin/controllers/index.ts b/src/systems/ares/service/src/apis/admin/controllers/index.ts index a4d466316..0c85d8220 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/index.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/index.ts @@ -1,4 +1,4 @@ -import { createServer, type InferClient } from '@lowerdeck/rpc-server'; +import { createServer, type InferClient } from '@mtsrc/rpc-server'; import { publicApp } from '../middleware/admin'; import { accessGroupController } from './accessGroup'; import { adminController } from './admin'; diff --git a/src/systems/ares/service/src/apis/admin/controllers/oauthProvider.ts b/src/systems/ares/service/src/apis/admin/controllers/oauthProvider.ts index d5c1ed1d4..f045a2dab 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/oauthProvider.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/oauthProvider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { adminService } from '../../../services/admin'; import { oauthProviderService } from '../../../services/oauthProvider'; import { adminApp } from '../middleware/admin'; diff --git a/src/systems/ares/service/src/apis/admin/controllers/sso.ts b/src/systems/ares/service/src/apis/admin/controllers/sso.ts index 8db9ae607..55bc3182d 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/sso.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/sso.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { env } from '../../../env'; import { adminService } from '../../../services/admin'; import { ssoService } from '../../../services/sso'; diff --git a/src/systems/ares/service/src/apis/admin/controllers/tenant.ts b/src/systems/ares/service/src/apis/admin/controllers/tenant.ts index 02c1d61c7..1c4012c2a 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/tenant.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/tenant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { adminService } from '../../../services/admin'; import { adminApp } from '../middleware/admin'; import { tenantPresenter } from '../presenters'; diff --git a/src/systems/ares/service/src/apis/admin/controllers/user.ts b/src/systems/ares/service/src/apis/admin/controllers/user.ts index b1f202fca..0eedef578 100644 --- a/src/systems/ares/service/src/apis/admin/controllers/user.ts +++ b/src/systems/ares/service/src/apis/admin/controllers/user.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { adminService } from '../../../services/admin'; import { userPresenter } from '../../auth/presenters'; import { adminApp } from '../middleware/admin'; diff --git a/src/systems/ares/service/src/apis/admin/endpoints/index.ts b/src/systems/ares/service/src/apis/admin/endpoints/index.ts index e2e2668d1..717f2ae73 100644 --- a/src/systems/ares/service/src/apis/admin/endpoints/index.ts +++ b/src/systems/ares/service/src/apis/admin/endpoints/index.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { publicApp } from './public'; export let endpointApp = createHono().route('', publicApp); diff --git a/src/systems/ares/service/src/apis/admin/endpoints/public.ts b/src/systems/ares/service/src/apis/admin/endpoints/public.ts index 6f7a5a1ba..dbe2b15a1 100644 --- a/src/systems/ares/service/src/apis/admin/endpoints/public.ts +++ b/src/systems/ares/service/src/apis/admin/endpoints/public.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import path, { join } from 'path'; import { env } from '../../../env'; import { adminAppClientId } from '../../../lib/adminApp'; diff --git a/src/systems/ares/service/src/apis/admin/index.ts b/src/systems/ares/service/src/apis/admin/index.ts index 6e33abb47..56be1be6f 100644 --- a/src/systems/ares/service/src/apis/admin/index.ts +++ b/src/systems/ares/service/src/apis/admin/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { rpcMux } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { rpcMux } from '@mtsrc/rpc-server'; import { adminRPC } from './controllers'; import { endpointApp } from './endpoints'; diff --git a/src/systems/ares/service/src/apis/admin/middleware/admin.ts b/src/systems/ares/service/src/apis/admin/middleware/admin.ts index 0a2c448ef..430c06f5c 100644 --- a/src/systems/ares/service/src/apis/admin/middleware/admin.ts +++ b/src/systems/ares/service/src/apis/admin/middleware/admin.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Group } from '@lowerdeck/rpc-server'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Group } from '@mtsrc/rpc-server'; import { adminService } from '../../../services/admin'; export const ADMIN_SESSION_COOKIE_NAME = 'metorial_admin_session'; diff --git a/src/systems/ares/service/src/apis/auth/_app.ts b/src/systems/ares/service/src/apis/auth/_app.ts index 3bf08f0fc..b5b58fd9f 100644 --- a/src/systems/ares/service/src/apis/auth/_app.ts +++ b/src/systems/ares/service/src/apis/auth/_app.ts @@ -1,4 +1,4 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let publicApp = new Group().use(async ctx => { return { diff --git a/src/systems/ares/service/src/apis/auth/controllers/auth.ts b/src/systems/ares/service/src/apis/auth/controllers/auth.ts index 4ec7498c9..80c1f3c3b 100644 --- a/src/systems/ares/service/src/apis/auth/controllers/auth.ts +++ b/src/systems/ares/service/src/apis/auth/controllers/auth.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { env } from '../../../env'; import { tickets } from '../../../lib/tickets'; import { validateRedirectUrl } from '../../../lib/validateRedirectUrl'; diff --git a/src/systems/ares/service/src/apis/auth/controllers/authAttempt.ts b/src/systems/ares/service/src/apis/auth/controllers/authAttempt.ts index e1113e3cb..aaea1b07f 100644 --- a/src/systems/ares/service/src/apis/auth/controllers/authAttempt.ts +++ b/src/systems/ares/service/src/apis/auth/controllers/authAttempt.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { db } from '../../../db'; import { env } from '../../../env'; import { tickets } from '../../../lib/tickets'; diff --git a/src/systems/ares/service/src/apis/auth/controllers/authIntent.ts b/src/systems/ares/service/src/apis/auth/controllers/authIntent.ts index 050751ec5..11abc9d5c 100644 --- a/src/systems/ares/service/src/apis/auth/controllers/authIntent.ts +++ b/src/systems/ares/service/src/apis/auth/controllers/authIntent.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { authService } from '../../../services/auth'; import { publicApp } from '../_app'; import { authIntentApp } from '../middleware/authIntent'; diff --git a/src/systems/ares/service/src/apis/auth/controllers/device.ts b/src/systems/ares/service/src/apis/auth/controllers/device.ts index d257cad68..a3a5d8e92 100644 --- a/src/systems/ares/service/src/apis/auth/controllers/device.ts +++ b/src/systems/ares/service/src/apis/auth/controllers/device.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { deviceService } from '../../../services/device'; import { publicApp } from '../_app'; import { resolveApp } from '../lib/resolveApp'; diff --git a/src/systems/ares/service/src/apis/auth/controllers/index.ts b/src/systems/ares/service/src/apis/auth/controllers/index.ts index 6069714dc..612405f7e 100644 --- a/src/systems/ares/service/src/apis/auth/controllers/index.ts +++ b/src/systems/ares/service/src/apis/auth/controllers/index.ts @@ -1,4 +1,4 @@ -import { createServer, type InferClient } from '@lowerdeck/rpc-server'; +import { createServer, type InferClient } from '@mtsrc/rpc-server'; import { publicApp } from '../_app'; import { authenticationController } from './auth'; import { authAttemptController } from './authAttempt'; diff --git a/src/systems/ares/service/src/apis/auth/controllers/oauth.ts b/src/systems/ares/service/src/apis/auth/controllers/oauth.ts index ad642e6a5..396f378db 100644 --- a/src/systems/ares/service/src/apis/auth/controllers/oauth.ts +++ b/src/systems/ares/service/src/apis/auth/controllers/oauth.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { authService } from '../../../services/auth'; import { publicApp } from '../_app'; import { resolveApp } from '../lib/resolveApp'; diff --git a/src/systems/ares/service/src/apis/auth/endpoints/hooks.ts b/src/systems/ares/service/src/apis/auth/endpoints/hooks.ts index 5256a0925..563e7a1a6 100644 --- a/src/systems/ares/service/src/apis/auth/endpoints/hooks.ts +++ b/src/systems/ares/service/src/apis/auth/endpoints/hooks.ts @@ -1,7 +1,7 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { createHono } from '@lowerdeck/hono'; -import { generateCustomId } from '@lowerdeck/id'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { createHono } from '@mtsrc/hono'; +import { generateCustomId } from '@mtsrc/id'; +import { v } from '@mtsrc/validation'; import * as Cookies from 'cookie'; import { env } from '../../../env'; import { tickets } from '../../../lib/tickets'; diff --git a/src/systems/ares/service/src/apis/auth/endpoints/index.ts b/src/systems/ares/service/src/apis/auth/endpoints/index.ts index c5ac51846..fbddbd02d 100644 --- a/src/systems/ares/service/src/apis/auth/endpoints/index.ts +++ b/src/systems/ares/service/src/apis/auth/endpoints/index.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { authHooksApp } from './hooks'; import { publicApp } from './public'; diff --git a/src/systems/ares/service/src/apis/auth/endpoints/public.ts b/src/systems/ares/service/src/apis/auth/endpoints/public.ts index bd23e98b6..eef420602 100644 --- a/src/systems/ares/service/src/apis/auth/endpoints/public.ts +++ b/src/systems/ares/service/src/apis/auth/endpoints/public.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { createHono } from '@lowerdeck/hono'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { createHono } from '@mtsrc/hono'; +import { v } from '@mtsrc/validation'; import path, { join } from 'path'; import { env } from '../../../env'; import { htmlEncode } from '../../../lib/htmlEncode'; diff --git a/src/systems/ares/service/src/apis/auth/index.ts b/src/systems/ares/service/src/apis/auth/index.ts index d15072c03..a4dd71df3 100644 --- a/src/systems/ares/service/src/apis/auth/index.ts +++ b/src/systems/ares/service/src/apis/auth/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { rpcMux } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { rpcMux } from '@mtsrc/rpc-server'; import { authRPC } from './controllers'; import { endpointApp } from './endpoints'; diff --git a/src/systems/ares/service/src/apis/auth/lib/resolveApp.ts b/src/systems/ares/service/src/apis/auth/lib/resolveApp.ts index 14007a37a..0e163de6f 100644 --- a/src/systems/ares/service/src/apis/auth/lib/resolveApp.ts +++ b/src/systems/ares/service/src/apis/auth/lib/resolveApp.ts @@ -1,4 +1,4 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { notFoundError, ServiceError } from '@mtsrc/error'; import { db } from '../../../db'; export let resolveApp = async (clientId: string) => { diff --git a/src/systems/ares/service/src/apis/auth/middleware/auth.ts b/src/systems/ares/service/src/apis/auth/middleware/auth.ts index a39bee227..18a8167d5 100644 --- a/src/systems/ares/service/src/apis/auth/middleware/auth.ts +++ b/src/systems/ares/service/src/apis/auth/middleware/auth.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { sessionService } from '../../../services/session'; import { publicApp } from '../_app'; import { diff --git a/src/systems/ares/service/src/apis/auth/middleware/authAttempt.ts b/src/systems/ares/service/src/apis/auth/middleware/authAttempt.ts index c43d4f734..820fabd6b 100644 --- a/src/systems/ares/service/src/apis/auth/middleware/authAttempt.ts +++ b/src/systems/ares/service/src/apis/auth/middleware/authAttempt.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { authService } from '../../../services/auth'; import { publicApp } from '../_app'; diff --git a/src/systems/ares/service/src/apis/auth/middleware/authIntent.ts b/src/systems/ares/service/src/apis/auth/middleware/authIntent.ts index a48859449..f33e2eac6 100644 --- a/src/systems/ares/service/src/apis/auth/middleware/authIntent.ts +++ b/src/systems/ares/service/src/apis/auth/middleware/authIntent.ts @@ -1,4 +1,4 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; import { db } from '../../../db'; import { authService } from '../../../services/auth'; import { publicApp } from '../_app'; diff --git a/src/systems/ares/service/src/apis/auth/middleware/device.ts b/src/systems/ares/service/src/apis/auth/middleware/device.ts index 56c11c2bc..f688358a5 100644 --- a/src/systems/ares/service/src/apis/auth/middleware/device.ts +++ b/src/systems/ares/service/src/apis/auth/middleware/device.ts @@ -1,4 +1,4 @@ -import type { ServiceRequest } from '@lowerdeck/rpc-server'; +import type { ServiceRequest } from '@mtsrc/rpc-server'; import type Cookie from 'cookie'; import { env } from '../../../env'; import { deviceService } from '../../../services/device'; diff --git a/src/systems/ares/service/src/apis/auth/middleware/session.ts b/src/systems/ares/service/src/apis/auth/middleware/session.ts index 9837e53a3..62dd04d0e 100644 --- a/src/systems/ares/service/src/apis/auth/middleware/session.ts +++ b/src/systems/ares/service/src/apis/auth/middleware/session.ts @@ -1,4 +1,4 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; import { sessionService } from '../../../services/session'; import { publicApp } from '../_app'; import { extractDeviceInfo, SESSION_ID_COOKIE_NAME, setSessionCookie } from './device'; diff --git a/src/systems/ares/service/src/apis/auth/presenters/session.ts b/src/systems/ares/service/src/apis/auth/presenters/session.ts index e0ad63c9f..ba19dfa05 100644 --- a/src/systems/ares/service/src/apis/auth/presenters/session.ts +++ b/src/systems/ares/service/src/apis/auth/presenters/session.ts @@ -1,5 +1,5 @@ -import { base62 } from '@lowerdeck/base62'; -import type { IPInfo } from '@lowerdeck/ip-info'; +import { base62 } from '@mtsrc/base62'; +import type { IPInfo } from '@mtsrc/ip-info'; import { UAParser } from 'ua-parser-js'; import type { AuthDevice, AuthDeviceUserSession } from '../../../../prisma/generated/client'; diff --git a/src/systems/ares/service/src/apis/internal/_app.ts b/src/systems/ares/service/src/apis/internal/_app.ts index 2f0e2b4fe..53f5b8866 100644 --- a/src/systems/ares/service/src/apis/internal/_app.ts +++ b/src/systems/ares/service/src/apis/internal/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let internalApp = new Group(); diff --git a/src/systems/ares/service/src/apis/internal/controllers/app.ts b/src/systems/ares/service/src/apis/internal/controllers/app.ts index 1fb970d85..97ddadf7a 100644 --- a/src/systems/ares/service/src/apis/internal/controllers/app.ts +++ b/src/systems/ares/service/src/apis/internal/controllers/app.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { adminService } from '../../../services/admin'; import { internalApp } from '../_app'; import { appPresenter } from '../presenters'; diff --git a/src/systems/ares/service/src/apis/internal/controllers/index.ts b/src/systems/ares/service/src/apis/internal/controllers/index.ts index d1b6ac055..80bfdb26e 100644 --- a/src/systems/ares/service/src/apis/internal/controllers/index.ts +++ b/src/systems/ares/service/src/apis/internal/controllers/index.ts @@ -1,4 +1,4 @@ -import { createServer, type InferClient } from '@lowerdeck/rpc-server'; +import { createServer, type InferClient } from '@mtsrc/rpc-server'; import { internalApp } from '../_app'; import { appController } from './app'; import { oauthController } from './oauth'; diff --git a/src/systems/ares/service/src/apis/internal/controllers/oauth.ts b/src/systems/ares/service/src/apis/internal/controllers/oauth.ts index 61da60410..5401d5bed 100644 --- a/src/systems/ares/service/src/apis/internal/controllers/oauth.ts +++ b/src/systems/ares/service/src/apis/internal/controllers/oauth.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { db } from '../../../db'; import { authService } from '../../../services/auth'; import { sessionPresenter } from '../../auth/presenters'; diff --git a/src/systems/ares/service/src/apis/internal/controllers/session.ts b/src/systems/ares/service/src/apis/internal/controllers/session.ts index c87ac9878..893ee451c 100644 --- a/src/systems/ares/service/src/apis/internal/controllers/session.ts +++ b/src/systems/ares/service/src/apis/internal/controllers/session.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { deviceService } from '../../../services/device'; import { sessionService } from '../../../services/session'; import { internalApp } from '../_app'; diff --git a/src/systems/ares/service/src/apis/internal/controllers/sso.ts b/src/systems/ares/service/src/apis/internal/controllers/sso.ts index 2f9458eaa..4dc4934f8 100644 --- a/src/systems/ares/service/src/apis/internal/controllers/sso.ts +++ b/src/systems/ares/service/src/apis/internal/controllers/sso.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { env } from '../../../env'; import { adminService } from '../../../services/admin'; import { ssoService } from '../../../services/sso'; diff --git a/src/systems/ares/service/src/apis/internal/controllers/tenant.ts b/src/systems/ares/service/src/apis/internal/controllers/tenant.ts index 0e9588b25..c6732ddf8 100644 --- a/src/systems/ares/service/src/apis/internal/controllers/tenant.ts +++ b/src/systems/ares/service/src/apis/internal/controllers/tenant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { adminService } from '../../../services/admin'; import { internalApp } from '../_app'; import { tenantPresenter } from '../presenters'; diff --git a/src/systems/ares/service/src/apis/internal/controllers/user.ts b/src/systems/ares/service/src/apis/internal/controllers/user.ts index 3d2fc38d6..a7da23172 100644 --- a/src/systems/ares/service/src/apis/internal/controllers/user.ts +++ b/src/systems/ares/service/src/apis/internal/controllers/user.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { adminService } from '../../../services/admin'; import { userService } from '../../../services/user'; import { diff --git a/src/systems/ares/service/src/apis/internal/index.ts b/src/systems/ares/service/src/apis/internal/index.ts index ee55bc671..5ff145e1d 100644 --- a/src/systems/ares/service/src/apis/internal/index.ts +++ b/src/systems/ares/service/src/apis/internal/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { rpcMux } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { rpcMux } from '@mtsrc/rpc-server'; import { internalRPC } from './controllers'; export type { InternalClient } from './controllers'; diff --git a/src/systems/ares/service/src/apis/sso/endpoints/auth.ts b/src/systems/ares/service/src/apis/sso/endpoints/auth.ts index 0961c9f79..b9b040ac7 100644 --- a/src/systems/ares/service/src/apis/sso/endpoints/auth.ts +++ b/src/systems/ares/service/src/apis/sso/endpoints/auth.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { createHono, useValidatedQuery } from '@lowerdeck/hono'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { createHono, useValidatedQuery } from '@mtsrc/hono'; +import { v } from '@mtsrc/validation'; import { createHash, randomBytes } from 'crypto'; import { db } from '../../../db'; import { env } from '../../../env'; diff --git a/src/systems/ares/service/src/apis/sso/endpoints/index.ts b/src/systems/ares/service/src/apis/sso/endpoints/index.ts index bd238464b..32ac06bcb 100644 --- a/src/systems/ares/service/src/apis/sso/endpoints/index.ts +++ b/src/systems/ares/service/src/apis/sso/endpoints/index.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { ssoAuthApp } from './auth'; import { jxnApp } from './jxn'; import { setupApp } from './setup'; diff --git a/src/systems/ares/service/src/apis/sso/endpoints/jxn.ts b/src/systems/ares/service/src/apis/sso/endpoints/jxn.ts index 5750a4dc3..4a7fe86cb 100644 --- a/src/systems/ares/service/src/apis/sso/endpoints/jxn.ts +++ b/src/systems/ares/service/src/apis/sso/endpoints/jxn.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { jackson } from '../../../lib/jackson'; import { errorHtml } from '../pages/error'; diff --git a/src/systems/ares/service/src/apis/sso/endpoints/setup.ts b/src/systems/ares/service/src/apis/sso/endpoints/setup.ts index e0d67f95c..ff8d838ae 100644 --- a/src/systems/ares/service/src/apis/sso/endpoints/setup.ts +++ b/src/systems/ares/service/src/apis/sso/endpoints/setup.ts @@ -1,5 +1,5 @@ -import { createHono, useValidatedBody, useValidatedQuery } from '@lowerdeck/hono'; -import { v } from '@lowerdeck/validation'; +import { createHono, useValidatedBody, useValidatedQuery } from '@mtsrc/hono'; +import { v } from '@mtsrc/validation'; import { env } from '../../../env'; import { ssoService } from '../../../services/sso'; import { errorHtml } from '../pages/error'; diff --git a/src/systems/ares/service/src/cron/cleanup.ts b/src/systems/ares/service/src/cron/cleanup.ts index c14058a11..9c197874a 100644 --- a/src/systems/ares/service/src/cron/cleanup.ts +++ b/src/systems/ares/service/src/cron/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subDays } from 'date-fns'; import { db } from '../db'; diff --git a/src/systems/ares/service/src/db.ts b/src/systems/ares/service/src/db.ts index 2504003c4..44028d328 100644 --- a/src/systems/ares/service/src/db.ts +++ b/src/systems/ares/service/src/db.ts @@ -1,7 +1,7 @@ import { provideExecutionContext, withExecutionContextOptional -} from '@lowerdeck/execution-context'; +} from '@mtsrc/execution-context'; import { PrismaPg } from '@prisma/adapter-pg'; import { AsyncLocalStorage } from 'async_hooks'; import PQueue from 'p-queue'; diff --git a/src/systems/ares/service/src/email/client.ts b/src/systems/ares/service/src/email/client.ts index 8cdf9fa08..068e10748 100644 --- a/src/systems/ares/service/src/email/client.ts +++ b/src/systems/ares/service/src/email/client.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { delay } from '@mtsrc/delay'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { createRelayClient, type EmailIdentity, diff --git a/src/systems/ares/service/src/email/successfulLogin.tsx b/src/systems/ares/service/src/email/successfulLogin.tsx index 55dec19d7..447efc32d 100644 --- a/src/systems/ares/service/src/email/successfulLogin.tsx +++ b/src/systems/ares/service/src/email/successfulLogin.tsx @@ -1,4 +1,4 @@ -import { ipInfo } from '@lowerdeck/ip-info'; +import { ipInfo } from '@mtsrc/ip-info'; import { createEmail, createTemplate, diff --git a/src/systems/ares/service/src/endpoints.ts b/src/systems/ares/service/src/endpoints.ts index d918d0ee4..0a08cce3f 100644 --- a/src/systems/ares/service/src/endpoints.ts +++ b/src/systems/ares/service/src/endpoints.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import { RedisClient } from 'bun'; import { adminApi } from './apis/admin'; import { authApi } from './apis/auth'; diff --git a/src/systems/ares/service/src/env.ts b/src/systems/ares/service/src/env.ts index 35b19ea22..9c9ba543c 100644 --- a/src/systems/ares/service/src/env.ts +++ b/src/systems/ares/service/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/ares/service/src/events/user.ts b/src/systems/ares/service/src/events/user.ts index 7013802b6..09d26c903 100644 --- a/src/systems/ares/service/src/events/user.ts +++ b/src/systems/ares/service/src/events/user.ts @@ -1,4 +1,4 @@ -import { EventObject, eventObjectAction } from '@lowerdeck/event'; +import { EventObject, eventObjectAction } from '@mtsrc/event'; import type { User } from '../../prisma/generated/client'; import { env } from '../env'; diff --git a/src/systems/ares/service/src/id.ts b/src/systems/ares/service/src/id.ts index 2263ef233..a0b24ee01 100644 --- a/src/systems/ares/service/src/id.ts +++ b/src/systems/ares/service/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ app: idType.sorted('app_'), diff --git a/src/systems/ares/service/src/instrument.ts b/src/systems/ares/service/src/instrument.ts index f1f173b93..6eeeb10a8 100644 --- a/src/systems/ares/service/src/instrument.ts +++ b/src/systems/ares/service/src/instrument.ts @@ -1,4 +1,4 @@ -import { setSentry } from '@lowerdeck/sentry'; +import { setSentry } from '@mtsrc/sentry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/ares/service/src/lib/deletedEmail.ts b/src/systems/ares/service/src/lib/deletedEmail.ts index 96ee88d21..2fa466358 100644 --- a/src/systems/ares/service/src/lib/deletedEmail.ts +++ b/src/systems/ares/service/src/lib/deletedEmail.ts @@ -1,4 +1,4 @@ -import { generatePlainId } from '@lowerdeck/id'; +import { generatePlainId } from '@mtsrc/id'; export let deletedEmail = { delete: (email: string) => { diff --git a/src/systems/ares/service/src/lib/redirectDomains.ts b/src/systems/ares/service/src/lib/redirectDomains.ts index a6f7a216a..67d5c93e0 100644 --- a/src/systems/ares/service/src/lib/redirectDomains.ts +++ b/src/systems/ares/service/src/lib/redirectDomains.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; let invalidRedirectDomainError = () => new ServiceError( diff --git a/src/systems/ares/service/src/lib/tickets.ts b/src/systems/ares/service/src/lib/tickets.ts index 05ae7830c..56d707a04 100644 --- a/src/systems/ares/service/src/lib/tickets.ts +++ b/src/systems/ares/service/src/lib/tickets.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Tokens } from '@lowerdeck/tokens'; -import type { ValidationType } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Tokens } from '@mtsrc/tokens'; +import type { ValidationType } from '@mtsrc/validation'; import { addSeconds } from 'date-fns'; import { env } from '../env'; diff --git a/src/systems/ares/service/src/lib/turnstile.ts b/src/systems/ares/service/src/lib/turnstile.ts index 45f56c569..598da6cdc 100644 --- a/src/systems/ares/service/src/lib/turnstile.ts +++ b/src/systems/ares/service/src/lib/turnstile.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; let Sentry = getSentry(); diff --git a/src/systems/ares/service/src/lib/validateRedirectUrl.ts b/src/systems/ares/service/src/lib/validateRedirectUrl.ts index e19946351..c4012f16c 100644 --- a/src/systems/ares/service/src/lib/validateRedirectUrl.ts +++ b/src/systems/ares/service/src/lib/validateRedirectUrl.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { isRedirectDomainMatch } from './redirectDomains'; export let validateRedirectUrl = (redirectUrl: string, redirectDomains: string[]) => { diff --git a/src/systems/ares/service/src/services/accessGroup.ts b/src/systems/ares/service/src/services/accessGroup.ts index af8522660..f5833d775 100644 --- a/src/systems/ares/service/src/services/accessGroup.ts +++ b/src/systems/ares/service/src/services/accessGroup.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; import type { AccessGroup, App, User } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/ares/service/src/services/admin.ts b/src/systems/ares/service/src/services/admin.ts index 2597c3909..2b007bc0d 100644 --- a/src/systems/ares/service/src/services/admin.ts +++ b/src/systems/ares/service/src/services/admin.ts @@ -2,10 +2,10 @@ import { notFoundError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addHours } from 'date-fns'; import type { Admin, App } from '../../prisma/generated/client'; import { db, withTransaction } from '../db'; diff --git a/src/systems/ares/service/src/services/auditLog.ts b/src/systems/ares/service/src/services/auditLog.ts index 585784309..d6d306ed7 100644 --- a/src/systems/ares/service/src/services/auditLog.ts +++ b/src/systems/ares/service/src/services/auditLog.ts @@ -1,4 +1,4 @@ -import { Paginator } from '@lowerdeck/pagination'; +import { Paginator } from '@mtsrc/pagination'; import type { App } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/ares/service/src/services/auth.ts b/src/systems/ares/service/src/services/auth.ts index db2393b1d..ad20234b4 100644 --- a/src/systems/ares/service/src/services/auth.ts +++ b/src/systems/ares/service/src/services/auth.ts @@ -3,9 +3,9 @@ import { forbiddenError, notFoundError, ServiceError -} from '@lowerdeck/error'; -import { generateCode } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { generateCode } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; import { addMinutes, subMinutes } from 'date-fns'; import type { App, diff --git a/src/systems/ares/service/src/services/authBlock.ts b/src/systems/ares/service/src/services/authBlock.ts index 29fb7515a..bd8df0e8c 100644 --- a/src/systems/ares/service/src/services/authBlock.ts +++ b/src/systems/ares/service/src/services/authBlock.ts @@ -1,5 +1,5 @@ -import { forbiddenError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { addMinutes, subMinutes } from 'date-fns'; import { db } from '../db'; import type { Context } from '../lib/context'; diff --git a/src/systems/ares/service/src/services/device.ts b/src/systems/ares/service/src/services/device.ts index 14f8d3ad8..a81791747 100644 --- a/src/systems/ares/service/src/services/device.ts +++ b/src/systems/ares/service/src/services/device.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; import { addMinutes, addWeeks } from 'date-fns'; import type { App, diff --git a/src/systems/ares/service/src/services/oauthProvider.ts b/src/systems/ares/service/src/services/oauthProvider.ts index c4875c985..4edba6347 100644 --- a/src/systems/ares/service/src/services/oauthProvider.ts +++ b/src/systems/ares/service/src/services/oauthProvider.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; import type { App, AppOAuthProvider, OAuthProviderType } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/ares/service/src/services/session.ts b/src/systems/ares/service/src/services/session.ts index 0ccb2dd5d..1a6dbd9e1 100644 --- a/src/systems/ares/service/src/services/session.ts +++ b/src/systems/ares/service/src/services/session.ts @@ -1,6 +1,6 @@ -import { createCachedFunction } from '@lowerdeck/cache'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { createCachedFunction } from '@mtsrc/cache'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { AuthDevice, AuthDeviceUserSession, User } from '../../prisma/generated/client'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/ares/service/src/services/sso.ts b/src/systems/ares/service/src/services/sso.ts index 663d6a223..d684332a5 100644 --- a/src/systems/ares/service/src/services/sso.ts +++ b/src/systems/ares/service/src/services/sso.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; import type { App, SsoConnection, SsoTenant, SsoUser } from '../../prisma/generated/client'; import { db } from '../db'; import { getId, ID } from '../id'; diff --git a/src/systems/ares/service/src/services/user.ts b/src/systems/ares/service/src/services/user.ts index f51934545..b8af4962f 100644 --- a/src/systems/ares/service/src/services/user.ts +++ b/src/systems/ares/service/src/services/user.ts @@ -4,8 +4,8 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { App, User, UserEmail, UserTermsType } from '../../prisma/generated/client'; import { addAfterTransactionHook, db, withTransaction } from '../db'; import { terms } from '../definitions'; diff --git a/src/systems/ares/service/src/test/setup.ts b/src/systems/ares/service/src/test/setup.ts index cecf90632..52a6f2c55 100644 --- a/src/systems/ares/service/src/test/setup.ts +++ b/src/systems/ares/service/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/ares/service/src/worker.ts b/src/systems/ares/service/src/worker.ts index 3a93f631e..0b2ba83f5 100644 --- a/src/systems/ares/service/src/worker.ts +++ b/src/systems/ares/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { cleanupCron } from './cron/cleanup'; await runQueueProcessors([cleanupCron]); diff --git a/src/systems/ares/service/vitest.config.ts b/src/systems/ares/service/vitest.config.ts index 37ea0bccf..f4bc04b18 100644 --- a/src/systems/ares/service/vitest.config.ts +++ b/src/systems/ares/service/vitest.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { const env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/ares/service/vitest.e2e.config.ts b/src/systems/ares/service/vitest.e2e.config.ts index 190eac2b2..6caee0498 100644 --- a/src/systems/ares/service/vitest.e2e.config.ts +++ b/src/systems/ares/service/vitest.e2e.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/cargo/db/package.json b/src/systems/cargo/db/package.json index f5ece1bc5..b21f25bd6 100644 --- a/src/systems/cargo/db/package.json +++ b/src/systems/cargo/db/package.json @@ -18,17 +18,17 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "1.0.10", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "p-queue": "^9.1.0", - "prisma": "^7.2.0" + "prisma": "^7.2.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "types": "src/index.ts", "exports": { diff --git a/src/systems/cargo/db/src/db.ts b/src/systems/cargo/db/src/db.ts index dd8ba97d2..a36ec5a7a 100644 --- a/src/systems/cargo/db/src/db.ts +++ b/src/systems/cargo/db/src/db.ts @@ -1,7 +1,7 @@ import { provideExecutionContext, withExecutionContextOptional -} from '@lowerdeck/execution-context'; +} from '@mtsrc/execution-context'; import { PrismaPg } from '@prisma/adapter-pg'; import { readReplicas } from '@prisma/extension-read-replicas'; import { AsyncLocalStorage } from 'async_hooks'; diff --git a/src/systems/cargo/db/src/env.ts b/src/systems/cargo/db/src/env.ts index 490235e65..cd7fd7a41 100644 --- a/src/systems/cargo/db/src/env.ts +++ b/src/systems/cargo/db/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/cargo/db/src/id.ts b/src/systems/cargo/db/src/id.ts index e74cfdd92..da60f71a0 100644 --- a/src/systems/cargo/db/src/id.ts +++ b/src/systems/cargo/db/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ tenant: idType.sorted('crg_tn_'), diff --git a/src/systems/cargo/modules/doc/package.json b/src/systems/cargo/modules/doc/package.json index 178fd01e3..4e7ab79eb 100644 --- a/src/systems/cargo/modules/doc/package.json +++ b/src/systems/cargo/modules/doc/package.json @@ -15,19 +15,19 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/redis": "^1.0.6", - "@lowerdeck/service": "^1.0.7", "@metorial-cargo/db": "^1.0.0", "@metorial-cargo/list-utils": "^1.0.0", "@metorial-cargo/module-file": "^1.0.0", "@metorial-cargo/module-store": "^1.0.0", - "hono": "^4.11.3" + "hono": "^4.11.3", + "@mtsrc/cron": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/service": "1.0.0" }, "module": "src/index.ts", "types": "src/index.ts", diff --git a/src/systems/cargo/modules/doc/src/internal/documentContent.ts b/src/systems/cargo/modules/doc/src/internal/documentContent.ts index 5e9af0dcf..c18532274 100644 --- a/src/systems/cargo/modules/doc/src/internal/documentContent.ts +++ b/src/systems/cargo/modules/doc/src/internal/documentContent.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import type { Prisma, TenantActor } from '@metorial-cargo/db'; import { getId, withTransaction } from '@metorial-cargo/db'; import type { CargoTenantEnvironment } from '@metorial-cargo/module-file'; diff --git a/src/systems/cargo/modules/doc/src/internal/documentContentStore.ts b/src/systems/cargo/modules/doc/src/internal/documentContentStore.ts index 8e0352742..df7d44838 100644 --- a/src/systems/cargo/modules/doc/src/internal/documentContentStore.ts +++ b/src/systems/cargo/modules/doc/src/internal/documentContentStore.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { withTransaction } from '@metorial-cargo/db'; diff --git a/src/systems/cargo/modules/doc/src/internal/documentDraft.ts b/src/systems/cargo/modules/doc/src/internal/documentDraft.ts index bd8f11f80..9f7f51dfe 100644 --- a/src/systems/cargo/modules/doc/src/internal/documentDraft.ts +++ b/src/systems/cargo/modules/doc/src/internal/documentDraft.ts @@ -1,7 +1,7 @@ -import { delay } from '@lowerdeck/delay'; -import { generatePlainId } from '@lowerdeck/id'; -import { createRedisClient } from '@lowerdeck/redis'; -import { Service } from '@lowerdeck/service'; +import { delay } from '@mtsrc/delay'; +import { generatePlainId } from '@mtsrc/id'; +import { createRedisClient } from '@mtsrc/redis'; +import { Service } from '@mtsrc/service'; import { env } from '@metorial-cargo/db'; export type DocumentDraft = { diff --git a/src/systems/cargo/modules/doc/src/internal/documentParticipant.ts b/src/systems/cargo/modules/doc/src/internal/documentParticipant.ts index cdbc8efbe..99f8cec6c 100644 --- a/src/systems/cargo/modules/doc/src/internal/documentParticipant.ts +++ b/src/systems/cargo/modules/doc/src/internal/documentParticipant.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import type { Document, TenantActor } from '@metorial-cargo/db'; import { getId, withTransaction } from '@metorial-cargo/db'; import { storeAccessService } from '@metorial-cargo/module-store'; diff --git a/src/systems/cargo/modules/doc/src/internal/documentSync.ts b/src/systems/cargo/modules/doc/src/internal/documentSync.ts index e29422db2..311b04dc8 100644 --- a/src/systems/cargo/modules/doc/src/internal/documentSync.ts +++ b/src/systems/cargo/modules/doc/src/internal/documentSync.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, withTransaction } from '@metorial-cargo/db'; import { storeVersionService } from '@metorial-cargo/module-store'; import { enqueueDocumentLifecycle } from '../queues/lifecycle'; diff --git a/src/systems/cargo/modules/doc/src/internal/documentVersioning.ts b/src/systems/cargo/modules/doc/src/internal/documentVersioning.ts index b4a8d22c7..567c78376 100644 --- a/src/systems/cargo/modules/doc/src/internal/documentVersioning.ts +++ b/src/systems/cargo/modules/doc/src/internal/documentVersioning.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { getId, withTransaction } from '@metorial-cargo/db'; import type { documentInclude } from '../services/document'; diff --git a/src/systems/cargo/modules/doc/src/live/index.ts b/src/systems/cargo/modules/doc/src/live/index.ts index d27c12249..363fe74ef 100644 --- a/src/systems/cargo/modules/doc/src/live/index.ts +++ b/src/systems/cargo/modules/doc/src/live/index.ts @@ -1,6 +1,6 @@ -import { internalServerError, isServiceError } from '@lowerdeck/error'; -import { createHono } from '@lowerdeck/hono'; -import { generatePlainId } from '@lowerdeck/id'; +import { internalServerError, isServiceError } from '@mtsrc/error'; +import { createHono } from '@mtsrc/hono'; +import { generatePlainId } from '@mtsrc/id'; import { db } from '@metorial-cargo/db'; import { upgradeWebSocket, websocket } from 'hono/bun'; import type { WSContext } from 'hono/ws'; diff --git a/src/systems/cargo/modules/doc/src/queues/documentCleanup.ts b/src/systems/cargo/modules/doc/src/queues/documentCleanup.ts index dded2f0a7..f54790f5e 100644 --- a/src/systems/cargo/modules/doc/src/queues/documentCleanup.ts +++ b/src/systems/cargo/modules/doc/src/queues/documentCleanup.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { db, env, withTransaction } from '@metorial-cargo/db'; import { subDays } from 'date-fns'; diff --git a/src/systems/cargo/modules/doc/src/queues/documentDraftVersionFlush.ts b/src/systems/cargo/modules/doc/src/queues/documentDraftVersionFlush.ts index b44884807..9c968de84 100644 --- a/src/systems/cargo/modules/doc/src/queues/documentDraftVersionFlush.ts +++ b/src/systems/cargo/modules/doc/src/queues/documentDraftVersionFlush.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { db, env, getId, withTransaction } from '@metorial-cargo/db'; import { storeVersionService } from '@metorial-cargo/module-store'; import { internalDocumentDraftService, internalDocumentVersioningService } from '../internal'; diff --git a/src/systems/cargo/modules/doc/src/queues/documentFlush.ts b/src/systems/cargo/modules/doc/src/queues/documentFlush.ts index ad200db3d..2eb3c9509 100644 --- a/src/systems/cargo/modules/doc/src/queues/documentFlush.ts +++ b/src/systems/cargo/modules/doc/src/queues/documentFlush.ts @@ -1,6 +1,6 @@ -import { createCron } from '@lowerdeck/cron'; -import { forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { env, withTransaction } from '@metorial-cargo/db'; import { storeVersionService } from '@metorial-cargo/module-store'; import { internalDocumentContentService, internalDocumentDraftService } from '../internal'; diff --git a/src/systems/cargo/modules/doc/src/queues/documentVersionSync.ts b/src/systems/cargo/modules/doc/src/queues/documentVersionSync.ts index a6d5a63f9..a550903ee 100644 --- a/src/systems/cargo/modules/doc/src/queues/documentVersionSync.ts +++ b/src/systems/cargo/modules/doc/src/queues/documentVersionSync.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { env } from '@metorial-cargo/db'; import { internalDocumentSyncService } from '../internal/documentSync'; diff --git a/src/systems/cargo/modules/doc/src/queues/index.ts b/src/systems/cargo/modules/doc/src/queues/index.ts index 5ca367f74..f27828c8c 100644 --- a/src/systems/cargo/modules/doc/src/queues/index.ts +++ b/src/systems/cargo/modules/doc/src/queues/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { documentCleanupProcessors } from './documentCleanup'; import { documentDraftVersionFlushProcessors } from './documentDraftVersionFlush'; import { documentFlushProcessors } from './documentFlush'; diff --git a/src/systems/cargo/modules/doc/src/queues/lifecycle.ts b/src/systems/cargo/modules/doc/src/queues/lifecycle.ts index 10b6976cf..8829afc42 100644 --- a/src/systems/cargo/modules/doc/src/queues/lifecycle.ts +++ b/src/systems/cargo/modules/doc/src/queues/lifecycle.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { addAfterTransactionHook, db, env } from '@metorial-cargo/db'; type DocumentLifecycleEvent = 'created' | 'updated' | 'archived' | 'contents-changed'; diff --git a/src/systems/cargo/modules/doc/src/services/document.ts b/src/systems/cargo/modules/doc/src/services/document.ts index 9a3b68fbe..9708af722 100644 --- a/src/systems/cargo/modules/doc/src/services/document.ts +++ b/src/systems/cargo/modules/doc/src/services/document.ts @@ -3,9 +3,9 @@ import { forbiddenError, notFoundError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma, StoreCloneType, StoreParticipantPermissions } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/doc/src/services/documentParticipant.ts b/src/systems/cargo/modules/doc/src/services/documentParticipant.ts index 5b12eb995..b0486fe22 100644 --- a/src/systems/cargo/modules/doc/src/services/documentParticipant.ts +++ b/src/systems/cargo/modules/doc/src/services/documentParticipant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma, StoreParticipantPermissions } from '@metorial-cargo/db'; import { db } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/doc/src/services/documentVersion.ts b/src/systems/cargo/modules/doc/src/services/documentVersion.ts index f27d3efad..0bde4011b 100644 --- a/src/systems/cargo/modules/doc/src/services/documentVersion.ts +++ b/src/systems/cargo/modules/doc/src/services/documentVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma, StoreParticipantPermissions } from '@metorial-cargo/db'; import { db } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/file/package.json b/src/systems/cargo/modules/file/package.json index 26c7912b2..9b9de19d0 100644 --- a/src/systems/cargo/modules/file/package.json +++ b/src/systems/cargo/modules/file/package.json @@ -15,25 +15,25 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/forwarded-for": "^1.0.4", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/tokens": "^1.0.5", - "@lowerdeck/validation": "1.0.10", "@metorial-cargo/db": "^1.0.0", "@metorial-cargo/list-utils": "^1.0.0", - "@metorial-platform-systems/object-storage-client": "workspace:*" + "@metorial-platform-systems/object-storage-client": "workspace:*", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/tokens": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "module": "src/index.ts", "types": "src/index.ts", diff --git a/src/systems/cargo/modules/file/src/http.ts b/src/systems/cargo/modules/file/src/http.ts index fd2d07d4c..8edc958df 100644 --- a/src/systems/cargo/modules/file/src/http.ts +++ b/src/systems/cargo/modules/file/src/http.ts @@ -1,9 +1,9 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context'; -import { extractIp } from '@lowerdeck/forwarded-for'; -import type { Context } from '@lowerdeck/hono'; -import { cors, createHono } from '@lowerdeck/hono'; -import { generatePlainId } from '@lowerdeck/id'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { createExecutionContext, provideExecutionContext } from '@mtsrc/execution-context'; +import { extractIp } from '@mtsrc/forwarded-for'; +import type { Context } from '@mtsrc/hono'; +import { cors, createHono } from '@mtsrc/hono'; +import { generatePlainId } from '@mtsrc/id'; import { documentService } from '@metorial-cargo/module-doc'; import { environmentService, diff --git a/src/systems/cargo/modules/file/src/lib/signedDownloadUrl.ts b/src/systems/cargo/modules/file/src/lib/signedDownloadUrl.ts index 7ec594649..c290dbee9 100644 --- a/src/systems/cargo/modules/file/src/lib/signedDownloadUrl.ts +++ b/src/systems/cargo/modules/file/src/lib/signedDownloadUrl.ts @@ -1,4 +1,4 @@ -import { Tokens } from '@lowerdeck/tokens'; +import { Tokens } from '@mtsrc/tokens'; import type { File } from '@metorial-cargo/db'; import { env } from '@metorial-cargo/db'; diff --git a/src/systems/cargo/modules/file/src/queues/fileCleanup.ts b/src/systems/cargo/modules/file/src/queues/fileCleanup.ts index b67a81f54..6203bea78 100644 --- a/src/systems/cargo/modules/file/src/queues/fileCleanup.ts +++ b/src/systems/cargo/modules/file/src/queues/fileCleanup.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { db, env } from '@metorial-cargo/db'; import { getCargoFilesBucketName, getStorage } from '../storage'; diff --git a/src/systems/cargo/modules/file/src/queues/fileExpiration.ts b/src/systems/cargo/modules/file/src/queues/fileExpiration.ts index 0d65d92d9..12d2fddd2 100644 --- a/src/systems/cargo/modules/file/src/queues/fileExpiration.ts +++ b/src/systems/cargo/modules/file/src/queues/fileExpiration.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { db, env, withTransaction } from '@metorial-cargo/db'; import { internalDocumentDraftService } from '@metorial-cargo/module-doc'; diff --git a/src/systems/cargo/modules/file/src/queues/index.ts b/src/systems/cargo/modules/file/src/queues/index.ts index 151193c07..95c78c9d1 100644 --- a/src/systems/cargo/modules/file/src/queues/index.ts +++ b/src/systems/cargo/modules/file/src/queues/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { fileCleanupProcessors } from './fileCleanup'; import { fileExpirationProcessors } from './fileExpiration'; diff --git a/src/systems/cargo/modules/file/src/services/actor.ts b/src/systems/cargo/modules/file/src/services/actor.ts index dc274e8e6..dcc4248b0 100644 --- a/src/systems/cargo/modules/file/src/services/actor.ts +++ b/src/systems/cargo/modules/file/src/services/actor.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, getId } from '@metorial-cargo/db'; import type { CargoTenantEnvironment } from './filePurpose'; diff --git a/src/systems/cargo/modules/file/src/services/environment.ts b/src/systems/cargo/modules/file/src/services/environment.ts index 52a9db361..a8eed2ca2 100644 --- a/src/systems/cargo/modules/file/src/services/environment.ts +++ b/src/systems/cargo/modules/file/src/services/environment.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, getId } from '@metorial-cargo/db'; import { storeTemplateSyncSingleQueue } from '@metorial-cargo/module-store'; diff --git a/src/systems/cargo/modules/file/src/services/file.ts b/src/systems/cargo/modules/file/src/services/file.ts index 8cc913266..1e7cb1d14 100644 --- a/src/systems/cargo/modules/file/src/services/file.ts +++ b/src/systems/cargo/modules/file/src/services/file.ts @@ -3,10 +3,10 @@ import { forbiddenError, notFoundError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { generatePlainId } from '@lowerdeck/id'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { generatePlainId } from '@mtsrc/id'; import type { File, Prisma, StoreParticipantPermissions } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/file/src/services/fileDownload.ts b/src/systems/cargo/modules/file/src/services/fileDownload.ts index 71ca7edad..c69330c66 100644 --- a/src/systems/cargo/modules/file/src/services/fileDownload.ts +++ b/src/systems/cargo/modules/file/src/services/fileDownload.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '@metorial-cargo/db'; import { verifySignedFileDownloadKey } from '../lib/signedDownloadUrl'; diff --git a/src/systems/cargo/modules/file/src/services/fileLink.ts b/src/systems/cargo/modules/file/src/services/fileLink.ts index 80a818870..add6f1569 100644 --- a/src/systems/cargo/modules/file/src/services/fileLink.ts +++ b/src/systems/cargo/modules/file/src/services/fileLink.ts @@ -3,10 +3,10 @@ import { forbiddenError, notFoundError, ServiceError -} from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { FileLink, Prisma } from '@metorial-cargo/db'; import { db, env, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/file/src/services/filePurpose.ts b/src/systems/cargo/modules/file/src/services/filePurpose.ts index 91ca92c04..e74e81971 100644 --- a/src/systems/cargo/modules/file/src/services/filePurpose.ts +++ b/src/systems/cargo/modules/file/src/services/filePurpose.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, getId } from '@metorial-cargo/db'; export type CargoTenantEnvironment = { diff --git a/src/systems/cargo/modules/file/src/services/fileReference.ts b/src/systems/cargo/modules/file/src/services/fileReference.ts index 760d22f71..491f24033 100644 --- a/src/systems/cargo/modules/file/src/services/fileReference.ts +++ b/src/systems/cargo/modules/file/src/services/fileReference.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { File, FileLink, FileReference } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/file/src/services/reconcile.ts b/src/systems/cargo/modules/file/src/services/reconcile.ts index d502a14fd..365fcb6f2 100644 --- a/src/systems/cargo/modules/file/src/services/reconcile.ts +++ b/src/systems/cargo/modules/file/src/services/reconcile.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { db } from '@metorial-cargo/db'; import { fileService } from './file'; import { fileLinkService } from './fileLink'; diff --git a/src/systems/cargo/modules/file/src/services/tenant.ts b/src/systems/cargo/modules/file/src/services/tenant.ts index 75dce5fd8..2805b82e1 100644 --- a/src/systems/cargo/modules/file/src/services/tenant.ts +++ b/src/systems/cargo/modules/file/src/services/tenant.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, getId } from '@metorial-cargo/db'; class TenantServiceImpl { diff --git a/src/systems/cargo/modules/file/src/storage.ts b/src/systems/cargo/modules/file/src/storage.ts index f89453a18..279386fec 100644 --- a/src/systems/cargo/modules/file/src/storage.ts +++ b/src/systems/cargo/modules/file/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { env } from '@metorial-cargo/db'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; diff --git a/src/systems/cargo/modules/search/package.json b/src/systems/cargo/modules/search/package.json index 5d627cb5c..9a6023230 100644 --- a/src/systems/cargo/modules/search/package.json +++ b/src/systems/cargo/modules/search/package.json @@ -13,10 +13,10 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/voyager-client": "workspace:*" + "@metorial-platform-systems/voyager-client": "workspace:*", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/validation": "1.0.0" } } diff --git a/src/systems/cargo/modules/search/src/env.ts b/src/systems/cargo/modules/search/src/env.ts index 02a12eb07..eb63ac287 100644 --- a/src/systems/cargo/modules/search/src/env.ts +++ b/src/systems/cargo/modules/search/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/cargo/modules/search/src/index.ts b/src/systems/cargo/modules/search/src/index.ts index f11ee4f8e..fca1179d9 100644 --- a/src/systems/cargo/modules/search/src/index.ts +++ b/src/systems/cargo/modules/search/src/index.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { delay } from '@mtsrc/delay'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { createVoyagerClient } from '@metorial-platform-systems/voyager-client'; import { env } from './env'; diff --git a/src/systems/cargo/modules/skill/package.json b/src/systems/cargo/modules/skill/package.json index 7df7ef6fd..3cd629b48 100644 --- a/src/systems/cargo/modules/skill/package.json +++ b/src/systems/cargo/modules/skill/package.json @@ -15,10 +15,6 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", "@metorial-cargo/db": "^1.0.0", "@metorial-cargo/list-utils": "^1.0.0", "@metorial-cargo/module-doc": "^1.0.0", @@ -27,7 +23,11 @@ "@metorial-cargo/module-store": "^1.0.0", "@metorial-platform-systems/origin-client": "^1.0.0", "@metorial/code-bucket-service-generated": "^1.0.0", - "yaml": "^2.9.0" + "yaml": "^2.9.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0" }, "module": "src/index.ts", "types": "src/index.ts", diff --git a/src/systems/cargo/modules/skill/src/internal/image.ts b/src/systems/cargo/modules/skill/src/internal/image.ts index 6f53313c7..45359da7c 100644 --- a/src/systems/cargo/modules/skill/src/internal/image.ts +++ b/src/systems/cargo/modules/skill/src/internal/image.ts @@ -1,5 +1,5 @@ -import { forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { EntityImage, StoreParticipantPermissions } from '@metorial-cargo/db'; import { db, env } from '@metorial-cargo/db'; import type { CargoTenantEnvironment } from '@metorial-cargo/module-file'; diff --git a/src/systems/cargo/modules/skill/src/lib/limits.ts b/src/systems/cargo/modules/skill/src/lib/limits.ts index 31755cfa0..8668250e8 100644 --- a/src/systems/cargo/modules/skill/src/lib/limits.ts +++ b/src/systems/cargo/modules/skill/src/lib/limits.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { db } from '@metorial-cargo/db'; export let maxSkillStoreFiles = 1000; diff --git a/src/systems/cargo/modules/skill/src/queues/dirty/collect.ts b/src/systems/cargo/modules/skill/src/queues/dirty/collect.ts index b5474276e..b5dec3f55 100644 --- a/src/systems/cargo/modules/skill/src/queues/dirty/collect.ts +++ b/src/systems/cargo/modules/skill/src/queues/dirty/collect.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db, env } from '@metorial-cargo/db'; import { addMinutes } from 'date-fns'; diff --git a/src/systems/cargo/modules/skill/src/queues/dirty/flush.ts b/src/systems/cargo/modules/skill/src/queues/dirty/flush.ts index 840f05f14..dbfd8c88b 100644 --- a/src/systems/cargo/modules/skill/src/queues/dirty/flush.ts +++ b/src/systems/cargo/modules/skill/src/queues/dirty/flush.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db, env, getId } from '@metorial-cargo/db'; import { syncStartQueue } from '../sync/start'; diff --git a/src/systems/cargo/modules/skill/src/queues/export.ts b/src/systems/cargo/modules/skill/src/queues/export.ts index e8a58f72c..4e8a3a95d 100644 --- a/src/systems/cargo/modules/skill/src/queues/export.ts +++ b/src/systems/cargo/modules/skill/src/queues/export.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, env } from '@metorial-cargo/db'; import { skillExportService } from '../services/skillExport'; diff --git a/src/systems/cargo/modules/skill/src/queues/index.ts b/src/systems/cargo/modules/skill/src/queues/index.ts index be4e74566..0820b2d7c 100644 --- a/src/systems/cargo/modules/skill/src/queues/index.ts +++ b/src/systems/cargo/modules/skill/src/queues/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { collectDirtySkillDestinationsCron, collectDirtySkillDestinationsManyQueueProcessor, diff --git a/src/systems/cargo/modules/skill/src/queues/lifecycle/index.ts b/src/systems/cargo/modules/skill/src/queues/lifecycle/index.ts index 8e11475dc..a96154067 100644 --- a/src/systems/cargo/modules/skill/src/queues/lifecycle/index.ts +++ b/src/systems/cargo/modules/skill/src/queues/lifecycle/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { propagateSkillDirtyQueueProcessor, skillLifecycleQueueProcessor } from './skill'; import { propagateSkillConfigurationDirtyQueueProcessor, diff --git a/src/systems/cargo/modules/skill/src/queues/lifecycle/managedSkillPlugin.ts b/src/systems/cargo/modules/skill/src/queues/lifecycle/managedSkillPlugin.ts index c1c37b6a0..da02ab1ca 100644 --- a/src/systems/cargo/modules/skill/src/queues/lifecycle/managedSkillPlugin.ts +++ b/src/systems/cargo/modules/skill/src/queues/lifecycle/managedSkillPlugin.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '@metorial-cargo/db'; import { managedSkillPluginService } from '../../services/managedSkillPlugin'; import { getLifecycleJobId, type LifecycleEvent } from './_ids'; diff --git a/src/systems/cargo/modules/skill/src/queues/lifecycle/skill.ts b/src/systems/cargo/modules/skill/src/queues/lifecycle/skill.ts index 06e4c7c93..ff6b0c1ed 100644 --- a/src/systems/cargo/modules/skill/src/queues/lifecycle/skill.ts +++ b/src/systems/cargo/modules/skill/src/queues/lifecycle/skill.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { addAfterTransactionHook, db, env } from '@metorial-cargo/db'; import { enqueueManagedSkillPluginLifecycle } from './managedSkillPlugin'; import { getLifecycleJobId, getPropagationJobOpts, type LifecycleEvent } from './_ids'; diff --git a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillConfiguration.ts b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillConfiguration.ts index e955c7bd6..461cd6447 100644 --- a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillConfiguration.ts +++ b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillConfiguration.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { addAfterTransactionHook, db, env } from '@metorial-cargo/db'; import { getLifecycleJobId, getPropagationJobOpts, type LifecycleEvent } from './_ids'; diff --git a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillMarketplace.ts b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillMarketplace.ts index 7ee74ddd2..132098412 100644 --- a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillMarketplace.ts +++ b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillMarketplace.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { addAfterTransactionHook, db, env, withTransaction } from '@metorial-cargo/db'; import { indexSkillMarketplaceQueue } from '../search/skillMarketplace'; import { indexSkillPluginQueue } from '../search/skillPlugin'; diff --git a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillMarketplacePlugin.ts b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillMarketplacePlugin.ts index 9f9f84b59..7d4fc3ebc 100644 --- a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillMarketplacePlugin.ts +++ b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillMarketplacePlugin.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { addAfterTransactionHook, db, env } from '@metorial-cargo/db'; import { indexSkillMarketplaceQueue } from '../search/skillMarketplace'; import { indexSkillPluginQueue } from '../search/skillPlugin'; diff --git a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillPlugin.ts b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillPlugin.ts index ad8e68e54..f2629f408 100644 --- a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillPlugin.ts +++ b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillPlugin.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { addAfterTransactionHook, db, env, withTransaction } from '@metorial-cargo/db'; import { indexSkillMarketplaceQueue } from '../search/skillMarketplace'; import { indexSkillPluginQueue } from '../search/skillPlugin'; diff --git a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillPluginSkill.ts b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillPluginSkill.ts index 4bab286a0..be44f3b42 100644 --- a/src/systems/cargo/modules/skill/src/queues/lifecycle/skillPluginSkill.ts +++ b/src/systems/cargo/modules/skill/src/queues/lifecycle/skillPluginSkill.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { addAfterTransactionHook, db, env } from '@metorial-cargo/db'; import { indexSkillPluginQueue } from '../search/skillPlugin'; import { getLifecycleJobId, getPropagationJobOpts, type LifecycleEvent } from './_ids'; diff --git a/src/systems/cargo/modules/skill/src/queues/search/index.ts b/src/systems/cargo/modules/skill/src/queues/search/index.ts index 97286b00e..ba992f612 100644 --- a/src/systems/cargo/modules/skill/src/queues/search/index.ts +++ b/src/systems/cargo/modules/skill/src/queues/search/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { indexSkillMarketplaceQueueProcessor } from './skillMarketplace'; import { indexSkillPluginQueueProcessor } from './skillPlugin'; diff --git a/src/systems/cargo/modules/skill/src/queues/search/skillMarketplace.ts b/src/systems/cargo/modules/skill/src/queues/search/skillMarketplace.ts index 33ed20fd2..812a7de1c 100644 --- a/src/systems/cargo/modules/skill/src/queues/search/skillMarketplace.ts +++ b/src/systems/cargo/modules/skill/src/queues/search/skillMarketplace.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, env } from '@metorial-cargo/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-cargo/module-search'; diff --git a/src/systems/cargo/modules/skill/src/queues/search/skillPlugin.ts b/src/systems/cargo/modules/skill/src/queues/search/skillPlugin.ts index 6ab346f9e..ea1df3adb 100644 --- a/src/systems/cargo/modules/skill/src/queues/search/skillPlugin.ts +++ b/src/systems/cargo/modules/skill/src/queues/search/skillPlugin.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, env } from '@metorial-cargo/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-cargo/module-search'; diff --git a/src/systems/cargo/modules/skill/src/queues/sync/cleanup.ts b/src/systems/cargo/modules/skill/src/queues/sync/cleanup.ts index 5f6f7aad5..3b87f225e 100644 --- a/src/systems/cargo/modules/skill/src/queues/sync/cleanup.ts +++ b/src/systems/cargo/modules/skill/src/queues/sync/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db, env } from '@metorial-cargo/db'; import { subDays } from 'date-fns'; diff --git a/src/systems/cargo/modules/skill/src/queues/sync/collect.ts b/src/systems/cargo/modules/skill/src/queues/sync/collect.ts index ef7035d43..501606a48 100644 --- a/src/systems/cargo/modules/skill/src/queues/sync/collect.ts +++ b/src/systems/cargo/modules/skill/src/queues/sync/collect.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, env } from '@metorial-cargo/db'; import { CargoSkillLimitError } from '../../lib/limits'; import { applyMarketplace } from '../../serializers/marketplace'; diff --git a/src/systems/cargo/modules/skill/src/queues/sync/finish.ts b/src/systems/cargo/modules/skill/src/queues/sync/finish.ts index 983b49932..4209741f8 100644 --- a/src/systems/cargo/modules/skill/src/queues/sync/finish.ts +++ b/src/systems/cargo/modules/skill/src/queues/sync/finish.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, env } from '@metorial-cargo/db'; import { appendSkillDestinationSyncLog } from './_lib/logs'; diff --git a/src/systems/cargo/modules/skill/src/queues/sync/process.ts b/src/systems/cargo/modules/skill/src/queues/sync/process.ts index 36a10430c..ba5cabdd2 100644 --- a/src/systems/cargo/modules/skill/src/queues/sync/process.ts +++ b/src/systems/cargo/modules/skill/src/queues/sync/process.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, env, snowflake } from '@metorial-cargo/db'; import { createCodeBucketClient } from '@metorial/code-bucket-service-generated'; import path from 'path'; diff --git a/src/systems/cargo/modules/skill/src/queues/sync/propagate.ts b/src/systems/cargo/modules/skill/src/queues/sync/propagate.ts index 5a92d18e4..1c003821a 100644 --- a/src/systems/cargo/modules/skill/src/queues/sync/propagate.ts +++ b/src/systems/cargo/modules/skill/src/queues/sync/propagate.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, env, getId, withTransaction } from '@metorial-cargo/db'; import { getOriginTenant, origin } from '../../internal/skillDestination'; import { diff --git a/src/systems/cargo/modules/skill/src/queues/sync/start.ts b/src/systems/cargo/modules/skill/src/queues/sync/start.ts index a35502543..945f2cfe5 100644 --- a/src/systems/cargo/modules/skill/src/queues/sync/start.ts +++ b/src/systems/cargo/modules/skill/src/queues/sync/start.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, env } from '@metorial-cargo/db'; import { appendSkillDestinationSyncLog } from './_lib/logs'; import { syncCollectQueue } from './collect'; diff --git a/src/systems/cargo/modules/skill/src/serializers/marketplace/index.ts b/src/systems/cargo/modules/skill/src/serializers/marketplace/index.ts index c0c0bc819..711c24a09 100644 --- a/src/systems/cargo/modules/skill/src/serializers/marketplace/index.ts +++ b/src/systems/cargo/modules/skill/src/serializers/marketplace/index.ts @@ -1,4 +1,4 @@ -import { Hash } from '@lowerdeck/hash'; +import { Hash } from '@mtsrc/hash'; import { db } from '@metorial-cargo/db'; import semver from 'semver'; import { assertSkillMarketplaceLimits } from '../../lib/limits'; diff --git a/src/systems/cargo/modules/skill/src/serializers/plugin/index.ts b/src/systems/cargo/modules/skill/src/serializers/plugin/index.ts index e67c2bca3..d39c0a6c0 100644 --- a/src/systems/cargo/modules/skill/src/serializers/plugin/index.ts +++ b/src/systems/cargo/modules/skill/src/serializers/plugin/index.ts @@ -1,5 +1,5 @@ -import { Hash } from '@lowerdeck/hash'; -import { slugify } from '@lowerdeck/slugify'; +import { Hash } from '@mtsrc/hash'; +import { slugify } from '@mtsrc/slugify'; import { db, env } from '@metorial-cargo/db'; import semver from 'semver'; import { internalImageService } from '../../internal/image'; diff --git a/src/systems/cargo/modules/skill/src/serializers/skill/index.ts b/src/systems/cargo/modules/skill/src/serializers/skill/index.ts index dfb767acd..22987ca22 100644 --- a/src/systems/cargo/modules/skill/src/serializers/skill/index.ts +++ b/src/systems/cargo/modules/skill/src/serializers/skill/index.ts @@ -1,5 +1,5 @@ -import { Hash } from '@lowerdeck/hash'; -import { slugify } from '@lowerdeck/slugify'; +import { Hash } from '@mtsrc/hash'; +import { slugify } from '@mtsrc/slugify'; import type { Prisma } from '@metorial-cargo/db'; import { db } from '@metorial-cargo/db'; import { fileService } from '@metorial-cargo/module-file'; diff --git a/src/systems/cargo/modules/skill/src/services/managedSkillPlugin.ts b/src/systems/cargo/modules/skill/src/services/managedSkillPlugin.ts index 1d44fd626..41112eb51 100644 --- a/src/systems/cargo/modules/skill/src/services/managedSkillPlugin.ts +++ b/src/systems/cargo/modules/skill/src/services/managedSkillPlugin.ts @@ -1,8 +1,8 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; -import { generatePlainId } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { generatePlainId } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import type { Prisma, SkillPluginSkillStatus, SkillPluginStatus } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import type { CargoTenantEnvironment } from '@metorial-cargo/module-file'; diff --git a/src/systems/cargo/modules/skill/src/services/skill.ts b/src/systems/cargo/modules/skill/src/services/skill.ts index f26651be4..2dae43670 100644 --- a/src/systems/cargo/modules/skill/src/services/skill.ts +++ b/src/systems/cargo/modules/skill/src/services/skill.ts @@ -1,7 +1,7 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { EntityImage, Prisma, StoreParticipantPermissions } from '@metorial-cargo/db'; import { db, snowflake, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/skill/src/services/skillAgent.ts b/src/systems/cargo/modules/skill/src/services/skillAgent.ts index fe0dc9fe5..230244439 100644 --- a/src/systems/cargo/modules/skill/src/services/skillAgent.ts +++ b/src/systems/cargo/modules/skill/src/services/skillAgent.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import type { Prisma, StoreParticipantPermissions } from '@metorial-cargo/db'; import { db, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/skill/src/services/skillConfiguration.ts b/src/systems/cargo/modules/skill/src/services/skillConfiguration.ts index 5d6c4e066..c7be31b2b 100644 --- a/src/systems/cargo/modules/skill/src/services/skillConfiguration.ts +++ b/src/systems/cargo/modules/skill/src/services/skillConfiguration.ts @@ -3,9 +3,9 @@ import { forbiddenError, notFoundError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/skill/src/services/skillExport.ts b/src/systems/cargo/modules/skill/src/services/skillExport.ts index 42a70c0e9..13403cc27 100644 --- a/src/systems/cargo/modules/skill/src/services/skillExport.ts +++ b/src/systems/cargo/modules/skill/src/services/skillExport.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma, SkillDestination, diff --git a/src/systems/cargo/modules/skill/src/services/skillMarketplace.ts b/src/systems/cargo/modules/skill/src/services/skillMarketplace.ts index 4e2c32a54..ab3e63ad9 100644 --- a/src/systems/cargo/modules/skill/src/services/skillMarketplace.ts +++ b/src/systems/cargo/modules/skill/src/services/skillMarketplace.ts @@ -1,9 +1,9 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import type { EntityImage, Prisma, SkillMarketplaceStatus } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/skill/src/services/skillMarketplacePlugin.ts b/src/systems/cargo/modules/skill/src/services/skillMarketplacePlugin.ts index 7308da1c8..859fb8bdc 100644 --- a/src/systems/cargo/modules/skill/src/services/skillMarketplacePlugin.ts +++ b/src/systems/cargo/modules/skill/src/services/skillMarketplacePlugin.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import type { Prisma, SkillMarketplacePluginStatus } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/skill/src/services/skillMarketplaceRepository.ts b/src/systems/cargo/modules/skill/src/services/skillMarketplaceRepository.ts index 2221ed240..78942008c 100644 --- a/src/systems/cargo/modules/skill/src/services/skillMarketplaceRepository.ts +++ b/src/systems/cargo/modules/skill/src/services/skillMarketplaceRepository.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { db, getId } from '@metorial-cargo/db'; import type { CargoTenantEnvironment } from '@metorial-cargo/module-file'; diff --git a/src/systems/cargo/modules/skill/src/services/skillParticipant.ts b/src/systems/cargo/modules/skill/src/services/skillParticipant.ts index 2955c28b6..0d9a32556 100644 --- a/src/systems/cargo/modules/skill/src/services/skillParticipant.ts +++ b/src/systems/cargo/modules/skill/src/services/skillParticipant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma, Skill, diff --git a/src/systems/cargo/modules/skill/src/services/skillPlugin.ts b/src/systems/cargo/modules/skill/src/services/skillPlugin.ts index 87de1ac7f..69bfc0c4d 100644 --- a/src/systems/cargo/modules/skill/src/services/skillPlugin.ts +++ b/src/systems/cargo/modules/skill/src/services/skillPlugin.ts @@ -1,9 +1,9 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import type { EntityImage, Prisma, diff --git a/src/systems/cargo/modules/skill/src/services/skillPluginRepository.ts b/src/systems/cargo/modules/skill/src/services/skillPluginRepository.ts index c1eee5a56..a0b69e09b 100644 --- a/src/systems/cargo/modules/skill/src/services/skillPluginRepository.ts +++ b/src/systems/cargo/modules/skill/src/services/skillPluginRepository.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { db, getId } from '@metorial-cargo/db'; import type { CargoTenantEnvironment } from '@metorial-cargo/module-file'; diff --git a/src/systems/cargo/modules/skill/src/services/skillPluginSkill.ts b/src/systems/cargo/modules/skill/src/services/skillPluginSkill.ts index b2952a621..5071034f0 100644 --- a/src/systems/cargo/modules/skill/src/services/skillPluginSkill.ts +++ b/src/systems/cargo/modules/skill/src/services/skillPluginSkill.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import type { Prisma, SkillPluginSkillStatus } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/skill/src/services/skillRepository.ts b/src/systems/cargo/modules/skill/src/services/skillRepository.ts index 278c9f245..7026ebf47 100644 --- a/src/systems/cargo/modules/skill/src/services/skillRepository.ts +++ b/src/systems/cargo/modules/skill/src/services/skillRepository.ts @@ -1,5 +1,5 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { Prisma, SkillRepository } from '@metorial-cargo/db'; import { db, getId } from '@metorial-cargo/db'; import type { CargoTenantEnvironment } from '@metorial-cargo/module-file'; diff --git a/src/systems/cargo/modules/skill/src/services/skillSync.ts b/src/systems/cargo/modules/skill/src/services/skillSync.ts index 674f13e6a..87d6b17c7 100644 --- a/src/systems/cargo/modules/skill/src/services/skillSync.ts +++ b/src/systems/cargo/modules/skill/src/services/skillSync.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma, SkillDestinationSyncStatus } from '@metorial-cargo/db'; import { db, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/skill/src/services/skillTemplate.ts b/src/systems/cargo/modules/skill/src/services/skillTemplate.ts index f371b28a3..eaf6e1c68 100644 --- a/src/systems/cargo/modules/skill/src/services/skillTemplate.ts +++ b/src/systems/cargo/modules/skill/src/services/skillTemplate.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { db, snowflake, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/skill/src/services/skillVersion.ts b/src/systems/cargo/modules/skill/src/services/skillVersion.ts index 89825fe7f..67477cff2 100644 --- a/src/systems/cargo/modules/skill/src/services/skillVersion.ts +++ b/src/systems/cargo/modules/skill/src/services/skillVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { db } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/store/package.json b/src/systems/cargo/modules/store/package.json index 6ecbb25e5..482f77614 100644 --- a/src/systems/cargo/modules/store/package.json +++ b/src/systems/cargo/modules/store/package.json @@ -15,15 +15,15 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", "@metorial-cargo/db": "^1.0.0", - "@metorial-cargo/list-utils": "^1.0.0" + "@metorial-cargo/list-utils": "^1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0" }, "module": "src/index.ts", "types": "src/index.ts", diff --git a/src/systems/cargo/modules/store/src/internal/storeTemplateSync.ts b/src/systems/cargo/modules/store/src/internal/storeTemplateSync.ts index 2ba24dcc6..70cadb481 100644 --- a/src/systems/cargo/modules/store/src/internal/storeTemplateSync.ts +++ b/src/systems/cargo/modules/store/src/internal/storeTemplateSync.ts @@ -1,7 +1,7 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; -import { Service } from '@lowerdeck/service'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { Service } from '@mtsrc/service'; import type { Prisma, Store, StoreItemKind, StoreTemplateItem } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import { documentInclude, documentService } from '@metorial-cargo/module-doc'; diff --git a/src/systems/cargo/modules/store/src/lib/storePath.ts b/src/systems/cargo/modules/store/src/lib/storePath.ts index 0d22e3556..36837f21f 100644 --- a/src/systems/cargo/modules/store/src/lib/storePath.ts +++ b/src/systems/cargo/modules/store/src/lib/storePath.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; export type StorePathKind = 'file' | 'directory'; diff --git a/src/systems/cargo/modules/store/src/queues/index.ts b/src/systems/cargo/modules/store/src/queues/index.ts index 5fec1f9c8..87d8602ea 100644 --- a/src/systems/cargo/modules/store/src/queues/index.ts +++ b/src/systems/cargo/modules/store/src/queues/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { storeLifecycleProcessors } from './lifecycle'; import { storeCleanupProcessors } from './storeCleanup'; import { storeTemplateSyncProcessors } from './storeTemplateSync'; diff --git a/src/systems/cargo/modules/store/src/queues/lifecycle.ts b/src/systems/cargo/modules/store/src/queues/lifecycle.ts index f06105523..de6b77d96 100644 --- a/src/systems/cargo/modules/store/src/queues/lifecycle.ts +++ b/src/systems/cargo/modules/store/src/queues/lifecycle.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { addAfterTransactionHook, db, env } from '@metorial-cargo/db'; type StoreLifecycleEvent = 'created' | 'updated' | 'archived' | 'contents-changed'; diff --git a/src/systems/cargo/modules/store/src/queues/storeCleanup.ts b/src/systems/cargo/modules/store/src/queues/storeCleanup.ts index fde846650..c03016a36 100644 --- a/src/systems/cargo/modules/store/src/queues/storeCleanup.ts +++ b/src/systems/cargo/modules/store/src/queues/storeCleanup.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { env } from '@metorial-cargo/db'; import { fileReferenceService } from '@metorial-cargo/module-file'; diff --git a/src/systems/cargo/modules/store/src/queues/storeTemplateSync.ts b/src/systems/cargo/modules/store/src/queues/storeTemplateSync.ts index 32ca749b9..49e6e2114 100644 --- a/src/systems/cargo/modules/store/src/queues/storeTemplateSync.ts +++ b/src/systems/cargo/modules/store/src/queues/storeTemplateSync.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { env } from '@metorial-cargo/db'; import { internalStoreTemplateSyncService } from '../internal/storeTemplateSync'; diff --git a/src/systems/cargo/modules/store/src/queues/storeVersion.ts b/src/systems/cargo/modules/store/src/queues/storeVersion.ts index 6711c7769..14b0df5b8 100644 --- a/src/systems/cargo/modules/store/src/queues/storeVersion.ts +++ b/src/systems/cargo/modules/store/src/queues/storeVersion.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { db, env } from '@metorial-cargo/db'; import { storeVersionService } from '@metorial-cargo/module-store'; diff --git a/src/systems/cargo/modules/store/src/services/store.ts b/src/systems/cargo/modules/store/src/services/store.ts index bfc9c5b62..df4de5cb7 100644 --- a/src/systems/cargo/modules/store/src/services/store.ts +++ b/src/systems/cargo/modules/store/src/services/store.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Store, StoreAccess, StoreCloneType, TenantActor } from '@metorial-cargo/db'; import { db, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/store/src/services/storeAccess.ts b/src/systems/cargo/modules/store/src/services/storeAccess.ts index 6df2ff5c1..ce4a9dbaa 100644 --- a/src/systems/cargo/modules/store/src/services/storeAccess.ts +++ b/src/systems/cargo/modules/store/src/services/storeAccess.ts @@ -1,5 +1,5 @@ -import { forbiddenError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { forbiddenError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { Store, StoreAccess, diff --git a/src/systems/cargo/modules/store/src/services/storeItem.ts b/src/systems/cargo/modules/store/src/services/storeItem.ts index 975b5c341..ed2d31d4c 100644 --- a/src/systems/cargo/modules/store/src/services/storeItem.ts +++ b/src/systems/cargo/modules/store/src/services/storeItem.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma, StoreItemKind, StoreParticipantPermissions } from '@metorial-cargo/db'; import { db } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/store/src/services/storeItemMutation.ts b/src/systems/cargo/modules/store/src/services/storeItemMutation.ts index a7476d3a8..ecd278d32 100644 --- a/src/systems/cargo/modules/store/src/services/storeItemMutation.ts +++ b/src/systems/cargo/modules/store/src/services/storeItemMutation.ts @@ -1,5 +1,5 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { Skill, Store, diff --git a/src/systems/cargo/modules/store/src/services/storeParticipant.ts b/src/systems/cargo/modules/store/src/services/storeParticipant.ts index 4d01b5eaa..200da4704 100644 --- a/src/systems/cargo/modules/store/src/services/storeParticipant.ts +++ b/src/systems/cargo/modules/store/src/services/storeParticipant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { db } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/store/src/services/storeTemplate.ts b/src/systems/cargo/modules/store/src/services/storeTemplate.ts index bbdc82339..97ec8d2e7 100644 --- a/src/systems/cargo/modules/store/src/services/storeTemplate.ts +++ b/src/systems/cargo/modules/store/src/services/storeTemplate.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { addAfterTransactionHook, db, getId, withTransaction } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/modules/store/src/services/storeVersion.ts b/src/systems/cargo/modules/store/src/services/storeVersion.ts index 144d7e2f5..870e0aec7 100644 --- a/src/systems/cargo/modules/store/src/services/storeVersion.ts +++ b/src/systems/cargo/modules/store/src/services/storeVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Prisma } from '@metorial-cargo/db'; import { db, getId, withTransaction, type TransactionDB } from '@metorial-cargo/db'; import { diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index a2004b16a..05cf23d71 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -25,7 +25,7 @@ WORKDIR /app/src/systems/cargo/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index 7608de7f6..5bd1b16d1 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -27,39 +27,16 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", - "vitest": "^4.0.17" + "vitest": "^4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" }, "dependencies": { - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/forwarded-for": "^1.0.4", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/redis": "^1.0.6", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/tokens": "^1.0.5", - "@lowerdeck/validation": "1.0.10", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", @@ -71,7 +48,30 @@ "@metorial-cargo/module-file": "^1.0.0", "@metorial-cargo/module-doc": "^1.0.0", "@metorial-cargo/module-store": "^1.0.0", - "@metorial-cargo/module-skill": "^1.0.0" + "@metorial-cargo/module-skill": "^1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/forwarded-for": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/tokens": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "main": "src/index.ts", "types": "src/index.ts", diff --git a/src/systems/cargo/service/src/controllers/_app.ts b/src/systems/cargo/service/src/controllers/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/cargo/service/src/controllers/_app.ts +++ b/src/systems/cargo/service/src/controllers/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/cargo/service/src/controllers/_dateFilter.ts b/src/systems/cargo/service/src/controllers/_dateFilter.ts index 307475c8a..91f35e79c 100644 --- a/src/systems/cargo/service/src/controllers/_dateFilter.ts +++ b/src/systems/cargo/service/src/controllers/_dateFilter.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; export let dateFilterSchema = v.optional( v.object({ diff --git a/src/systems/cargo/service/src/controllers/actor.ts b/src/systems/cargo/service/src/controllers/actor.ts index d538608e6..8479d1c59 100644 --- a/src/systems/cargo/service/src/controllers/actor.ts +++ b/src/systems/cargo/service/src/controllers/actor.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { actorPresenter } from '../presenters'; import { actorService } from '@metorial-cargo/module-file'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/document.ts b/src/systems/cargo/service/src/controllers/document.ts index 301150ec5..e949aee1f 100644 --- a/src/systems/cargo/service/src/controllers/document.ts +++ b/src/systems/cargo/service/src/controllers/document.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { documentPermissionsPresenter, documentPresenter } from '../presenters'; import { documentService } from '@metorial-cargo/module-doc'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/documentParticipant.ts b/src/systems/cargo/service/src/controllers/documentParticipant.ts index a3dd1f11c..9e1702402 100644 --- a/src/systems/cargo/service/src/controllers/documentParticipant.ts +++ b/src/systems/cargo/service/src/controllers/documentParticipant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { documentParticipantPresenter } from '../presenters'; import { documentParticipantService } from '@metorial-cargo/module-doc'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/documentVersion.ts b/src/systems/cargo/service/src/controllers/documentVersion.ts index ad299d6c3..6382a4333 100644 --- a/src/systems/cargo/service/src/controllers/documentVersion.ts +++ b/src/systems/cargo/service/src/controllers/documentVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { documentVersionPresenter } from '../presenters'; import { documentVersionService } from '@metorial-cargo/module-doc'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/environment.ts b/src/systems/cargo/service/src/controllers/environment.ts index ef1224109..73da017cc 100644 --- a/src/systems/cargo/service/src/controllers/environment.ts +++ b/src/systems/cargo/service/src/controllers/environment.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { environmentPresenter } from '../presenters'; import { environmentService } from '@metorial-cargo/module-file'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/file.ts b/src/systems/cargo/service/src/controllers/file.ts index a3bbe9100..e3f59bddb 100644 --- a/src/systems/cargo/service/src/controllers/file.ts +++ b/src/systems/cargo/service/src/controllers/file.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { getSignedFileDownloadUrl } from '@metorial-cargo/module-file'; import { filePresenter } from '../presenters'; import { fileService } from '@metorial-cargo/module-file'; diff --git a/src/systems/cargo/service/src/controllers/fileLink.ts b/src/systems/cargo/service/src/controllers/fileLink.ts index 07747d333..872d2261a 100644 --- a/src/systems/cargo/service/src/controllers/fileLink.ts +++ b/src/systems/cargo/service/src/controllers/fileLink.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { fileLinkPresenter, filePresenter } from '../presenters'; import { fileLinkService } from '@metorial-cargo/module-file'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/filePurpose.ts b/src/systems/cargo/service/src/controllers/filePurpose.ts index 2dfab76e5..b66a0824c 100644 --- a/src/systems/cargo/service/src/controllers/filePurpose.ts +++ b/src/systems/cargo/service/src/controllers/filePurpose.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { filePurposePresenter } from '../presenters'; import { filePurposeService } from '@metorial-cargo/module-file'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/fileReference.ts b/src/systems/cargo/service/src/controllers/fileReference.ts index b18368f4e..b88a41c43 100644 --- a/src/systems/cargo/service/src/controllers/fileReference.ts +++ b/src/systems/cargo/service/src/controllers/fileReference.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { fileReferencePresenter } from '../presenters'; import { fileReferenceService } from '@metorial-cargo/module-file'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/index.ts b/src/systems/cargo/service/src/controllers/index.ts index e56a0cf3b..f2544447e 100644 --- a/src/systems/cargo/service/src/controllers/index.ts +++ b/src/systems/cargo/service/src/controllers/index.ts @@ -1,4 +1,4 @@ -import { createServer, type InferClient } from '@lowerdeck/rpc-server'; +import { createServer, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { actorController } from './actor'; import { documentController } from './document'; diff --git a/src/systems/cargo/service/src/controllers/reconcile.ts b/src/systems/cargo/service/src/controllers/reconcile.ts index 232685341..2aed892c1 100644 --- a/src/systems/cargo/service/src/controllers/reconcile.ts +++ b/src/systems/cargo/service/src/controllers/reconcile.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { reconcileService } from '@metorial-cargo/module-file'; import { skillPluginService } from '@metorial-cargo/module-skill'; import { diff --git a/src/systems/cargo/service/src/controllers/skill.ts b/src/systems/cargo/service/src/controllers/skill.ts index d759ff48d..4df50b7d9 100644 --- a/src/systems/cargo/service/src/controllers/skill.ts +++ b/src/systems/cargo/service/src/controllers/skill.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillService, skillTemplateService } from '@metorial-cargo/module-skill'; import { skillParticipantPresenter, skillPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillAgent.ts b/src/systems/cargo/service/src/controllers/skillAgent.ts index d2326b7cd..99fe87ce2 100644 --- a/src/systems/cargo/service/src/controllers/skillAgent.ts +++ b/src/systems/cargo/service/src/controllers/skillAgent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillAgentService } from '@metorial-cargo/module-skill'; import { skillAgentPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillConfiguration.ts b/src/systems/cargo/service/src/controllers/skillConfiguration.ts index 56e70aa75..908369471 100644 --- a/src/systems/cargo/service/src/controllers/skillConfiguration.ts +++ b/src/systems/cargo/service/src/controllers/skillConfiguration.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillConfigurationPresenter } from '../presenters'; import { skillConfigurationService } from '@metorial-cargo/module-skill'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillExport.ts b/src/systems/cargo/service/src/controllers/skillExport.ts index 6e63b9109..42feb5abb 100644 --- a/src/systems/cargo/service/src/controllers/skillExport.ts +++ b/src/systems/cargo/service/src/controllers/skillExport.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillExportService } from '@metorial-cargo/module-skill'; import { skillExportPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillMarketplace.ts b/src/systems/cargo/service/src/controllers/skillMarketplace.ts index b2acb8b51..e70baa3b8 100644 --- a/src/systems/cargo/service/src/controllers/skillMarketplace.ts +++ b/src/systems/cargo/service/src/controllers/skillMarketplace.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillMarketplaceService } from '@metorial-cargo/module-skill'; import { skillMarketplacePresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillMarketplacePlugin.ts b/src/systems/cargo/service/src/controllers/skillMarketplacePlugin.ts index 780d7c871..b6f2d7d97 100644 --- a/src/systems/cargo/service/src/controllers/skillMarketplacePlugin.ts +++ b/src/systems/cargo/service/src/controllers/skillMarketplacePlugin.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillMarketplacePluginPresenter } from '../presenters'; import { skillMarketplacePluginService } from '@metorial-cargo/module-skill'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillMarketplaceRepository.ts b/src/systems/cargo/service/src/controllers/skillMarketplaceRepository.ts index de8fbda7c..71c2ce4a7 100644 --- a/src/systems/cargo/service/src/controllers/skillMarketplaceRepository.ts +++ b/src/systems/cargo/service/src/controllers/skillMarketplaceRepository.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillMarketplaceRepositoryService } from '@metorial-cargo/module-skill'; import { skillMarketplaceRepositoryPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillParticipant.ts b/src/systems/cargo/service/src/controllers/skillParticipant.ts index 955938c7e..c7f323314 100644 --- a/src/systems/cargo/service/src/controllers/skillParticipant.ts +++ b/src/systems/cargo/service/src/controllers/skillParticipant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillParticipantService } from '@metorial-cargo/module-skill'; import { skillParticipantPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillPlugin.ts b/src/systems/cargo/service/src/controllers/skillPlugin.ts index 0e2e1c2b8..ad9272e75 100644 --- a/src/systems/cargo/service/src/controllers/skillPlugin.ts +++ b/src/systems/cargo/service/src/controllers/skillPlugin.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillPluginService } from '@metorial-cargo/module-skill'; import { skillPluginPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillPluginRepository.ts b/src/systems/cargo/service/src/controllers/skillPluginRepository.ts index 97b5d546f..93fcf8799 100644 --- a/src/systems/cargo/service/src/controllers/skillPluginRepository.ts +++ b/src/systems/cargo/service/src/controllers/skillPluginRepository.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillPluginRepositoryService } from '@metorial-cargo/module-skill'; import { skillPluginRepositoryPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillPluginSkill.ts b/src/systems/cargo/service/src/controllers/skillPluginSkill.ts index b49d73987..1ee46b6c9 100644 --- a/src/systems/cargo/service/src/controllers/skillPluginSkill.ts +++ b/src/systems/cargo/service/src/controllers/skillPluginSkill.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillPluginSkillPresenter } from '../presenters'; import { skillPluginSkillService } from '@metorial-cargo/module-skill'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillSync.ts b/src/systems/cargo/service/src/controllers/skillSync.ts index 1433d2125..cf0d88f2f 100644 --- a/src/systems/cargo/service/src/controllers/skillSync.ts +++ b/src/systems/cargo/service/src/controllers/skillSync.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillSyncService } from '@metorial-cargo/module-skill'; import { skillSyncPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/skillTemplate.ts b/src/systems/cargo/service/src/controllers/skillTemplate.ts index 872cd5461..1fcbfdb9f 100644 --- a/src/systems/cargo/service/src/controllers/skillTemplate.ts +++ b/src/systems/cargo/service/src/controllers/skillTemplate.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillTemplateDetailPresenter, skillTemplatePresenter } from '../presenters'; import { environmentService, tenantService } from '@metorial-cargo/module-file'; import { skillTemplateService } from '@metorial-cargo/module-skill'; diff --git a/src/systems/cargo/service/src/controllers/skillVersion.ts b/src/systems/cargo/service/src/controllers/skillVersion.ts index 085641727..e3a69ee67 100644 --- a/src/systems/cargo/service/src/controllers/skillVersion.ts +++ b/src/systems/cargo/service/src/controllers/skillVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillVersionPresenter, skillVersionSnapshotPresenter } from '../presenters'; import { skillVersionService } from '@metorial-cargo/module-skill'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/store.ts b/src/systems/cargo/service/src/controllers/store.ts index 209a70a7c..c62284826 100644 --- a/src/systems/cargo/service/src/controllers/store.ts +++ b/src/systems/cargo/service/src/controllers/store.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { storeItemPresenter, storePermissionsPresenter, storePresenter } from '../presenters'; import { actorService } from '@metorial-cargo/module-file'; import { storeService } from '@metorial-cargo/module-store'; diff --git a/src/systems/cargo/service/src/controllers/storeItem.ts b/src/systems/cargo/service/src/controllers/storeItem.ts index c4711afcc..999ddc0df 100644 --- a/src/systems/cargo/service/src/controllers/storeItem.ts +++ b/src/systems/cargo/service/src/controllers/storeItem.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { storeItemService } from '@metorial-cargo/module-store'; import { storeItemPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/storeParticipant.ts b/src/systems/cargo/service/src/controllers/storeParticipant.ts index 3bd5b5b52..f7dd56cae 100644 --- a/src/systems/cargo/service/src/controllers/storeParticipant.ts +++ b/src/systems/cargo/service/src/controllers/storeParticipant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { storeParticipantService } from '@metorial-cargo/module-store'; import { storeParticipantPresenter } from '../presenters'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/storeTemplate.ts b/src/systems/cargo/service/src/controllers/storeTemplate.ts index 1a56f141d..e8cffa4d7 100644 --- a/src/systems/cargo/service/src/controllers/storeTemplate.ts +++ b/src/systems/cargo/service/src/controllers/storeTemplate.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { storeTemplateDetailPresenter, storeTemplatePresenter } from '../presenters'; import { environmentService, tenantService } from '@metorial-cargo/module-file'; import { storeTemplateService } from '@metorial-cargo/module-store'; diff --git a/src/systems/cargo/service/src/controllers/tenant.ts b/src/systems/cargo/service/src/controllers/tenant.ts index 30caf1c5b..3367526ce 100644 --- a/src/systems/cargo/service/src/controllers/tenant.ts +++ b/src/systems/cargo/service/src/controllers/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { environmentPresenter, tenantPresenter } from '../presenters'; import { environmentService, tenantService } from '@metorial-cargo/module-file'; import { app } from './_app'; diff --git a/src/systems/cargo/service/src/controllers/tests/http.e2e.test.ts b/src/systems/cargo/service/src/controllers/tests/http.e2e.test.ts index 93ea6c14b..6a1f7b41f 100644 --- a/src/systems/cargo/service/src/controllers/tests/http.e2e.test.ts +++ b/src/systems/cargo/service/src/controllers/tests/http.e2e.test.ts @@ -1,4 +1,4 @@ -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { cargoContentApi, cargoUploadApi } from '@metorial-cargo/module-file/http'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { diff --git a/src/systems/cargo/service/src/endpoints.ts b/src/systems/cargo/service/src/endpoints.ts index 5191e0b6b..5d8ee116b 100644 --- a/src/systems/cargo/service/src/endpoints.ts +++ b/src/systems/cargo/service/src/endpoints.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { rpcMux } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { rpcMux } from '@mtsrc/rpc-server'; import { env } from '@metorial-cargo/db'; import { documentLiveApi, websocket } from '@metorial-cargo/module-doc/live'; import { cargoContentApi, cargoUploadApi } from '@metorial-cargo/module-file/http'; diff --git a/src/systems/cargo/service/src/instrument.ts b/src/systems/cargo/service/src/instrument.ts index 07d4c9aa2..0903b1ebc 100644 --- a/src/systems/cargo/service/src/instrument.ts +++ b/src/systems/cargo/service/src/instrument.ts @@ -1,4 +1,4 @@ -import { setSentry } from '@lowerdeck/sentry'; +import { setSentry } from '@mtsrc/sentry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/cargo/service/src/test/client.ts b/src/systems/cargo/service/src/test/client.ts index f95e2a312..a115e1516 100644 --- a/src/systems/cargo/service/src/test/client.ts +++ b/src/systems/cargo/service/src/test/client.ts @@ -1,6 +1,6 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { rpcMux } from '@lowerdeck/rpc-server'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { rpcMux } from '@mtsrc/rpc-server'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { CargoRPC, type CargoClient } from '../controllers'; type ClientOptsLike = { diff --git a/src/systems/cargo/service/src/test/fixtures/index.ts b/src/systems/cargo/service/src/test/fixtures/index.ts index 1bdce5ef1..ac9507035 100644 --- a/src/systems/cargo/service/src/test/fixtures/index.ts +++ b/src/systems/cargo/service/src/test/fixtures/index.ts @@ -7,7 +7,7 @@ import type { PrismaClient, Tenant } from '@metorial-cargo/db'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { getId } from '@metorial-cargo/db'; let randomSuffix = () => randomBytes(4).toString('hex'); diff --git a/src/systems/cargo/service/src/test/helpers/voyagerStub.ts b/src/systems/cargo/service/src/test/helpers/voyagerStub.ts index 816c9a6c3..a594981e4 100644 --- a/src/systems/cargo/service/src/test/helpers/voyagerStub.ts +++ b/src/systems/cargo/service/src/test/helpers/voyagerStub.ts @@ -1,5 +1,5 @@ -import { createFetchRouter } from '@lowerdeck/testing-tools'; -import { serialize } from '@lowerdeck/serialize'; +import { createFetchRouter } from '@mtsrc/testing-tools'; +import { serialize } from '@mtsrc/serialize'; type StubState = { counter: number }; type RpcCall = { id: string; name: string; payload: any }; diff --git a/src/systems/cargo/service/src/test/setup.ts b/src/systems/cargo/service/src/test/setup.ts index 310942d2e..c32f2f171 100644 --- a/src/systems/cargo/service/src/test/setup.ts +++ b/src/systems/cargo/service/src/test/setup.ts @@ -3,7 +3,7 @@ import './preload-env'; import { PrismaPg } from '@prisma/adapter-pg'; import { flushAfterTransactionHooks, PrismaClient } from '@metorial-cargo/db'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; import { resetVoyagerStub, setupVoyagerStub } from './helpers/voyagerStub'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/cargo/service/src/worker.ts b/src/systems/cargo/service/src/worker.ts index 208ab5e42..c4f03dc37 100644 --- a/src/systems/cargo/service/src/worker.ts +++ b/src/systems/cargo/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { documentQueueProcessor } from '@metorial-cargo/module-doc'; import { fileQueueProcessor } from '@metorial-cargo/module-file'; import { skillQueueProcessor } from '@metorial-cargo/module-skill'; diff --git a/src/systems/cargo/service/vitest.config.ts b/src/systems/cargo/service/vitest.config.ts index 139b28bca..ce39f4a41 100644 --- a/src/systems/cargo/service/vitest.config.ts +++ b/src/systems/cargo/service/vitest.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/cargo/service/vitest.e2e.config.ts b/src/systems/cargo/service/vitest.e2e.config.ts index d18b35083..86cf94e46 100644 --- a/src/systems/cargo/service/vitest.e2e.config.ts +++ b/src/systems/cargo/service/vitest.e2e.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; let clientsRoot = resolve(__dirname, '../../_clients'); diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index 57ef0816a..1e9294075 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -24,7 +24,7 @@ WORKDIR /app/src/systems/forge/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/forge/service/package.json b/src/systems/forge/service/package.json index 91c246859..4666780ff 100644 --- a/src/systems/forge/service/package.json +++ b/src/systems/forge/service/package.json @@ -27,9 +27,9 @@ "@types/bun": "latest", "@vercel/ncc": "^0.38.1", "vitest": "^4.0.17", - "@lowerdeck/testing-tools": "^1.0.1", "lodash": "^4.17.21", - "@types/lodash": "^4.17.0" + "@types/lodash": "^4.17.0", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -38,25 +38,6 @@ "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-codebuild": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "1.0.10", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", @@ -68,6 +49,25 @@ "mongoose": "^9.0.2", "@metorial-platform-systems/object-storage-client": "workspace:*", "prisma": "^7.2.0", - "yaml": "^2.8.2" + "yaml": "^2.8.2", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/forge/service/src/controllers/_app.ts b/src/systems/forge/service/src/controllers/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/forge/service/src/controllers/_app.ts +++ b/src/systems/forge/service/src/controllers/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/forge/service/src/controllers/index.ts b/src/systems/forge/service/src/controllers/index.ts index 021cf0baf..228527bdb 100644 --- a/src/systems/forge/service/src/controllers/index.ts +++ b/src/systems/forge/service/src/controllers/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { providerController } from './provider'; import { tenantController } from './tenant'; diff --git a/src/systems/forge/service/src/controllers/tenant.ts b/src/systems/forge/service/src/controllers/tenant.ts index 25e2e4973..297fd0578 100644 --- a/src/systems/forge/service/src/controllers/tenant.ts +++ b/src/systems/forge/service/src/controllers/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { tenantPresenter } from '../presenters/tenant'; import { tenantService } from '../services'; import { app } from './_app'; diff --git a/src/systems/forge/service/src/controllers/workflow.ts b/src/systems/forge/service/src/controllers/workflow.ts index 4f8c1f95a..f3842509c 100644 --- a/src/systems/forge/service/src/controllers/workflow.ts +++ b/src/systems/forge/service/src/controllers/workflow.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { workflowPresenter } from '../presenters/workflow'; import { workflowService } from '../services'; import { app } from './_app'; diff --git a/src/systems/forge/service/src/controllers/workflowArtifact.ts b/src/systems/forge/service/src/controllers/workflowArtifact.ts index 4ef38e129..0c327f097 100644 --- a/src/systems/forge/service/src/controllers/workflowArtifact.ts +++ b/src/systems/forge/service/src/controllers/workflowArtifact.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { workflowArtifactPresenter } from '../presenters'; import { workflowArtifactService } from '../services'; import { app } from './_app'; diff --git a/src/systems/forge/service/src/controllers/workflowRun.ts b/src/systems/forge/service/src/controllers/workflowRun.ts index 88062dc10..c2c91717c 100644 --- a/src/systems/forge/service/src/controllers/workflowRun.ts +++ b/src/systems/forge/service/src/controllers/workflowRun.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { createValidator, v, type ValidatorOptions } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { createValidator, v, type ValidatorOptions } from '@mtsrc/validation'; import { workflowRunPresenter, workflowRunStepPresenter } from '../presenters'; import { workflowRunService } from '../services'; import { app } from './_app'; diff --git a/src/systems/forge/service/src/controllers/workflowVersion.ts b/src/systems/forge/service/src/controllers/workflowVersion.ts index cff8bd21c..fd5e8c09d 100644 --- a/src/systems/forge/service/src/controllers/workflowVersion.ts +++ b/src/systems/forge/service/src/controllers/workflowVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { workflowVersionPresenter } from '../presenters'; import { workflowVersionService } from '../services'; import { app } from './_app'; diff --git a/src/systems/forge/service/src/encryption.ts b/src/systems/forge/service/src/encryption.ts index a5584713b..804ef58e6 100644 --- a/src/systems/forge/service/src/encryption.ts +++ b/src/systems/forge/service/src/encryption.ts @@ -1,4 +1,4 @@ -import { Encryption } from '@lowerdeck/encryption'; +import { Encryption } from '@mtsrc/encryption'; import { env } from './env'; export let encryption = new Encryption(env.encryption.ENCRYPTION_KEY); diff --git a/src/systems/forge/service/src/env.ts b/src/systems/forge/service/src/env.ts index 5e71185d3..4462cd139 100644 --- a/src/systems/forge/service/src/env.ts +++ b/src/systems/forge/service/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/forge/service/src/id.ts b/src/systems/forge/service/src/id.ts index 49e024d7c..6342a19b8 100644 --- a/src/systems/forge/service/src/id.ts +++ b/src/systems/forge/service/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ tenant: idType.sorted('fins_'), diff --git a/src/systems/forge/service/src/instrument.ts b/src/systems/forge/service/src/instrument.ts index f1f173b93..6eeeb10a8 100644 --- a/src/systems/forge/service/src/instrument.ts +++ b/src/systems/forge/service/src/instrument.ts @@ -1,4 +1,4 @@ -import { setSentry } from '@lowerdeck/sentry'; +import { setSentry } from '@mtsrc/sentry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/forge/service/src/providers/_lib/adapter.ts b/src/systems/forge/service/src/providers/_lib/adapter.ts index a9476f529..7553d2410 100644 --- a/src/systems/forge/service/src/providers/_lib/adapter.ts +++ b/src/systems/forge/service/src/providers/_lib/adapter.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors, type IQueue, type IQueueProcessor } from '@lowerdeck/queue'; +import { combineQueueProcessors, type IQueue, type IQueueProcessor } from '@mtsrc/queue'; import { BuildContext } from './buildContext'; export type BuildRunStep = Awaited>[number]; diff --git a/src/systems/forge/service/src/providers/_lib/buildContext.ts b/src/systems/forge/service/src/providers/_lib/buildContext.ts index 5527782e1..cd1c9bee0 100644 --- a/src/systems/forge/service/src/providers/_lib/buildContext.ts +++ b/src/systems/forge/service/src/providers/_lib/buildContext.ts @@ -1,4 +1,4 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { notFoundError, ServiceError } from '@mtsrc/error'; import type { WorkflowVersionStep } from '../../../prisma/generated/browser'; import type { Workflow, WorkflowRun, WorkflowRunStep } from '../../../prisma/generated/client'; import { db } from '../../db'; diff --git a/src/systems/forge/service/src/providers/_lib/queues.ts b/src/systems/forge/service/src/providers/_lib/queues.ts index ae999d2f9..eef7ee4d6 100644 --- a/src/systems/forge/service/src/providers/_lib/queues.ts +++ b/src/systems/forge/service/src/providers/_lib/queues.ts @@ -1,5 +1,5 @@ -import { createLock } from '@lowerdeck/lock'; -import { combineQueueProcessors, createQueue, type IQueue, type IQueueProcessor } from '@lowerdeck/queue'; +import { createLock } from '@mtsrc/lock'; +import { combineQueueProcessors, createQueue, type IQueue, type IQueueProcessor } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { workflowArtifactService } from '../../services'; diff --git a/src/systems/forge/service/src/providers/aws-codebuild/access.ts b/src/systems/forge/service/src/providers/aws-codebuild/access.ts index fc26ac6c2..8065ea43b 100644 --- a/src/systems/forge/service/src/providers/aws-codebuild/access.ts +++ b/src/systems/forge/service/src/providers/aws-codebuild/access.ts @@ -3,7 +3,7 @@ import { BatchGetProjectsCommand, ListBuildsForProjectCommand } from '@aws-sdk/client-codebuild'; -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { env } from '../../env'; import { codebuild, logsClient } from './codeBuild'; import { ensureProject } from './project'; diff --git a/src/systems/forge/service/src/providers/aws-codebuild/index.ts b/src/systems/forge/service/src/providers/aws-codebuild/index.ts index 3cb6c44e8..d0f906416 100644 --- a/src/systems/forge/service/src/providers/aws-codebuild/index.ts +++ b/src/systems/forge/service/src/providers/aws-codebuild/index.ts @@ -1,6 +1,6 @@ import { GetLogEventsCommand } from '@aws-sdk/client-cloudwatch-logs'; import { BatchGetBuildsCommand, StartBuildCommand } from '@aws-sdk/client-codebuild'; -import { createQueue, type IQueue, type IQueueProcessor } from '@lowerdeck/queue'; +import { createQueue, type IQueue, type IQueueProcessor } from '@mtsrc/queue'; import { stringify } from 'yaml'; import { env } from '../../env'; import { storage } from '../../storage'; diff --git a/src/systems/forge/service/src/providers/aws-codebuild/project.ts b/src/systems/forge/service/src/providers/aws-codebuild/project.ts index 82d269e3f..9de51e04c 100644 --- a/src/systems/forge/service/src/providers/aws-codebuild/project.ts +++ b/src/systems/forge/service/src/providers/aws-codebuild/project.ts @@ -5,7 +5,7 @@ import { UpdateProjectCommand, type CreateProjectCommandInput } from '@aws-sdk/client-codebuild'; -import { once } from '@lowerdeck/once'; +import { once } from '@mtsrc/once'; import { env } from '../../env'; import { codebuild, logsClient } from './codeBuild'; import { ensureCodeBuildRole } from './role'; diff --git a/src/systems/forge/service/src/providers/aws-codebuild/role.ts b/src/systems/forge/service/src/providers/aws-codebuild/role.ts index 863a083bb..6fb421737 100644 --- a/src/systems/forge/service/src/providers/aws-codebuild/role.ts +++ b/src/systems/forge/service/src/providers/aws-codebuild/role.ts @@ -5,7 +5,7 @@ import { PutRolePolicyCommand, UpdateAssumeRolePolicyCommand } from '@aws-sdk/client-iam'; -import { once } from '@lowerdeck/once'; +import { once } from '@mtsrc/once'; import { env } from '../../env'; let iam = diff --git a/src/systems/forge/service/src/providers/index.ts b/src/systems/forge/service/src/providers/index.ts index 6d19e3d9a..0757c21e9 100644 --- a/src/systems/forge/service/src/providers/index.ts +++ b/src/systems/forge/service/src/providers/index.ts @@ -1,4 +1,4 @@ -import type { IQueue, IQueueProcessor } from '@lowerdeck/queue'; +import type { IQueue, IQueueProcessor } from '@mtsrc/queue'; import { env } from '../env'; import { AwsCodeBuildAdapter } from './aws-codebuild'; import { LocalBuildAdapter } from './local'; diff --git a/src/systems/forge/service/src/providers/local/index.ts b/src/systems/forge/service/src/providers/local/index.ts index bdb5edf41..6636c7f42 100644 --- a/src/systems/forge/service/src/providers/local/index.ts +++ b/src/systems/forge/service/src/providers/local/index.ts @@ -1,7 +1,7 @@ import { spawn } from 'child_process'; import { promises as fs } from 'fs'; import JSZip from 'jszip'; -import { createQueue, type IQueue, type IQueueProcessor } from '@lowerdeck/queue'; +import { createQueue, type IQueue, type IQueueProcessor } from '@mtsrc/queue'; import { tmpdir } from 'os'; import { dirname, join, posix, resolve, sep } from 'path'; import { env } from '../../env'; diff --git a/src/systems/forge/service/src/queues/deleteWorkflow.ts b/src/systems/forge/service/src/queues/deleteWorkflow.ts index 79882fc3a..6b2f4b06b 100644 --- a/src/systems/forge/service/src/queues/deleteWorkflow.ts +++ b/src/systems/forge/service/src/queues/deleteWorkflow.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue, type IQueue, type IQueueProcessor } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue, type IQueue, type IQueueProcessor } from '@mtsrc/queue'; import { subDays } from 'date-fns'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/forge/service/src/queues/deleteWorkflowArtifact.ts b/src/systems/forge/service/src/queues/deleteWorkflowArtifact.ts index 05f5c2856..55141d291 100644 --- a/src/systems/forge/service/src/queues/deleteWorkflowArtifact.ts +++ b/src/systems/forge/service/src/queues/deleteWorkflowArtifact.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors, createQueue, type IQueue, type IQueueProcessor } from '@lowerdeck/queue'; +import { combineQueueProcessors, createQueue, type IQueue, type IQueueProcessor } from '@mtsrc/queue'; import { db } from '../db'; import { env } from '../env'; import { storage } from '../storage'; diff --git a/src/systems/forge/service/src/queues/deleteWorkflowRun.ts b/src/systems/forge/service/src/queues/deleteWorkflowRun.ts index 51e6fe421..ec720c3bd 100644 --- a/src/systems/forge/service/src/queues/deleteWorkflowRun.ts +++ b/src/systems/forge/service/src/queues/deleteWorkflowRun.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors, createQueue, type IQueue, type IQueueProcessor } from '@lowerdeck/queue'; +import { combineQueueProcessors, createQueue, type IQueue, type IQueueProcessor } from '@mtsrc/queue'; import { db } from '../db'; import { env } from '../env'; import { storage } from '../storage'; diff --git a/src/systems/forge/service/src/services/provider.ts b/src/systems/forge/service/src/services/provider.ts index 2c5fe3a0e..c4f99bd48 100644 --- a/src/systems/forge/service/src/services/provider.ts +++ b/src/systems/forge/service/src/services/provider.ts @@ -1,5 +1,5 @@ -import { Hash } from '@lowerdeck/hash'; -import { Service } from '@lowerdeck/service'; +import { Hash } from '@mtsrc/hash'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { env } from '../env'; import { ID, snowflake } from '../id'; diff --git a/src/systems/forge/service/src/services/tenant.ts b/src/systems/forge/service/src/services/tenant.ts index d240b67fb..70f1e4649 100644 --- a/src/systems/forge/service/src/services/tenant.ts +++ b/src/systems/forge/service/src/services/tenant.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/forge/service/src/services/workflow.ts b/src/systems/forge/service/src/services/workflow.ts index c71445f90..eebb06765 100644 --- a/src/systems/forge/service/src/services/workflow.ts +++ b/src/systems/forge/service/src/services/workflow.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant, Workflow } from '../../prisma/generated/client'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/forge/service/src/services/workflowArtifact.ts b/src/systems/forge/service/src/services/workflowArtifact.ts index 6bec15fd5..524ac857b 100644 --- a/src/systems/forge/service/src/services/workflowArtifact.ts +++ b/src/systems/forge/service/src/services/workflowArtifact.ts @@ -1,7 +1,7 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { PublicUrlPurpose } from '@metorial-platform-systems/object-storage-client'; import type { Workflow, diff --git a/src/systems/forge/service/src/services/workflowRun.ts b/src/systems/forge/service/src/services/workflowRun.ts index 64e002547..c46ad6cb7 100644 --- a/src/systems/forge/service/src/services/workflowRun.ts +++ b/src/systems/forge/service/src/services/workflowRun.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Workflow, WorkflowRun } from '../../prisma/generated/client'; import { db } from '../db'; import { encryption } from '../encryption'; diff --git a/src/systems/forge/service/src/services/workflowVersion.ts b/src/systems/forge/service/src/services/workflowVersion.ts index b1115428f..df01463e8 100644 --- a/src/systems/forge/service/src/services/workflowVersion.ts +++ b/src/systems/forge/service/src/services/workflowVersion.ts @@ -1,7 +1,7 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Workflow } from '../../prisma/generated/client'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/forge/service/src/storage.ts b/src/systems/forge/service/src/storage.ts index 61d16ba21..e193bf618 100644 --- a/src/systems/forge/service/src/storage.ts +++ b/src/systems/forge/service/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; diff --git a/src/systems/forge/service/src/test/client.ts b/src/systems/forge/service/src/test/client.ts index 0b518b4cf..41a3451f8 100644 --- a/src/systems/forge/service/src/test/client.ts +++ b/src/systems/forge/service/src/test/client.ts @@ -1,5 +1,5 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { forgeApi } from '../controllers'; import type { ForgeClient } from '../controllers'; diff --git a/src/systems/forge/service/src/test/fixtures/providerFixtures.ts b/src/systems/forge/service/src/test/fixtures/providerFixtures.ts index 487f67d8f..dcfd4f6c5 100644 --- a/src/systems/forge/service/src/test/fixtures/providerFixtures.ts +++ b/src/systems/forge/service/src/test/fixtures/providerFixtures.ts @@ -1,6 +1,6 @@ import type { PrismaClient, Provider } from '../../../prisma/generated/client'; import { ID, snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { defaultProvider as cachedProvider } from '../../services/provider'; export const ProviderFixtures = (db: PrismaClient) => { diff --git a/src/systems/forge/service/src/test/fixtures/tenantFixtures.ts b/src/systems/forge/service/src/test/fixtures/tenantFixtures.ts index 1aa53aea7..eda17ac8f 100644 --- a/src/systems/forge/service/src/test/fixtures/tenantFixtures.ts +++ b/src/systems/forge/service/src/test/fixtures/tenantFixtures.ts @@ -1,7 +1,7 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, Tenant } from '../../../prisma/generated/client'; import { ID, snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const TenantFixtures = (db: PrismaClient) => { const defaultTenant = async (overrides: Partial = {}): Promise => { diff --git a/src/systems/forge/service/src/test/fixtures/workflowArtifactFixtures.ts b/src/systems/forge/service/src/test/fixtures/workflowArtifactFixtures.ts index a7d801e06..7e066a372 100644 --- a/src/systems/forge/service/src/test/fixtures/workflowArtifactFixtures.ts +++ b/src/systems/forge/service/src/test/fixtures/workflowArtifactFixtures.ts @@ -7,7 +7,7 @@ import type { } from '../../../prisma/generated/client'; import { WorkflowArtifactType } from '../../../prisma/generated/client'; import { ID, snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const WorkflowArtifactFixtures = (db: PrismaClient) => { const defaultArtifact = async (data: { diff --git a/src/systems/forge/service/src/test/fixtures/workflowFixtures.ts b/src/systems/forge/service/src/test/fixtures/workflowFixtures.ts index 020bbcd89..7c181a68f 100644 --- a/src/systems/forge/service/src/test/fixtures/workflowFixtures.ts +++ b/src/systems/forge/service/src/test/fixtures/workflowFixtures.ts @@ -7,7 +7,7 @@ import type { } from '../../../prisma/generated/client'; import { WorkflowStatus } from '../../../prisma/generated/client'; import { ID, snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; import { ProviderFixtures } from './providerFixtures'; diff --git a/src/systems/forge/service/src/test/fixtures/workflowRunFixtures.ts b/src/systems/forge/service/src/test/fixtures/workflowRunFixtures.ts index cf07a8996..5e6089075 100644 --- a/src/systems/forge/service/src/test/fixtures/workflowRunFixtures.ts +++ b/src/systems/forge/service/src/test/fixtures/workflowRunFixtures.ts @@ -11,7 +11,7 @@ import type { } from '../../../prisma/generated/client'; import { WorkflowRunStatus } from '../../../prisma/generated/client'; import { ID, snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { WorkflowVersionFixtures } from './workflowVersionFixtures'; import { WorkflowRunStepFixtures } from './workflowRunStepFixtures'; import { encryption } from '../../encryption'; diff --git a/src/systems/forge/service/src/test/fixtures/workflowRunStepFixtures.ts b/src/systems/forge/service/src/test/fixtures/workflowRunStepFixtures.ts index 766ce9de2..3cdc4da3a 100644 --- a/src/systems/forge/service/src/test/fixtures/workflowRunStepFixtures.ts +++ b/src/systems/forge/service/src/test/fixtures/workflowRunStepFixtures.ts @@ -4,7 +4,7 @@ import type { } from '../../../prisma/generated/client'; import { WorkflowRunStepType, WorkflowRunStepStatus } from '../../../prisma/generated/client'; import { ID, snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const WorkflowRunStepFixtures = (db: PrismaClient) => { const defaultStep = async (data: { diff --git a/src/systems/forge/service/src/test/fixtures/workflowVersionFixtures.ts b/src/systems/forge/service/src/test/fixtures/workflowVersionFixtures.ts index 76c8be9d0..cca3a51cd 100644 --- a/src/systems/forge/service/src/test/fixtures/workflowVersionFixtures.ts +++ b/src/systems/forge/service/src/test/fixtures/workflowVersionFixtures.ts @@ -8,10 +8,10 @@ import type { WorkflowArtifact } from '../../../prisma/generated/client'; import { ID, snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { WorkflowFixtures } from './workflowFixtures'; import { WorkflowVersionStepFixtures } from './workflowVersionStepFixtures'; -import { generatePlainId } from '@lowerdeck/id'; +import { generatePlainId } from '@mtsrc/id'; export const WorkflowVersionFixtures = (db: PrismaClient) => { const workflowFixtures = WorkflowFixtures(db); diff --git a/src/systems/forge/service/src/test/fixtures/workflowVersionStepFixtures.ts b/src/systems/forge/service/src/test/fixtures/workflowVersionStepFixtures.ts index a52316acb..a7f2bc0b8 100644 --- a/src/systems/forge/service/src/test/fixtures/workflowVersionStepFixtures.ts +++ b/src/systems/forge/service/src/test/fixtures/workflowVersionStepFixtures.ts @@ -4,7 +4,7 @@ import type { } from '../../../prisma/generated/client'; import { WorkflowVersionStepType } from '../../../prisma/generated/client'; import { ID, snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const WorkflowVersionStepFixtures = (db: PrismaClient) => { const defaultStep = async (data: { diff --git a/src/systems/forge/service/src/test/setup.ts b/src/systems/forge/service/src/test/setup.ts index bed7ab526..87eb481ba 100644 --- a/src/systems/forge/service/src/test/setup.ts +++ b/src/systems/forge/service/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; import { defaultProvider } from '../services/provider'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/forge/service/src/worker.ts b/src/systems/forge/service/src/worker.ts index 7649ef10f..1f889871f 100644 --- a/src/systems/forge/service/src/worker.ts +++ b/src/systems/forge/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { buildProviderProcessors } from './providers'; import { buildQueueProcessors } from './providers/_lib/queues'; import { deleteWorkflowProcessors } from './queues/deleteWorkflow'; diff --git a/src/systems/forge/service/vitest.config.ts b/src/systems/forge/service/vitest.config.ts index f660145aa..5fe2a24eb 100644 --- a/src/systems/forge/service/vitest.config.ts +++ b/src/systems/forge/service/vitest.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { const env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/forge/service/vitest.e2e.config.ts b/src/systems/forge/service/vitest.e2e.config.ts index c5f68cdbc..7d9703773 100644 --- a/src/systems/forge/service/vitest.e2e.config.ts +++ b/src/systems/forge/service/vitest.e2e.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/function-bay/packages/function-bay/package.json b/src/systems/function-bay/packages/function-bay/package.json index e549835f3..b17a0a64d 100644 --- a/src/systems/function-bay/packages/function-bay/package.json +++ b/src/systems/function-bay/packages/function-bay/package.json @@ -35,7 +35,7 @@ "@function-bay/build": "^1.0.0", "@function-bay/types": "^1.0.0", "@function-bay/utils": "^1.0.0", - "@lowerdeck/validation": "^1.0.10", - "@types/bun": "^1.3.5" + "@types/bun": "^1.3.5", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/function-bay/packages/nodejs/package.json b/src/systems/function-bay/packages/nodejs/package.json index 5eb8ca17e..ddaa337fd 100644 --- a/src/systems/function-bay/packages/nodejs/package.json +++ b/src/systems/function-bay/packages/nodejs/package.json @@ -33,7 +33,7 @@ "@function-bay/build": "^1.0.0", "@function-bay/utils": "^1.0.0", "@function-bay/types": "^1.0.0", - "@lowerdeck/validation": "^1.0.10", - "@types/bun": "^1.3.5" + "@types/bun": "^1.3.5", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/function-bay/packages/nodejs/src/index.ts b/src/systems/function-bay/packages/nodejs/src/index.ts index 10ba817e4..46e06b960 100644 --- a/src/systems/function-bay/packages/nodejs/src/index.ts +++ b/src/systems/function-bay/packages/nodejs/src/index.ts @@ -1,6 +1,6 @@ import { Function, Runtime } from '@function-bay/build'; import { tempDir } from '@function-bay/utils'; -import { v, ValidationTypeValue } from '@lowerdeck/validation'; +import { v, ValidationTypeValue } from '@mtsrc/validation'; import { $ as _$ } from 'bun'; import fs from 'fs/promises'; import path from 'path'; diff --git a/src/systems/function-bay/packages/types/package.json b/src/systems/function-bay/packages/types/package.json index 0c5c95314..1b1e2163d 100644 --- a/src/systems/function-bay/packages/types/package.json +++ b/src/systems/function-bay/packages/types/package.json @@ -37,6 +37,6 @@ "vitest": "^3.2.4" }, "dependencies": { - "@lowerdeck/validation": "^1.0.10" + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/function-bay/packages/types/src/index.ts b/src/systems/function-bay/packages/types/src/index.ts index 65db0e4c5..a20faf535 100644 --- a/src/systems/function-bay/packages/types/src/index.ts +++ b/src/systems/function-bay/packages/types/src/index.ts @@ -1,4 +1,4 @@ -import { v, ValidationTypeValue } from '@lowerdeck/validation'; +import { v, ValidationTypeValue } from '@mtsrc/validation'; export let functionBayLayer = v.object({ provider: v.enumOf(['aws.lambda', 'gcp.cloud-functions', 'azure.functions']), diff --git a/src/systems/function-bay/packages/utils/package.json b/src/systems/function-bay/packages/utils/package.json index a97afbd0c..0a6598383 100644 --- a/src/systems/function-bay/packages/utils/package.json +++ b/src/systems/function-bay/packages/utils/package.json @@ -36,8 +36,8 @@ "vitest": "^3.2.4" }, "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "jszip": "^3.10.1" + "jszip": "^3.10.1", + "@mtsrc/env": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index e7e82792c..e4de4294d 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -23,7 +23,7 @@ WORKDIR /app/src/systems/function-bay/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index d639cb8e2..5f15008b5 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -24,12 +24,12 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@metorial-platform-systems/function-bay-client": "workspace:*", "@types/bun": "latest", "@types/lodash": "^4.17.23", "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17" + "vitest": "4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -40,25 +40,6 @@ "@aws-sdk/client-kms": "^3.1037.0", "@aws-sdk/client-lambda": "^3.958.0", "@function-bay/types": "^1.0.0", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "^1.0.10", "@metorial-platform-systems/forge-client": "workspace:*", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", @@ -76,6 +57,25 @@ "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "undici": "^8.1.0", - "yaml": "^2.8.2" + "yaml": "^2.8.2", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/function-bay/service/src/controllers/_app.ts b/src/systems/function-bay/service/src/controllers/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/function-bay/service/src/controllers/_app.ts +++ b/src/systems/function-bay/service/src/controllers/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/function-bay/service/src/controllers/function.ts b/src/systems/function-bay/service/src/controllers/function.ts index 068e06da8..905b1cb5b 100644 --- a/src/systems/function-bay/service/src/controllers/function.ts +++ b/src/systems/function-bay/service/src/controllers/function.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { functionPresenter } from '../presenters/function'; import { functionService } from '../services'; import { functionInvocationService } from '../services/functionInvocation'; diff --git a/src/systems/function-bay/service/src/controllers/functionDeployment.ts b/src/systems/function-bay/service/src/controllers/functionDeployment.ts index 137682575..a131a663a 100644 --- a/src/systems/function-bay/service/src/controllers/functionDeployment.ts +++ b/src/systems/function-bay/service/src/controllers/functionDeployment.ts @@ -1,6 +1,6 @@ import { functionBayRuntimeSpec } from '@function-bay/types'; -import { Paginator } from '@lowerdeck/pagination'; -import { createValidator, v, type ValidatorOptions } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { createValidator, v, type ValidatorOptions } from '@mtsrc/validation'; import { functionDeploymentPresenter, functionDeploymentStepPresenter } from '../presenters'; import { functionDeploymentService } from '../services'; import { app } from './_app'; diff --git a/src/systems/function-bay/service/src/controllers/functionInvocation.ts b/src/systems/function-bay/service/src/controllers/functionInvocation.ts index 4773c155f..1b4649e41 100644 --- a/src/systems/function-bay/service/src/controllers/functionInvocation.ts +++ b/src/systems/function-bay/service/src/controllers/functionInvocation.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { functionInvocationPresenter } from '../presenters'; import { functionInvocationService } from '../services'; import { app } from './_app'; diff --git a/src/systems/function-bay/service/src/controllers/functionVersion.ts b/src/systems/function-bay/service/src/controllers/functionVersion.ts index 4df99f4c5..d6ef3132b 100644 --- a/src/systems/function-bay/service/src/controllers/functionVersion.ts +++ b/src/systems/function-bay/service/src/controllers/functionVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { functionVersionPresenter } from '../presenters'; import { functionVersionService } from '../services'; import { app } from './_app'; diff --git a/src/systems/function-bay/service/src/controllers/index.ts b/src/systems/function-bay/service/src/controllers/index.ts index 8e0b2869e..5cbb99609 100644 --- a/src/systems/function-bay/service/src/controllers/index.ts +++ b/src/systems/function-bay/service/src/controllers/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { functionController } from './function'; import { functionDeploymentController } from './functionDeployment'; diff --git a/src/systems/function-bay/service/src/controllers/runtime.ts b/src/systems/function-bay/service/src/controllers/runtime.ts index 6ffe6f810..c0b0f9014 100644 --- a/src/systems/function-bay/service/src/controllers/runtime.ts +++ b/src/systems/function-bay/service/src/controllers/runtime.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { runtimePresenter } from '../presenters'; import { runtimeService } from '../services'; import { app } from './_app'; diff --git a/src/systems/function-bay/service/src/controllers/tenant.ts b/src/systems/function-bay/service/src/controllers/tenant.ts index 25e2e4973..297fd0578 100644 --- a/src/systems/function-bay/service/src/controllers/tenant.ts +++ b/src/systems/function-bay/service/src/controllers/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { tenantPresenter } from '../presenters/tenant'; import { tenantService } from '../services'; import { app } from './_app'; diff --git a/src/systems/function-bay/service/src/encryption.ts b/src/systems/function-bay/service/src/encryption.ts index a5584713b..804ef58e6 100644 --- a/src/systems/function-bay/service/src/encryption.ts +++ b/src/systems/function-bay/service/src/encryption.ts @@ -1,4 +1,4 @@ -import { Encryption } from '@lowerdeck/encryption'; +import { Encryption } from '@mtsrc/encryption'; import { env } from './env'; export let encryption = new Encryption(env.encryption.ENCRYPTION_KEY); diff --git a/src/systems/function-bay/service/src/env.ts b/src/systems/function-bay/service/src/env.ts index 642a99a86..ea33d3866 100644 --- a/src/systems/function-bay/service/src/env.ts +++ b/src/systems/function-bay/service/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/function-bay/service/src/forge.ts b/src/systems/function-bay/service/src/forge.ts index ecd31bbcb..9b5ebbbd9 100644 --- a/src/systems/function-bay/service/src/forge.ts +++ b/src/systems/function-bay/service/src/forge.ts @@ -1,6 +1,6 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { delay } from '@lowerdeck/delay'; -import { Hash } from '@lowerdeck/hash'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { delay } from '@mtsrc/delay'; +import { Hash } from '@mtsrc/hash'; import { createForgeClient } from '@metorial-platform-systems/forge-client'; import type { Runtime, Tenant } from '../prisma/generated/client'; import { db } from './db'; diff --git a/src/systems/function-bay/service/src/id.ts b/src/systems/function-bay/service/src/id.ts index 815d98a5c..05e553171 100644 --- a/src/systems/function-bay/service/src/id.ts +++ b/src/systems/function-bay/service/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ tenant: idType.sorted('bten_'), diff --git a/src/systems/function-bay/service/src/instrument.ts b/src/systems/function-bay/service/src/instrument.ts index a306a2ccf..a7a9c17d3 100644 --- a/src/systems/function-bay/service/src/instrument.ts +++ b/src/systems/function-bay/service/src/instrument.ts @@ -1,4 +1,4 @@ -import { setSentry } from '@lowerdeck/sentry'; +import { setSentry } from '@mtsrc/sentry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/function-bay/service/src/providers/aws-lambda/access.ts b/src/systems/function-bay/service/src/providers/aws-lambda/access.ts index 506053e9d..b82f61542 100644 --- a/src/systems/function-bay/service/src/providers/aws-lambda/access.ts +++ b/src/systems/function-bay/service/src/providers/aws-lambda/access.ts @@ -3,7 +3,7 @@ import { DeleteFunctionCommand, GetAccountSettingsCommand } from '@aws-sdk/client-lambda'; -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import JSZip from 'jszip'; import { env, lambdaNetworkConfig } from '../../env'; import { lambdaClient } from './lambda'; diff --git a/src/systems/function-bay/service/src/providers/aws-lambda/deploy.ts b/src/systems/function-bay/service/src/providers/aws-lambda/deploy.ts index 8a16c9afa..79178992b 100644 --- a/src/systems/function-bay/service/src/providers/aws-lambda/deploy.ts +++ b/src/systems/function-bay/service/src/providers/aws-lambda/deploy.ts @@ -4,7 +4,7 @@ import { GetFunctionCommand } from '@aws-sdk/client-lambda'; import type { FunctionBayRuntimeConfig } from '@function-bay/types'; -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { mkdir, readFile, rm, stat, writeFile } from 'fs/promises'; import JSZip from 'jszip'; import { tmpdir } from 'os'; diff --git a/src/systems/function-bay/service/src/providers/aws-lambda/invoke.ts b/src/systems/function-bay/service/src/providers/aws-lambda/invoke.ts index 7544b1fbf..9e4a60e52 100644 --- a/src/systems/function-bay/service/src/providers/aws-lambda/invoke.ts +++ b/src/systems/function-bay/service/src/providers/aws-lambda/invoke.ts @@ -1,5 +1,5 @@ import { InvokeCommand, type InvokeCommandOutput } from '@aws-sdk/client-lambda'; -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import type { Function, FunctionVersion } from '../../../prisma/generated/client'; import { parseInvocationPayload } from '../_lib'; import { createDeflectorToken, getDeflectorProxyUrl } from './deflector'; diff --git a/src/systems/function-bay/service/src/providers/aws-lambda/role.ts b/src/systems/function-bay/service/src/providers/aws-lambda/role.ts index b43e29368..24bca5714 100644 --- a/src/systems/function-bay/service/src/providers/aws-lambda/role.ts +++ b/src/systems/function-bay/service/src/providers/aws-lambda/role.ts @@ -5,7 +5,7 @@ import { PutRolePolicyCommand, UpdateAssumeRolePolicyCommand } from '@aws-sdk/client-iam'; -import { once } from '@lowerdeck/once'; +import { once } from '@mtsrc/once'; import { env, lambdaNetworkConfig } from '../../env'; let iam = diff --git a/src/systems/function-bay/service/src/providers/aws-lambda/runtime.ts b/src/systems/function-bay/service/src/providers/aws-lambda/runtime.ts index 540f1557a..508192f22 100644 --- a/src/systems/function-bay/service/src/providers/aws-lambda/runtime.ts +++ b/src/systems/function-bay/service/src/providers/aws-lambda/runtime.ts @@ -3,8 +3,8 @@ import type { FunctionBayRuntimeConfig, FunctionBayRuntimeSpec } from '@function-bay/types'; -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; import type { Runtime } from '../../../prisma/generated/client'; import { db } from '../../db'; import type { ForgeWorkflowStep } from '../../forge'; diff --git a/src/systems/function-bay/service/src/providers/index.ts b/src/systems/function-bay/service/src/providers/index.ts index a94f597f2..104095332 100644 --- a/src/systems/function-bay/service/src/providers/index.ts +++ b/src/systems/function-bay/service/src/providers/index.ts @@ -1,4 +1,4 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { notFoundError, ServiceError } from '@mtsrc/error'; import { env } from '../env'; import { awsLambda } from './aws-lambda'; import { localProvider } from './local'; diff --git a/src/systems/function-bay/service/src/providers/local/runtime.ts b/src/systems/function-bay/service/src/providers/local/runtime.ts index 5c743868c..41214ca6f 100644 --- a/src/systems/function-bay/service/src/providers/local/runtime.ts +++ b/src/systems/function-bay/service/src/providers/local/runtime.ts @@ -1,6 +1,6 @@ import type { FunctionBayRuntimeSpec } from '@function-bay/types'; -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; import type { Runtime } from '../../../prisma/generated/client'; import { db } from '../../db'; import type { ForgeWorkflowStep } from '../../forge'; diff --git a/src/systems/function-bay/service/src/queues/build.ts b/src/systems/function-bay/service/src/queues/build.ts index 871479079..11f3eeb90 100644 --- a/src/systems/function-bay/service/src/queues/build.ts +++ b/src/systems/function-bay/service/src/queues/build.ts @@ -1,7 +1,7 @@ import { functionBayRuntimeConfig, type FunctionBayRuntimeConfig } from '@function-bay/types'; -import { generatePlainId } from '@lowerdeck/id'; -import { combineQueueProcessors, createQueue, QueueRetryError } from '@lowerdeck/queue'; -import { v } from '@lowerdeck/validation'; +import { generatePlainId } from '@mtsrc/id'; +import { combineQueueProcessors, createQueue, QueueRetryError } from '@mtsrc/queue'; +import { v } from '@mtsrc/validation'; import { Readable } from 'stream'; import { db } from '../db'; import { encryption } from '../encryption'; diff --git a/src/systems/function-bay/service/src/queues/cleanup.ts b/src/systems/function-bay/service/src/queues/cleanup.ts index b672f9bf4..10ffbff67 100644 --- a/src/systems/function-bay/service/src/queues/cleanup.ts +++ b/src/systems/function-bay/service/src/queues/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subDays, subHours } from 'date-fns'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/function-bay/service/src/services/function.ts b/src/systems/function-bay/service/src/services/function.ts index 4e6ad0e68..c70f0d0a8 100644 --- a/src/systems/function-bay/service/src/services/function.ts +++ b/src/systems/function-bay/service/src/services/function.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Function, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/function-bay/service/src/services/functionDeployment.ts b/src/systems/function-bay/service/src/services/functionDeployment.ts index 9c97f000b..8656ab96d 100644 --- a/src/systems/function-bay/service/src/services/functionDeployment.ts +++ b/src/systems/function-bay/service/src/services/functionDeployment.ts @@ -1,8 +1,8 @@ import type { FunctionBayRuntimeSpec } from '@function-bay/types'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Function, FunctionDeployment, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { encryption } from '../encryption'; diff --git a/src/systems/function-bay/service/src/services/functionInvocation.ts b/src/systems/function-bay/service/src/services/functionInvocation.ts index 2dc9010e5..a3d6cc463 100644 --- a/src/systems/function-bay/service/src/services/functionInvocation.ts +++ b/src/systems/function-bay/service/src/services/functionInvocation.ts @@ -1,8 +1,8 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { notFoundError, preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { getSentry } from '@lowerdeck/sentry'; -import { Service } from '@lowerdeck/service'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { notFoundError, preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { getSentry } from '@mtsrc/sentry'; +import { Service } from '@mtsrc/service'; import type { Function } from '../../prisma/generated/client'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/function-bay/service/src/services/functionVersion.ts b/src/systems/function-bay/service/src/services/functionVersion.ts index e93335cf9..0fe4ab5e9 100644 --- a/src/systems/function-bay/service/src/services/functionVersion.ts +++ b/src/systems/function-bay/service/src/services/functionVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Function } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/function-bay/service/src/services/provider.ts b/src/systems/function-bay/service/src/services/provider.ts index 5fd4676a4..1a6da0727 100644 --- a/src/systems/function-bay/service/src/services/provider.ts +++ b/src/systems/function-bay/service/src/services/provider.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { defaultProvider } from '../providers'; class providerServiceImpl { diff --git a/src/systems/function-bay/service/src/services/runtime.ts b/src/systems/function-bay/service/src/services/runtime.ts index 8fab7e730..63a7b5c16 100644 --- a/src/systems/function-bay/service/src/services/runtime.ts +++ b/src/systems/function-bay/service/src/services/runtime.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; let include = { diff --git a/src/systems/function-bay/service/src/services/tenant.ts b/src/systems/function-bay/service/src/services/tenant.ts index d240b67fb..70f1e4649 100644 --- a/src/systems/function-bay/service/src/services/tenant.ts +++ b/src/systems/function-bay/service/src/services/tenant.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/function-bay/service/src/storage.ts b/src/systems/function-bay/service/src/storage.ts index 6ba33c455..ad61db27a 100644 --- a/src/systems/function-bay/service/src/storage.ts +++ b/src/systems/function-bay/service/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; diff --git a/src/systems/function-bay/service/src/test/client.ts b/src/systems/function-bay/service/src/test/client.ts index 188a6dffe..510d387e1 100644 --- a/src/systems/function-bay/service/src/test/client.ts +++ b/src/systems/function-bay/service/src/test/client.ts @@ -1,5 +1,5 @@ import { createFunctionBayClient } from '@metorial-platform-systems/function-bay-client'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { functionBayApi } from '../controllers'; type ClientOptsLike = { diff --git a/src/systems/function-bay/service/src/test/fixtures/functionBundleFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/functionBundleFixtures.ts index 1ab9ca171..839de9e9b 100644 --- a/src/systems/function-bay/service/src/test/fixtures/functionBundleFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/functionBundleFixtures.ts @@ -2,7 +2,7 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, FunctionBundle } from '../../../prisma/generated/client'; import { FunctionBundleStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const FunctionBundleFixtures = (db: PrismaClient) => { const defaultBundle = async (data: { diff --git a/src/systems/function-bay/service/src/test/fixtures/functionDeploymentFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/functionDeploymentFixtures.ts index d040bb468..c3c84023e 100644 --- a/src/systems/function-bay/service/src/test/fixtures/functionDeploymentFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/functionDeploymentFixtures.ts @@ -10,10 +10,10 @@ import type { } from '../../../prisma/generated/client'; import { FunctionDeploymentStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { FunctionFixtures } from './functionFixtures'; import { FunctionBundleFixtures } from './functionBundleFixtures'; -import { Encryption } from '@lowerdeck/encryption'; +import { Encryption } from '@mtsrc/encryption'; import { resolveEncryptedEnvironmentVariables, withoutEncryptedEnvOverrides diff --git a/src/systems/function-bay/service/src/test/fixtures/functionDeploymentStepFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/functionDeploymentStepFixtures.ts index 72a25385e..687413053 100644 --- a/src/systems/function-bay/service/src/test/fixtures/functionDeploymentStepFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/functionDeploymentStepFixtures.ts @@ -7,7 +7,7 @@ import { FunctionDeploymentStepType } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const FunctionDeploymentStepFixtures = (db: PrismaClient) => { const defaultStep = async (data: { diff --git a/src/systems/function-bay/service/src/test/fixtures/functionFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/functionFixtures.ts index fa612790d..ddd44b4dc 100644 --- a/src/systems/function-bay/service/src/test/fixtures/functionFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/functionFixtures.ts @@ -1,4 +1,4 @@ -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { randomBytes } from 'crypto'; import type { Function as FunctionModel, diff --git a/src/systems/function-bay/service/src/test/fixtures/functionInvocationFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/functionInvocationFixtures.ts index a6ea008d7..4e00177bb 100644 --- a/src/systems/function-bay/service/src/test/fixtures/functionInvocationFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/functionInvocationFixtures.ts @@ -9,7 +9,7 @@ import type { } from '../../../prisma/generated/client'; import { FunctionInvocationStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { FunctionVersionFixtures } from './functionVersionFixtures'; export const FunctionInvocationFixtures = (db: PrismaClient) => { diff --git a/src/systems/function-bay/service/src/test/fixtures/functionVersionFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/functionVersionFixtures.ts index b4d454f41..ed84c128d 100644 --- a/src/systems/function-bay/service/src/test/fixtures/functionVersionFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/functionVersionFixtures.ts @@ -1,5 +1,5 @@ -import { Encryption } from '@lowerdeck/encryption'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { Encryption } from '@mtsrc/encryption'; +import { defineFactory } from '@mtsrc/testing-tools'; import { randomBytes } from 'crypto'; import type { FunctionBundle, diff --git a/src/systems/function-bay/service/src/test/fixtures/providerFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/providerFixtures.ts index 72e80dc24..ac847d92d 100644 --- a/src/systems/function-bay/service/src/test/fixtures/providerFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/providerFixtures.ts @@ -1,4 +1,4 @@ -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { randomBytes } from 'crypto'; import type { PrismaClient, Provider } from '../../../prisma/generated/client'; import { getId } from '../../id'; diff --git a/src/systems/function-bay/service/src/test/fixtures/runtimeFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/runtimeFixtures.ts index db444336f..fddd32499 100644 --- a/src/systems/function-bay/service/src/test/fixtures/runtimeFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/runtimeFixtures.ts @@ -1,4 +1,4 @@ -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { randomBytes } from 'crypto'; import type { PrismaClient, Provider, Runtime } from '../../../prisma/generated/client'; import { getId } from '../../id'; diff --git a/src/systems/function-bay/service/src/test/fixtures/runtimeForgeWorkflowFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/runtimeForgeWorkflowFixtures.ts index 7a8fc991f..461c814d8 100644 --- a/src/systems/function-bay/service/src/test/fixtures/runtimeForgeWorkflowFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/runtimeForgeWorkflowFixtures.ts @@ -7,7 +7,7 @@ import type { Provider } from '../../../prisma/generated/client'; import { snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { RuntimeFixtures } from './runtimeFixtures'; import { TenantFixtures } from './tenantFixtures'; diff --git a/src/systems/function-bay/service/src/test/fixtures/tenantFixtures.ts b/src/systems/function-bay/service/src/test/fixtures/tenantFixtures.ts index 5c203ae60..305a9ae22 100644 --- a/src/systems/function-bay/service/src/test/fixtures/tenantFixtures.ts +++ b/src/systems/function-bay/service/src/test/fixtures/tenantFixtures.ts @@ -1,7 +1,7 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, Tenant } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const TenantFixtures = (db: PrismaClient) => { const defaultTenant = async (overrides: Partial = {}): Promise => { diff --git a/src/systems/function-bay/service/src/test/setup.ts b/src/systems/function-bay/service/src/test/setup.ts index c714d662f..6b288f013 100644 --- a/src/systems/function-bay/service/src/test/setup.ts +++ b/src/systems/function-bay/service/src/test/setup.ts @@ -1,4 +1,4 @@ -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; import { PrismaPg } from '@prisma/adapter-pg'; import { afterAll } from 'vitest'; import { PrismaClient } from '../../prisma/generated/client'; diff --git a/src/systems/function-bay/service/src/worker.ts b/src/systems/function-bay/service/src/worker.ts index 1a0be4300..47b30ee08 100644 --- a/src/systems/function-bay/service/src/worker.ts +++ b/src/systems/function-bay/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { buildProcessors } from './queues/build'; import { cleanupProcessor } from './queues/cleanup'; diff --git a/src/systems/function-bay/service/vitest.config.ts b/src/systems/function-bay/service/vitest.config.ts index 95f9e102a..33aed7f19 100644 --- a/src/systems/function-bay/service/vitest.config.ts +++ b/src/systems/function-bay/service/vitest.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { const env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/function-bay/service/vitest.e2e.config.ts b/src/systems/function-bay/service/vitest.e2e.config.ts index 1409cd48d..ebf214f7d 100644 --- a/src/systems/function-bay/service/vitest.e2e.config.ts +++ b/src/systems/function-bay/service/vitest.e2e.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index 24e0c1488..0111149e2 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage — Docker context is the OSS monorepo root (./oss). -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -25,7 +25,7 @@ WORKDIR /app/src/systems/origin/apps/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/origin/apps/service/package.json b/src/systems/origin/apps/service/package.json index 9ebaa9fd4..1234547e7 100644 --- a/src/systems/origin/apps/service/package.json +++ b/src/systems/origin/apps/service/package.json @@ -18,13 +18,13 @@ "test:e2e": "bunx vitest run --config vitest.e2e.config.ts" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", "@vitest/coverage-v8": "^4.0.16", "@vitest/ui": "^4.0.16", - "vitest": "^4.0.16" + "vitest": "^4.0.16", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -36,28 +36,6 @@ "@bufbuild/protobuf": "^2.11.0", "@gitbeaker/rest": "^43.8.0", "@grpc/grpc-js": "^1.13.4", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", "@octokit/auth-app": "^8.1.2", "@octokit/core": "^7.0.6", "@prisma/adapter-pg": "^7.4.1", @@ -75,6 +53,28 @@ "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", "protobufjs": "^7.5.3", - "yaml": "^2.8.2" + "yaml": "^2.8.2", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0" } } diff --git a/src/systems/origin/apps/service/src/controllers/_app.ts b/src/systems/origin/apps/service/src/controllers/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/origin/apps/service/src/controllers/_app.ts +++ b/src/systems/origin/apps/service/src/controllers/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/origin/apps/service/src/controllers/actor.ts b/src/systems/origin/apps/service/src/controllers/actor.ts index d0f83a77b..f11d15201 100644 --- a/src/systems/origin/apps/service/src/controllers/actor.ts +++ b/src/systems/origin/apps/service/src/controllers/actor.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { actorPresenter } from '../presenters/actor'; import { actorService } from '../services'; import { app } from './_app'; diff --git a/src/systems/origin/apps/service/src/controllers/changeNotification.ts b/src/systems/origin/apps/service/src/controllers/changeNotification.ts index 45e65bd47..a27e2d641 100644 --- a/src/systems/origin/apps/service/src/controllers/changeNotification.ts +++ b/src/systems/origin/apps/service/src/controllers/changeNotification.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { changeNotificationPresenter } from '../presenters/changeNotification'; import { changeNotificationService } from '../services'; import { app } from './_app'; diff --git a/src/systems/origin/apps/service/src/controllers/codeBucket.ts b/src/systems/origin/apps/service/src/controllers/codeBucket.ts index 71c24ca8c..9749d2d15 100644 --- a/src/systems/origin/apps/service/src/controllers/codeBucket.ts +++ b/src/systems/origin/apps/service/src/controllers/codeBucket.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { env } from '../env'; import { codeBucketPresenter } from '../presenters/codeBucket'; import { diff --git a/src/systems/origin/apps/service/src/controllers/index.ts b/src/systems/origin/apps/service/src/controllers/index.ts index 77c8dd3ca..b879c780d 100644 --- a/src/systems/origin/apps/service/src/controllers/index.ts +++ b/src/systems/origin/apps/service/src/controllers/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { actorController } from './actor'; import { changeNotificationController } from './changeNotification'; diff --git a/src/systems/origin/apps/service/src/controllers/scmBackend.ts b/src/systems/origin/apps/service/src/controllers/scmBackend.ts index 237f81b4a..826f4c777 100644 --- a/src/systems/origin/apps/service/src/controllers/scmBackend.ts +++ b/src/systems/origin/apps/service/src/controllers/scmBackend.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { scmBackendPresenter } from '../presenters/scmBackend'; import { scmBackendService } from '../services'; import { app } from './_app'; diff --git a/src/systems/origin/apps/service/src/controllers/scmBackendSetupSession.ts b/src/systems/origin/apps/service/src/controllers/scmBackendSetupSession.ts index 1ed09bb3a..1ff020897 100644 --- a/src/systems/origin/apps/service/src/controllers/scmBackendSetupSession.ts +++ b/src/systems/origin/apps/service/src/controllers/scmBackendSetupSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { presentScmBackendSetupSession } from '../presenters/scmBackendSetupSession'; import { scmInstallationSessionService } from '../services'; import { app } from './_app'; diff --git a/src/systems/origin/apps/service/src/controllers/scmInstallation.ts b/src/systems/origin/apps/service/src/controllers/scmInstallation.ts index bff37b3da..f7c3bb5e1 100644 --- a/src/systems/origin/apps/service/src/controllers/scmInstallation.ts +++ b/src/systems/origin/apps/service/src/controllers/scmInstallation.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { scmInstallationPresenter } from '../presenters/scmInstallation'; import { actorService, scmInstallationService } from '../services'; import { app } from './_app'; diff --git a/src/systems/origin/apps/service/src/controllers/scmInstallationSession.ts b/src/systems/origin/apps/service/src/controllers/scmInstallationSession.ts index 5f60fcd34..b8d997d15 100644 --- a/src/systems/origin/apps/service/src/controllers/scmInstallationSession.ts +++ b/src/systems/origin/apps/service/src/controllers/scmInstallationSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { presentScmInstallationSession } from '../presenters/scmInstallationSession'; import { actorService, scmInstallationSessionService } from '../services'; import { app } from './_app'; diff --git a/src/systems/origin/apps/service/src/controllers/scmRepoPush.ts b/src/systems/origin/apps/service/src/controllers/scmRepoPush.ts index eaaed937f..90aa18738 100644 --- a/src/systems/origin/apps/service/src/controllers/scmRepoPush.ts +++ b/src/systems/origin/apps/service/src/controllers/scmRepoPush.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { scmRepositoryPushPresenter } from '../presenters/scmRepositoryPush'; import { scmRepoPushService } from '../services'; import { app } from './_app'; diff --git a/src/systems/origin/apps/service/src/controllers/scmRepository.ts b/src/systems/origin/apps/service/src/controllers/scmRepository.ts index 58046222b..7046b4517 100644 --- a/src/systems/origin/apps/service/src/controllers/scmRepository.ts +++ b/src/systems/origin/apps/service/src/controllers/scmRepository.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { scmRepositoryPushPresenter, scmRepositorySyncPresenter } from '../presenters'; import { repositoryPresenter } from '../presenters/repository'; import { diff --git a/src/systems/origin/apps/service/src/controllers/scmRepositorySync.ts b/src/systems/origin/apps/service/src/controllers/scmRepositorySync.ts index b100548df..e7ceafec4 100644 --- a/src/systems/origin/apps/service/src/controllers/scmRepositorySync.ts +++ b/src/systems/origin/apps/service/src/controllers/scmRepositorySync.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { scmRepositorySyncPresenter } from '../presenters'; import { scmRepositorySyncService } from '../services'; import { app } from './_app'; diff --git a/src/systems/origin/apps/service/src/controllers/tenant.ts b/src/systems/origin/apps/service/src/controllers/tenant.ts index 25e2e4973..297fd0578 100644 --- a/src/systems/origin/apps/service/src/controllers/tenant.ts +++ b/src/systems/origin/apps/service/src/controllers/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { tenantPresenter } from '../presenters/tenant'; import { tenantService } from '../services'; import { app } from './_app'; diff --git a/src/systems/origin/apps/service/src/endpoints.ts b/src/systems/origin/apps/service/src/endpoints.ts index 95a140ee8..e98bbecfd 100644 --- a/src/systems/origin/apps/service/src/endpoints.ts +++ b/src/systems/origin/apps/service/src/endpoints.ts @@ -1,4 +1,4 @@ -import { withTracingSuppressed } from '@lowerdeck/telemetry'; +import { withTracingSuppressed } from '@mtsrc/telemetry'; import { RedisClient } from 'bun'; import { originApi } from './controllers'; import { db } from './db'; diff --git a/src/systems/origin/apps/service/src/env.ts b/src/systems/origin/apps/service/src/env.ts index 6e64bff7d..25c1769bd 100644 --- a/src/systems/origin/apps/service/src/env.ts +++ b/src/systems/origin/apps/service/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/origin/apps/service/src/id.ts b/src/systems/origin/apps/service/src/id.ts index 83737300f..b9ece6bb4 100644 --- a/src/systems/origin/apps/service/src/id.ts +++ b/src/systems/origin/apps/service/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ tenant: idType.sorted('otn_'), diff --git a/src/systems/origin/apps/service/src/instrument.ts b/src/systems/origin/apps/service/src/instrument.ts index d50890682..7b3542629 100644 --- a/src/systems/origin/apps/service/src/instrument.ts +++ b/src/systems/origin/apps/service/src/instrument.ts @@ -1,5 +1,5 @@ -import { setSentry } from '@lowerdeck/sentry'; -import { initTelemetry } from '@lowerdeck/telemetry'; +import { setSentry } from '@mtsrc/sentry'; +import { initTelemetry } from '@mtsrc/telemetry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/origin/apps/service/src/lib/gitlab.ts b/src/systems/origin/apps/service/src/lib/gitlab.ts index 812770630..ade0aede0 100644 --- a/src/systems/origin/apps/service/src/lib/gitlab.ts +++ b/src/systems/origin/apps/service/src/lib/gitlab.ts @@ -1,5 +1,5 @@ import { Gitlab } from '@gitbeaker/rest'; -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import type { ScmBackend, ScmInstallation } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/origin/apps/service/src/lib/scmRepositorySyncProvider.ts b/src/systems/origin/apps/service/src/lib/scmRepositorySyncProvider.ts index 5d94eb7a0..844949bc0 100644 --- a/src/systems/origin/apps/service/src/lib/scmRepositorySyncProvider.ts +++ b/src/systems/origin/apps/service/src/lib/scmRepositorySyncProvider.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import type { ScmBackend, ScmInstallation, diff --git a/src/systems/origin/apps/service/src/public/scm.ts b/src/systems/origin/apps/service/src/public/scm.ts index ef74c6c6a..e7d1d7f86 100644 --- a/src/systems/origin/apps/service/src/public/scm.ts +++ b/src/systems/origin/apps/service/src/public/scm.ts @@ -1,5 +1,5 @@ -import { createHono, useValidatedQuery } from '@lowerdeck/hono'; -import { v } from '@lowerdeck/validation'; +import { createHono, useValidatedQuery } from '@mtsrc/hono'; +import { v } from '@mtsrc/validation'; import { completeDashboardHtml } from '../lib/templates/completeDashboard'; import { scmAuthService, scmRepoService } from '../services'; import { scmBackendSetupPublicController } from './scmBackendSetup'; diff --git a/src/systems/origin/apps/service/src/public/scmBackendSetup.ts b/src/systems/origin/apps/service/src/public/scmBackendSetup.ts index 898f5827a..68cee75b4 100644 --- a/src/systems/origin/apps/service/src/public/scmBackendSetup.ts +++ b/src/systems/origin/apps/service/src/public/scmBackendSetup.ts @@ -1,5 +1,5 @@ -import { createHono, useValidatedBody } from '@lowerdeck/hono'; -import { v } from '@lowerdeck/validation'; +import { createHono, useValidatedBody } from '@mtsrc/hono'; +import { v } from '@mtsrc/validation'; import { db } from '../db'; import { backendSetupHtml } from '../lib/templates/backendSetup'; import { completeDashboardHtml } from '../lib/templates/completeDashboard'; diff --git a/src/systems/origin/apps/service/src/public/scmInstallationSession.ts b/src/systems/origin/apps/service/src/public/scmInstallationSession.ts index c97692da6..c0221ae48 100644 --- a/src/systems/origin/apps/service/src/public/scmInstallationSession.ts +++ b/src/systems/origin/apps/service/src/public/scmInstallationSession.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { db } from '../db'; import { installationSessionHtml } from '../lib/templates/installationSession'; import { scmAuthService, scmBackendService, scmInstallationSessionService } from '../services'; diff --git a/src/systems/origin/apps/service/src/queues/cleanup.ts b/src/systems/origin/apps/service/src/queues/cleanup.ts index 6d0c6a946..392cd0d10 100644 --- a/src/systems/origin/apps/service/src/queues/cleanup.ts +++ b/src/systems/origin/apps/service/src/queues/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subDays } from 'date-fns'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/origin/apps/service/src/queues/codeBucket/cloneBucket.ts b/src/systems/origin/apps/service/src/queues/codeBucket/cloneBucket.ts index 769e44957..a46f49203 100644 --- a/src/systems/origin/apps/service/src/queues/codeBucket/cloneBucket.ts +++ b/src/systems/origin/apps/service/src/queues/codeBucket/cloneBucket.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { codeBucketClient } from '../../lib/codeWorkspace'; diff --git a/src/systems/origin/apps/service/src/queues/codeBucket/copyFromToBucket.ts b/src/systems/origin/apps/service/src/queues/codeBucket/copyFromToBucket.ts index 3b7475720..2a008d26e 100644 --- a/src/systems/origin/apps/service/src/queues/codeBucket/copyFromToBucket.ts +++ b/src/systems/origin/apps/service/src/queues/codeBucket/copyFromToBucket.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { codeBucketClient } from '../../lib/codeWorkspace'; diff --git a/src/systems/origin/apps/service/src/queues/codeBucket/exportGithub.ts b/src/systems/origin/apps/service/src/queues/codeBucket/exportGithub.ts index 5cdf18230..6c7e70b8e 100644 --- a/src/systems/origin/apps/service/src/queues/codeBucket/exportGithub.ts +++ b/src/systems/origin/apps/service/src/queues/codeBucket/exportGithub.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { codeBucketClient } from '../../lib/codeWorkspace'; diff --git a/src/systems/origin/apps/service/src/queues/codeBucket/exportGitlab.ts b/src/systems/origin/apps/service/src/queues/codeBucket/exportGitlab.ts index 1bb2f26cd..2a857030a 100644 --- a/src/systems/origin/apps/service/src/queues/codeBucket/exportGitlab.ts +++ b/src/systems/origin/apps/service/src/queues/codeBucket/exportGitlab.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import Long from 'long'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/origin/apps/service/src/queues/codeBucket/importGithub.ts b/src/systems/origin/apps/service/src/queues/codeBucket/importGithub.ts index acf1ec49f..c522b3831 100644 --- a/src/systems/origin/apps/service/src/queues/codeBucket/importGithub.ts +++ b/src/systems/origin/apps/service/src/queues/codeBucket/importGithub.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { createQueue } from '@lowerdeck/queue'; +import { delay } from '@mtsrc/delay'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { codeBucketClient } from '../../lib/codeWorkspace'; diff --git a/src/systems/origin/apps/service/src/queues/codeBucket/importGitlab.ts b/src/systems/origin/apps/service/src/queues/codeBucket/importGitlab.ts index 991bf07a5..11752ba69 100644 --- a/src/systems/origin/apps/service/src/queues/codeBucket/importGitlab.ts +++ b/src/systems/origin/apps/service/src/queues/codeBucket/importGitlab.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { createQueue } from '@lowerdeck/queue'; +import { delay } from '@mtsrc/delay'; +import { createQueue } from '@mtsrc/queue'; import Long from 'long'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/origin/apps/service/src/queues/codeBucket/importTemplate.ts b/src/systems/origin/apps/service/src/queues/codeBucket/importTemplate.ts index c3f48516f..d8e91c45a 100644 --- a/src/systems/origin/apps/service/src/queues/codeBucket/importTemplate.ts +++ b/src/systems/origin/apps/service/src/queues/codeBucket/importTemplate.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { codeBucketClient } from '../../lib/codeWorkspace'; diff --git a/src/systems/origin/apps/service/src/queues/codeBucket/index.ts b/src/systems/origin/apps/service/src/queues/codeBucket/index.ts index 3a106f09c..c70c54861 100644 --- a/src/systems/origin/apps/service/src/queues/codeBucket/index.ts +++ b/src/systems/origin/apps/service/src/queues/codeBucket/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { cloneBucketQueueProcessor } from './cloneBucket'; import { copyFromToBucketQueueProcessor } from './copyFromToBucket'; import { exportGithubQueueProcessor } from './exportGithub'; diff --git a/src/systems/origin/apps/service/src/queues/scm/createRepoWebhook.ts b/src/systems/origin/apps/service/src/queues/scm/createRepoWebhook.ts index ff121b1f3..8c2f079e8 100644 --- a/src/systems/origin/apps/service/src/queues/scm/createRepoWebhook.ts +++ b/src/systems/origin/apps/service/src/queues/scm/createRepoWebhook.ts @@ -1,5 +1,5 @@ -import { generatePlainId } from '@lowerdeck/id'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { generatePlainId } from '@mtsrc/id'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { ID } from '../../id'; diff --git a/src/systems/origin/apps/service/src/queues/scm/handleRepoPush.ts b/src/systems/origin/apps/service/src/queues/scm/handleRepoPush.ts index 0be168998..bcc397040 100644 --- a/src/systems/origin/apps/service/src/queues/scm/handleRepoPush.ts +++ b/src/systems/origin/apps/service/src/queues/scm/handleRepoPush.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId } from '../../id'; diff --git a/src/systems/origin/apps/service/src/queues/scm/index.ts b/src/systems/origin/apps/service/src/queues/scm/index.ts index 901dc595e..43645c6ca 100644 --- a/src/systems/origin/apps/service/src/queues/scm/index.ts +++ b/src/systems/origin/apps/service/src/queues/scm/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { createRepoWebhookQueueProcessor } from './createRepoWebhook'; import { createHandleRepoPushQueueProcessor } from './handleRepoPush'; import { repositorySyncQueueProcessor } from './repositorySync'; diff --git a/src/systems/origin/apps/service/src/queues/scm/repositorySync/createBranch.ts b/src/systems/origin/apps/service/src/queues/scm/repositorySync/createBranch.ts index b3a249b1e..4d042b0a6 100644 --- a/src/systems/origin/apps/service/src/queues/scm/repositorySync/createBranch.ts +++ b/src/systems/origin/apps/service/src/queues/scm/repositorySync/createBranch.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../../db'; import { env } from '../../../env'; import { createRepositorySyncBranch } from '../../../lib/scmRepositorySyncProvider'; diff --git a/src/systems/origin/apps/service/src/queues/scm/repositorySync/createPr.ts b/src/systems/origin/apps/service/src/queues/scm/repositorySync/createPr.ts index c50166005..8d8ae86dc 100644 --- a/src/systems/origin/apps/service/src/queues/scm/repositorySync/createPr.ts +++ b/src/systems/origin/apps/service/src/queues/scm/repositorySync/createPr.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../../db'; import { env } from '../../../env'; import { createRepositorySyncPullRequest } from '../../../lib/scmRepositorySyncProvider'; diff --git a/src/systems/origin/apps/service/src/queues/scm/repositorySync/index.ts b/src/systems/origin/apps/service/src/queues/scm/repositorySync/index.ts index 7a917a80d..2cd74a418 100644 --- a/src/systems/origin/apps/service/src/queues/scm/repositorySync/index.ts +++ b/src/systems/origin/apps/service/src/queues/scm/repositorySync/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { createBranchRepositorySyncQueueProcessor } from './createBranch'; import { createPrRepositorySyncQueueProcessor } from './createPr'; import { mergeRepositorySyncQueueProcessor } from './merge'; diff --git a/src/systems/origin/apps/service/src/queues/scm/repositorySync/merge.ts b/src/systems/origin/apps/service/src/queues/scm/repositorySync/merge.ts index 5f5a524ab..d65e92b33 100644 --- a/src/systems/origin/apps/service/src/queues/scm/repositorySync/merge.ts +++ b/src/systems/origin/apps/service/src/queues/scm/repositorySync/merge.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../../db'; import { env } from '../../../env'; import { mergeRepositorySyncPullRequest } from '../../../lib/scmRepositorySyncProvider'; diff --git a/src/systems/origin/apps/service/src/queues/scm/repositorySync/start.ts b/src/systems/origin/apps/service/src/queues/scm/repositorySync/start.ts index af17354bf..ea36edc59 100644 --- a/src/systems/origin/apps/service/src/queues/scm/repositorySync/start.ts +++ b/src/systems/origin/apps/service/src/queues/scm/repositorySync/start.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../../db'; import { env } from '../../../env'; import { diff --git a/src/systems/origin/apps/service/src/queues/scm/repositorySync/syncContents.ts b/src/systems/origin/apps/service/src/queues/scm/repositorySync/syncContents.ts index e737ca4e4..08816a5d5 100644 --- a/src/systems/origin/apps/service/src/queues/scm/repositorySync/syncContents.ts +++ b/src/systems/origin/apps/service/src/queues/scm/repositorySync/syncContents.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../../db'; import { env } from '../../../env'; import { cleanupRepositorySyncBranchIfNoChanges } from '../../../lib/scmRepositorySyncProvider'; diff --git a/src/systems/origin/apps/service/src/queues/scm/repositorySync/waitForCi.ts b/src/systems/origin/apps/service/src/queues/scm/repositorySync/waitForCi.ts index 2a957742d..ae0c984dc 100644 --- a/src/systems/origin/apps/service/src/queues/scm/repositorySync/waitForCi.ts +++ b/src/systems/origin/apps/service/src/queues/scm/repositorySync/waitForCi.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../../db'; import { env } from '../../../env'; import { getRepositorySyncCiState } from '../../../lib/scmRepositorySyncProvider'; diff --git a/src/systems/origin/apps/service/src/services/actor.ts b/src/systems/origin/apps/service/src/services/actor.ts index 004c903e6..054f4a82f 100644 --- a/src/systems/origin/apps/service/src/services/actor.ts +++ b/src/systems/origin/apps/service/src/services/actor.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/origin/apps/service/src/services/changeNotification.ts b/src/systems/origin/apps/service/src/services/changeNotification.ts index 5efcb95db..33b9bced0 100644 --- a/src/systems/origin/apps/service/src/services/changeNotification.ts +++ b/src/systems/origin/apps/service/src/services/changeNotification.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; class ChangeNotificationServiceImpl { diff --git a/src/systems/origin/apps/service/src/services/codeBucket.ts b/src/systems/origin/apps/service/src/services/codeBucket.ts index f984e992e..e60d7d3bd 100644 --- a/src/systems/origin/apps/service/src/services/codeBucket.ts +++ b/src/systems/origin/apps/service/src/services/codeBucket.ts @@ -1,6 +1,6 @@ -import { delay } from '@lowerdeck/delay'; -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { delay } from '@mtsrc/delay'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import Long from 'long'; import type { ScmRepository } from '../../prisma/generated/browser'; import type { CodeBucket, CodeBucketTemplate, Tenant } from '../../prisma/generated/client'; diff --git a/src/systems/origin/apps/service/src/services/codeBucketPurpose.ts b/src/systems/origin/apps/service/src/services/codeBucketPurpose.ts index c10af008c..7625955c0 100644 --- a/src/systems/origin/apps/service/src/services/codeBucketPurpose.ts +++ b/src/systems/origin/apps/service/src/services/codeBucketPurpose.ts @@ -1,5 +1,5 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { Service } from '@lowerdeck/service'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/origin/apps/service/src/services/scmAuth.ts b/src/systems/origin/apps/service/src/services/scmAuth.ts index 1b7538b8f..180be7b44 100644 --- a/src/systems/origin/apps/service/src/services/scmAuth.ts +++ b/src/systems/origin/apps/service/src/services/scmAuth.ts @@ -1,5 +1,5 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { Actor, ScmProvider, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/origin/apps/service/src/services/scmBackend.ts b/src/systems/origin/apps/service/src/services/scmBackend.ts index 216a63ba1..c63ef59c1 100644 --- a/src/systems/origin/apps/service/src/services/scmBackend.ts +++ b/src/systems/origin/apps/service/src/services/scmBackend.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { ScmBackend, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { env, SCM_GITHUB_APP_PRIVATE_KEY } from '../env'; diff --git a/src/systems/origin/apps/service/src/services/scmInstallation.ts b/src/systems/origin/apps/service/src/services/scmInstallation.ts index c096a2e74..2120b05f5 100644 --- a/src/systems/origin/apps/service/src/services/scmInstallation.ts +++ b/src/systems/origin/apps/service/src/services/scmInstallation.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Actor, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/origin/apps/service/src/services/scmInstallationSession.ts b/src/systems/origin/apps/service/src/services/scmInstallationSession.ts index fb9fe1e84..644bdfba6 100644 --- a/src/systems/origin/apps/service/src/services/scmInstallationSession.ts +++ b/src/systems/origin/apps/service/src/services/scmInstallationSession.ts @@ -1,5 +1,5 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { randomBytes } from 'crypto'; import type { Actor, diff --git a/src/systems/origin/apps/service/src/services/scmRepo.ts b/src/systems/origin/apps/service/src/services/scmRepo.ts index 5ac78df66..05936eb59 100644 --- a/src/systems/origin/apps/service/src/services/scmRepo.ts +++ b/src/systems/origin/apps/service/src/services/scmRepo.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import crypto from 'crypto'; import type { Actor, diff --git a/src/systems/origin/apps/service/src/services/scmRepoPush.ts b/src/systems/origin/apps/service/src/services/scmRepoPush.ts index bffbc02a2..ffe44c4ae 100644 --- a/src/systems/origin/apps/service/src/services/scmRepoPush.ts +++ b/src/systems/origin/apps/service/src/services/scmRepoPush.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/origin/apps/service/src/services/scmRepositorySync.ts b/src/systems/origin/apps/service/src/services/scmRepositorySync.ts index aa0f4372c..7478f98e5 100644 --- a/src/systems/origin/apps/service/src/services/scmRepositorySync.ts +++ b/src/systems/origin/apps/service/src/services/scmRepositorySync.ts @@ -1,5 +1,5 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { CodeBucket, ScmRepository, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/origin/apps/service/src/services/tenant.ts b/src/systems/origin/apps/service/src/services/tenant.ts index d240b67fb..70f1e4649 100644 --- a/src/systems/origin/apps/service/src/services/tenant.ts +++ b/src/systems/origin/apps/service/src/services/tenant.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/origin/apps/service/src/storage.ts b/src/systems/origin/apps/service/src/storage.ts index 040d70725..52c2423d0 100644 --- a/src/systems/origin/apps/service/src/storage.ts +++ b/src/systems/origin/apps/service/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; diff --git a/src/systems/origin/apps/service/src/test/client.ts b/src/systems/origin/apps/service/src/test/client.ts index 12f9d27cf..be82f7d21 100644 --- a/src/systems/origin/apps/service/src/test/client.ts +++ b/src/systems/origin/apps/service/src/test/client.ts @@ -1,6 +1,6 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { rpcMux } from '@lowerdeck/rpc-server'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { rpcMux } from '@mtsrc/rpc-server'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { OriginRPC, type OriginClient } from '../controllers'; type ClientOptsLike = Parameters[0]; diff --git a/src/systems/origin/apps/service/src/test/setup.ts b/src/systems/origin/apps/service/src/test/setup.ts index f8165f91a..a24af1604 100644 --- a/src/systems/origin/apps/service/src/test/setup.ts +++ b/src/systems/origin/apps/service/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/origin/apps/service/src/worker.ts b/src/systems/origin/apps/service/src/worker.ts index 582fbaabc..a5d965208 100644 --- a/src/systems/origin/apps/service/src/worker.ts +++ b/src/systems/origin/apps/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { cleanupProcessor } from './queues/cleanup'; import { codeBucketQueueProcessor } from './queues/codeBucket'; import { scmQueueProcessor } from './queues/scm'; diff --git a/src/systems/origin/apps/service/vitest.e2e.config.ts b/src/systems/origin/apps/service/vitest.e2e.config.ts index c531c1588..87e26ffc7 100644 --- a/src/systems/origin/apps/service/vitest.e2e.config.ts +++ b/src/systems/origin/apps/service/vitest.e2e.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 8f31ff8be..5e57a9f9d 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -21,7 +21,7 @@ WORKDIR /app/src/systems/relay/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/relay/service/package.json b/src/systems/relay/service/package.json index f707f14fe..2f6a08990 100644 --- a/src/systems/relay/service/package.json +++ b/src/systems/relay/service/package.json @@ -6,7 +6,7 @@ "scripts": { "start": "bun run server:start", "dev": "bun --watch ./src/server.ts", - "server:build": "ncc build ./src/server.ts -o ./dist --source-map", + "server:build": "ncc build ./src/server.ts -o ./dist --source-map --transpile-only", "server:start": "bun ./dist/index.js", "infra:up": "docker compose -p relay -f ./docker-compose.dev.yml --profile infra up -d --pull always", "infra:down": "docker compose -p relay -f ./docker-compose.dev.yml --profile infra down", @@ -22,11 +22,11 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17" + "vitest": "4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -36,25 +36,6 @@ "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", "@aws-sdk/client-ses": "^3.985.0", - "@lowerdeck/api-mux": "^1.0.1", - "@lowerdeck/cache": "^1.0.0", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.0.4", - "@lowerdeck/encryption": "^1.0.6", - "@lowerdeck/env": "^1.0.4", - "@lowerdeck/error": "^1.0.8", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.5", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.4", - "@lowerdeck/queue": "^1.0.4", - "@lowerdeck/rpc-client": "^1.0.2", - "@lowerdeck/rpc-server": "^1.0.4", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.3", - "@lowerdeck/slugify": "^1.0.4", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "^1.0.4", "@metorial-services/forge-client": "^1.0.3", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", @@ -68,6 +49,25 @@ "@metorial-platform-systems/object-storage-client": "workspace:*", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", - "yaml": "^2.8.2" + "yaml": "^2.8.2", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0" } } diff --git a/src/systems/relay/service/src/controllers/_app.ts b/src/systems/relay/service/src/controllers/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/relay/service/src/controllers/_app.ts +++ b/src/systems/relay/service/src/controllers/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/relay/service/src/controllers/email.ts b/src/systems/relay/service/src/controllers/email.ts index 218cfd092..03ae7eff3 100644 --- a/src/systems/relay/service/src/controllers/email.ts +++ b/src/systems/relay/service/src/controllers/email.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { emailService } from '../services'; import { app } from './_app'; import { senderApp } from './sender'; diff --git a/src/systems/relay/service/src/controllers/emailIdentity.ts b/src/systems/relay/service/src/controllers/emailIdentity.ts index 8ce0e8b0d..bd3187a25 100644 --- a/src/systems/relay/service/src/controllers/emailIdentity.ts +++ b/src/systems/relay/service/src/controllers/emailIdentity.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { emailIdentityPresenter } from '../presenters'; import { emailService } from '../services'; import { app } from './_app'; diff --git a/src/systems/relay/service/src/controllers/index.ts b/src/systems/relay/service/src/controllers/index.ts index 9f4b59b28..35198039e 100644 --- a/src/systems/relay/service/src/controllers/index.ts +++ b/src/systems/relay/service/src/controllers/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { emailController } from './email'; import { emailIdentityController } from './emailIdentity'; diff --git a/src/systems/relay/service/src/controllers/sender.ts b/src/systems/relay/service/src/controllers/sender.ts index 670fbaacb..2cec0084c 100644 --- a/src/systems/relay/service/src/controllers/sender.ts +++ b/src/systems/relay/service/src/controllers/sender.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { senderPresenter } from '../presenters/sender'; import { senderService } from '../services'; import { app } from './_app'; diff --git a/src/systems/relay/service/src/cron/cleanup.ts b/src/systems/relay/service/src/cron/cleanup.ts index ee764d71c..1a154f663 100644 --- a/src/systems/relay/service/src/cron/cleanup.ts +++ b/src/systems/relay/service/src/cron/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subDays } from 'date-fns'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/relay/service/src/env.ts b/src/systems/relay/service/src/env.ts index 00fcd924c..3a2be5047 100644 --- a/src/systems/relay/service/src/env.ts +++ b/src/systems/relay/service/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/relay/service/src/id.ts b/src/systems/relay/service/src/id.ts index 0aea2af05..11680e2c8 100644 --- a/src/systems/relay/service/src/id.ts +++ b/src/systems/relay/service/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ emailIdentity: idType.sorted('eid'), diff --git a/src/systems/relay/service/src/instrument.ts b/src/systems/relay/service/src/instrument.ts index f1f173b93..6eeeb10a8 100644 --- a/src/systems/relay/service/src/instrument.ts +++ b/src/systems/relay/service/src/instrument.ts @@ -1,4 +1,4 @@ -import { setSentry } from '@lowerdeck/sentry'; +import { setSentry } from '@mtsrc/sentry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/relay/service/src/queue/sendEmail.ts b/src/systems/relay/service/src/queue/sendEmail.ts index e3a18cc31..6432e9fbc 100644 --- a/src/systems/relay/service/src/queue/sendEmail.ts +++ b/src/systems/relay/service/src/queue/sendEmail.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../db'; import { env } from '../env'; import { sendEmailSingleQueue } from './sendEmailSingle'; diff --git a/src/systems/relay/service/src/queue/sendEmailSingle.ts b/src/systems/relay/service/src/queue/sendEmailSingle.ts index 9c9ab3412..45e38b2af 100644 --- a/src/systems/relay/service/src/queue/sendEmailSingle.ts +++ b/src/systems/relay/service/src/queue/sendEmailSingle.ts @@ -1,5 +1,5 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import type { OutgoingEmailDestination, OutgoingEmailSendStatus diff --git a/src/systems/relay/service/src/services/email.ts b/src/systems/relay/service/src/services/email.ts index 527c3e8da..727b015b8 100644 --- a/src/systems/relay/service/src/services/email.ts +++ b/src/systems/relay/service/src/services/email.ts @@ -1,6 +1,6 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { EmailIdentity } from '../../prisma/generated/browser'; import type { Sender } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/relay/service/src/services/sender.ts b/src/systems/relay/service/src/services/sender.ts index 5ec65cb80..f79c398ec 100644 --- a/src/systems/relay/service/src/services/sender.ts +++ b/src/systems/relay/service/src/services/sender.ts @@ -1,6 +1,6 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { get4ByteIntId, ID } from '../id'; diff --git a/src/systems/relay/service/src/test/client.ts b/src/systems/relay/service/src/test/client.ts index dfed17039..48e2c01c4 100644 --- a/src/systems/relay/service/src/test/client.ts +++ b/src/systems/relay/service/src/test/client.ts @@ -1,6 +1,6 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { app } from '../controllers/_app'; import { senderController } from '../controllers/sender'; diff --git a/src/systems/relay/service/src/test/setup.ts b/src/systems/relay/service/src/test/setup.ts index 778775874..97069cb2e 100644 --- a/src/systems/relay/service/src/test/setup.ts +++ b/src/systems/relay/service/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/relay/service/src/worker.ts b/src/systems/relay/service/src/worker.ts index feec11690..d1fe5ba15 100644 --- a/src/systems/relay/service/src/worker.ts +++ b/src/systems/relay/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { cleanupCron } from './cron/cleanup'; import { sendEmailQueueProcessor } from './queue/sendEmail'; import { sendEmailSingleQueueProcessor } from './queue/sendEmailSingle'; diff --git a/src/systems/relay/service/tsconfig.json b/src/systems/relay/service/tsconfig.json index b0b1e346b..cccb89409 100644 --- a/src/systems/relay/service/tsconfig.json +++ b/src/systems/relay/service/tsconfig.json @@ -27,6 +27,7 @@ }, "exclude": [ "node_modules", + "src/test/**/*", "tests/e2e", "tests/helpers", "vitest.config.ts", diff --git a/src/systems/relay/service/vitest.e2e.config.ts b/src/systems/relay/service/vitest.e2e.config.ts index 4e74c38dd..28f43cb8e 100644 --- a/src/systems/relay/service/vitest.e2e.config.ts +++ b/src/systems/relay/service/vitest.e2e.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/shuttle/sdk/packages/mcp-server/package.json b/src/systems/shuttle/sdk/packages/mcp-server/package.json index 68c0bcfb8..c34bfaa92 100644 --- a/src/systems/shuttle/sdk/packages/mcp-server/package.json +++ b/src/systems/shuttle/sdk/packages/mcp-server/package.json @@ -35,11 +35,11 @@ "vitest": "^3.1.2" }, "dependencies": { - "@lowerdeck/proxy": "^1.0.4", - "@lowerdeck/serialize": "^1.0.4", "@metorial/mcp": "^1.0.0-rc.2", "@metorial/mcp-transport-memory": "^1.0.0", "@modelcontextprotocol/sdk": "^1.25.3", - "zod": "^4.3.6" + "zod": "^4.3.6", + "@mtsrc/proxy": "1.0.0", + "@mtsrc/serialize": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index f9917ae28..4886ee7b6 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -23,7 +23,7 @@ WORKDIR /app/src/systems/shuttle/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/shuttle/service/package.json b/src/systems/shuttle/service/package.json index f3e99e829..572a7897d 100644 --- a/src/systems/shuttle/service/package.json +++ b/src/systems/shuttle/service/package.json @@ -25,12 +25,12 @@ "typecheck": "bun run check-types" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@types/ws": "^8.18.1", "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17" + "vitest": "4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -41,32 +41,6 @@ "@aws-sdk/client-lambda": "^3.958.0", "@bufbuild/protobuf": "^2.10.2", "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/tokens": "^1.0.5", - "@lowerdeck/validation": "^1.0.10", "@metorial-platform-systems/function-bay-client": "workspace:*", "@metorial/mcp-server": "^1.0.0-rc.11", "@modelcontextprotocol/sdk": "^1.25.3", @@ -90,6 +64,32 @@ "prisma-json-types-generator": "^4.0.1", "ws": "^8.19.0", "yaml": "^2.8.2", - "zod": "^4.3.6" + "zod": "^4.3.6", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/tokens": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/shuttle/service/src/apis/connection/index.ts b/src/systems/shuttle/service/src/apis/connection/index.ts index 61c98f312..847a4aa51 100644 --- a/src/systems/shuttle/service/src/apis/connection/index.ts +++ b/src/systems/shuttle/service/src/apis/connection/index.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { upgradeWebSocket, websocket } from 'hono/bun'; import type { WSContext } from 'hono/ws'; import { AsyncConnection } from '../../mcp/connection/async'; diff --git a/src/systems/shuttle/service/src/apis/controllers/_app.ts b/src/systems/shuttle/service/src/apis/controllers/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/shuttle/service/src/apis/controllers/_app.ts +++ b/src/systems/shuttle/service/src/apis/controllers/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/shuttle/service/src/apis/controllers/changeNotification.ts b/src/systems/shuttle/service/src/apis/controllers/changeNotification.ts index debb2ebf0..98e3fead0 100644 --- a/src/systems/shuttle/service/src/apis/controllers/changeNotification.ts +++ b/src/systems/shuttle/service/src/apis/controllers/changeNotification.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { changeNotificationPresenter } from '../../presenters'; import { changeNotificationService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/containerRegistry.ts b/src/systems/shuttle/service/src/apis/controllers/containerRegistry.ts index b8c55b8bd..48abd2c33 100644 --- a/src/systems/shuttle/service/src/apis/controllers/containerRegistry.ts +++ b/src/systems/shuttle/service/src/apis/controllers/containerRegistry.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { containerRegistryPresenter } from '../../presenters'; import { containerRegistryService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/containerRepository.ts b/src/systems/shuttle/service/src/apis/controllers/containerRepository.ts index d4bfde05a..a1a65debc 100644 --- a/src/systems/shuttle/service/src/apis/controllers/containerRepository.ts +++ b/src/systems/shuttle/service/src/apis/controllers/containerRepository.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { containerRepositoryPresenter } from '../../presenters'; import { containerRepositoryService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/containerRepositoryTag.ts b/src/systems/shuttle/service/src/apis/controllers/containerRepositoryTag.ts index 43baf3024..f9711503d 100644 --- a/src/systems/shuttle/service/src/apis/controllers/containerRepositoryTag.ts +++ b/src/systems/shuttle/service/src/apis/controllers/containerRepositoryTag.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { containerRepositoryTagPresenter } from '../../presenters'; import { containerRepositoryTagService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/containerRepositoryVersion.ts b/src/systems/shuttle/service/src/apis/controllers/containerRepositoryVersion.ts index 5e149d693..2c0563462 100644 --- a/src/systems/shuttle/service/src/apis/controllers/containerRepositoryVersion.ts +++ b/src/systems/shuttle/service/src/apis/controllers/containerRepositoryVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { containerRepositoryVersionPresenter } from '../../presenters'; import { containerRepositoryVersionService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/functionServerInvocation.ts b/src/systems/shuttle/service/src/apis/controllers/functionServerInvocation.ts index 7960a8b29..6fdf03153 100644 --- a/src/systems/shuttle/service/src/apis/controllers/functionServerInvocation.ts +++ b/src/systems/shuttle/service/src/apis/controllers/functionServerInvocation.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { functionServerInvocationPresenter } from '../../presenters'; import { functionServerInvocationService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/index.ts b/src/systems/shuttle/service/src/apis/controllers/index.ts index 7bd6d3fab..7847c31dc 100644 --- a/src/systems/shuttle/service/src/apis/controllers/index.ts +++ b/src/systems/shuttle/service/src/apis/controllers/index.ts @@ -1,4 +1,4 @@ -import { createServer, type InferClient } from '@lowerdeck/rpc-server'; +import { createServer, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { changeNotificationController } from './changeNotification'; import { containerRegistryController } from './containerRegistry'; diff --git a/src/systems/shuttle/service/src/apis/controllers/networkingRuleset.ts b/src/systems/shuttle/service/src/apis/controllers/networkingRuleset.ts index 4bad2f1ce..102e55e65 100644 --- a/src/systems/shuttle/service/src/apis/controllers/networkingRuleset.ts +++ b/src/systems/shuttle/service/src/apis/controllers/networkingRuleset.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { networkingRulesetPresenter } from '../../presenters'; import { networkingRulesetService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/server.ts b/src/systems/shuttle/service/src/apis/controllers/server.ts index 828720dac..f56047247 100644 --- a/src/systems/shuttle/service/src/apis/controllers/server.ts +++ b/src/systems/shuttle/service/src/apis/controllers/server.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serverDeploymentPresenter, serverPresenter } from '../../presenters'; import { serverService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/serverAuthConfig.ts b/src/systems/shuttle/service/src/apis/controllers/serverAuthConfig.ts index 06c922597..6f7ed9bd2 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverAuthConfig.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverAuthConfig.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serverAuthConfigPresenter } from '../../presenters'; import { serverAuthConfigService, serverService } from '../../services'; import { serverAuthTokenService } from '../../services/oauth/serverAuthToken'; diff --git a/src/systems/shuttle/service/src/apis/controllers/serverAuthConfigEvent.ts b/src/systems/shuttle/service/src/apis/controllers/serverAuthConfigEvent.ts index ba13cdf6e..58099ca14 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverAuthConfigEvent.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverAuthConfigEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serverAuthConfigEventPresenter } from '../../presenters'; import { serverAuthConfigEventService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/serverConfig.ts b/src/systems/shuttle/service/src/apis/controllers/serverConfig.ts index b6f6e19b1..0373122c6 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverConfig.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverConfig.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serverConfigPresenter } from '../../presenters'; import { serverConfigService, serverService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/serverConnection.ts b/src/systems/shuttle/service/src/apis/controllers/serverConnection.ts index b9ec9b045..813e6da3b 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverConnection.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverConnection.ts @@ -1,6 +1,6 @@ -import { ServiceError, validationError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { ServiceError, validationError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { InitializeRequestSchema } from '@modelcontextprotocol/sdk/types.js'; import { serverConnectionPresenter } from '../../presenters'; import { diff --git a/src/systems/shuttle/service/src/apis/controllers/serverDeployment.ts b/src/systems/shuttle/service/src/apis/controllers/serverDeployment.ts index c2a7acfaa..af936d68f 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverDeployment.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverDeployment.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serverDeploymentPresenter } from '../../presenters'; import { serverDeploymentService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/serverDiscovery.ts b/src/systems/shuttle/service/src/apis/controllers/serverDiscovery.ts index f22ba87fa..f9f7bf492 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverDiscovery.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverDiscovery.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { serverDiscoveryPresenter } from '../../presenters/serverDiscovery'; import { serverAuthConfigService, diff --git a/src/systems/shuttle/service/src/apis/controllers/serverOAuthCredentials.ts b/src/systems/shuttle/service/src/apis/controllers/serverOAuthCredentials.ts index 4b30ea102..50d1d03dd 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverOAuthCredentials.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverOAuthCredentials.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serverOAuthCredentialsPresenter } from '../../presenters'; import { serverOAuthCredentialsService, serverService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/serverOAuthSetup.ts b/src/systems/shuttle/service/src/apis/controllers/serverOAuthSetup.ts index 1f01ea1f6..fb1522ff6 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverOAuthSetup.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverOAuthSetup.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serverOAuthSetupLogsPresenter, serverOAuthSetupPresenter } from '../../presenters'; import { serverOAuthCredentialsService, diff --git a/src/systems/shuttle/service/src/apis/controllers/serverOAuthSetupEvent.ts b/src/systems/shuttle/service/src/apis/controllers/serverOAuthSetupEvent.ts index 32046ac1c..138b4b3b9 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverOAuthSetupEvent.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverOAuthSetupEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serverOAuthSetupEventPresenter } from '../../presenters'; import { serverOAuthSetupEventService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/serverVersion.ts b/src/systems/shuttle/service/src/apis/controllers/serverVersion.ts index 12ec2d790..99029fdad 100644 --- a/src/systems/shuttle/service/src/apis/controllers/serverVersion.ts +++ b/src/systems/shuttle/service/src/apis/controllers/serverVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { serverVersionPresenter } from '../../presenters'; import { serverVersionService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/controllers/tenant.ts b/src/systems/shuttle/service/src/apis/controllers/tenant.ts index b043ea01e..ed5328c02 100644 --- a/src/systems/shuttle/service/src/apis/controllers/tenant.ts +++ b/src/systems/shuttle/service/src/apis/controllers/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { tenantPresenter } from '../../presenters'; import { tenantService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/shuttle/service/src/apis/public/index.ts b/src/systems/shuttle/service/src/apis/public/index.ts index 5dba68f1b..27f55d3da 100644 --- a/src/systems/shuttle/service/src/apis/public/index.ts +++ b/src/systems/shuttle/service/src/apis/public/index.ts @@ -1,5 +1,5 @@ -import { createHono } from '@lowerdeck/hono'; -import { validationError } from '@lowerdeck/error'; +import { createHono } from '@mtsrc/hono'; +import { validationError } from '@mtsrc/error'; import { deleteCookie, getCookie, setCookie } from 'hono/cookie'; import z from 'zod'; import { db } from '../../db'; diff --git a/src/systems/shuttle/service/src/encryption.ts b/src/systems/shuttle/service/src/encryption.ts index a5584713b..804ef58e6 100644 --- a/src/systems/shuttle/service/src/encryption.ts +++ b/src/systems/shuttle/service/src/encryption.ts @@ -1,4 +1,4 @@ -import { Encryption } from '@lowerdeck/encryption'; +import { Encryption } from '@mtsrc/encryption'; import { env } from './env'; export let encryption = new Encryption(env.encryption.ENCRYPTION_KEY); diff --git a/src/systems/shuttle/service/src/endpoints.ts b/src/systems/shuttle/service/src/endpoints.ts index bf6fcc227..8c5f73f24 100644 --- a/src/systems/shuttle/service/src/endpoints.ts +++ b/src/systems/shuttle/service/src/endpoints.ts @@ -1,6 +1,6 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { rpcMux } from '@lowerdeck/rpc-server'; -import { withTracingSuppressed } from '@lowerdeck/telemetry'; +import { apiMux } from '@mtsrc/api-mux'; +import { rpcMux } from '@mtsrc/rpc-server'; +import { withTracingSuppressed } from '@mtsrc/telemetry'; import { RedisClient } from 'bun'; import { connectionApp, websocket } from './apis/connection'; import { ShuttleRPC } from './apis/controllers'; diff --git a/src/systems/shuttle/service/src/env.ts b/src/systems/shuttle/service/src/env.ts index b8e1c32bc..32a3b3ce0 100644 --- a/src/systems/shuttle/service/src/env.ts +++ b/src/systems/shuttle/service/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/shuttle/service/src/functionBay.ts b/src/systems/shuttle/service/src/functionBay.ts index 537c33c2f..9484179fc 100644 --- a/src/systems/shuttle/service/src/functionBay.ts +++ b/src/systems/shuttle/service/src/functionBay.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { delay } from '@mtsrc/delay'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { createFunctionBayClient } from '@metorial-platform-systems/function-bay-client'; import type { Tenant } from '../prisma/generated/client'; import { db } from './db'; diff --git a/src/systems/shuttle/service/src/id.ts b/src/systems/shuttle/service/src/id.ts index 51b698968..28121ba2d 100644 --- a/src/systems/shuttle/service/src/id.ts +++ b/src/systems/shuttle/service/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ tenant: idType.sorted('ctn_'), diff --git a/src/systems/shuttle/service/src/instrument.ts b/src/systems/shuttle/service/src/instrument.ts index 052e81421..7a75eeb0c 100644 --- a/src/systems/shuttle/service/src/instrument.ts +++ b/src/systems/shuttle/service/src/instrument.ts @@ -1,5 +1,5 @@ -import { setSentry } from '@lowerdeck/sentry'; -import { initTelemetry } from '@lowerdeck/telemetry'; +import { setSentry } from '@mtsrc/sentry'; +import { initTelemetry } from '@mtsrc/telemetry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/shuttle/service/src/lib/deployment/index.ts b/src/systems/shuttle/service/src/lib/deployment/index.ts index aa030ea29..2751c4e67 100644 --- a/src/systems/shuttle/service/src/lib/deployment/index.ts +++ b/src/systems/shuttle/service/src/lib/deployment/index.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import type { ServerDeployment, ServerDeploymentStep, diff --git a/src/systems/shuttle/service/src/lib/docker/access.ts b/src/systems/shuttle/service/src/lib/docker/access.ts index af8370879..63b2d0819 100644 --- a/src/systems/shuttle/service/src/lib/docker/access.ts +++ b/src/systems/shuttle/service/src/lib/docker/access.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import axios from 'axios'; import { getAxiosSsrfFilter } from '../http/axiosSsrf'; import { fetchBearerToken, parseBearerChallenge } from './connection'; diff --git a/src/systems/shuttle/service/src/lib/docker/assertAccess.ts b/src/systems/shuttle/service/src/lib/docker/assertAccess.ts index bc21627f3..99caa734b 100644 --- a/src/systems/shuttle/service/src/lib/docker/assertAccess.ts +++ b/src/systems/shuttle/service/src/lib/docker/assertAccess.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { checkImageAccess } from './access'; import type { ParsedImageRef } from './parseImageRef'; diff --git a/src/systems/shuttle/service/src/lib/function/call.ts b/src/systems/shuttle/service/src/lib/function/call.ts index b194bd7a9..1c2f92487 100644 --- a/src/systems/shuttle/service/src/lib/function/call.ts +++ b/src/systems/shuttle/service/src/lib/function/call.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { clientAdapter } from '@metorial/mcp-server'; import type { FunctionServer } from '../../../prisma/generated/client'; import { functionBay } from '../../functionBay'; diff --git a/src/systems/shuttle/service/src/lib/hono/validator.ts b/src/systems/shuttle/service/src/lib/hono/validator.ts index 02af96f83..993506ef2 100644 --- a/src/systems/shuttle/service/src/lib/hono/validator.ts +++ b/src/systems/shuttle/service/src/lib/hono/validator.ts @@ -1,5 +1,5 @@ import { zValidator } from '@hono/zod-validator'; -import { validationError } from '@lowerdeck/error'; +import { validationError } from '@mtsrc/error'; export let useValidation = ((target: any, schema: any) => zValidator(target, schema, (data, c) => { diff --git a/src/systems/shuttle/service/src/lib/identifier/version.ts b/src/systems/shuttle/service/src/lib/identifier/version.ts index ff73e42aa..33e9a6ec9 100644 --- a/src/systems/shuttle/service/src/lib/identifier/version.ts +++ b/src/systems/shuttle/service/src/lib/identifier/version.ts @@ -1,4 +1,4 @@ -import { generatePlainId } from '@lowerdeck/id'; +import { generatePlainId } from '@mtsrc/id'; import type { ContainerRepositoryTag, ContainerRepositoryVersion, diff --git a/src/systems/shuttle/service/src/lib/jsonSchema/validateData.ts b/src/systems/shuttle/service/src/lib/jsonSchema/validateData.ts index e647cab91..04ca8a510 100644 --- a/src/systems/shuttle/service/src/lib/jsonSchema/validateData.ts +++ b/src/systems/shuttle/service/src/lib/jsonSchema/validateData.ts @@ -1,5 +1,5 @@ -import { ServiceError, validationError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; +import { ServiceError, validationError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; import z from 'zod'; let Sentry = getSentry(); diff --git a/src/systems/shuttle/service/src/lib/oauth/oauthUtils.ts b/src/systems/shuttle/service/src/lib/oauth/oauthUtils.ts index 708fd9b1a..8c6ac4e50 100644 --- a/src/systems/shuttle/service/src/lib/oauth/oauthUtils.ts +++ b/src/systems/shuttle/service/src/lib/oauth/oauthUtils.ts @@ -1,7 +1,7 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; -import { getSentry } from '@lowerdeck/sentry'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { getSentry } from '@mtsrc/sentry'; import axios from 'axios'; import { customAlphabet } from 'nanoid'; import type { diff --git a/src/systems/shuttle/service/src/lib/oauth/types.ts b/src/systems/shuttle/service/src/lib/oauth/types.ts index 87041b1bd..68191ea38 100644 --- a/src/systems/shuttle/service/src/lib/oauth/types.ts +++ b/src/systems/shuttle/service/src/lib/oauth/types.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; export interface OAuthConfiguration { issuer?: string; diff --git a/src/systems/shuttle/service/src/mcp/backend/index.ts b/src/systems/shuttle/service/src/mcp/backend/index.ts index a0a00013c..08fa4c00f 100644 --- a/src/systems/shuttle/service/src/mcp/backend/index.ts +++ b/src/systems/shuttle/service/src/mcp/backend/index.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js'; import type { ServerConnection } from '../../../prisma/generated/browser'; import { db } from '../../db'; diff --git a/src/systems/shuttle/service/src/mcp/connection/async.ts b/src/systems/shuttle/service/src/mcp/connection/async.ts index 9340f0ae2..106077c5b 100644 --- a/src/systems/shuttle/service/src/mcp/connection/async.ts +++ b/src/systems/shuttle/service/src/mcp/connection/async.ts @@ -1,4 +1,4 @@ -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { type JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js'; import type { ConnectionMessage } from '../utils/messenger'; import type { McpConnectionAdapter } from './adapter'; diff --git a/src/systems/shuttle/service/src/mcp/connection/client.ts b/src/systems/shuttle/service/src/mcp/connection/client.ts index 87cf2ee60..ad458d4e7 100644 --- a/src/systems/shuttle/service/src/mcp/connection/client.ts +++ b/src/systems/shuttle/service/src/mcp/connection/client.ts @@ -1,5 +1,5 @@ -import { generatePlainId } from '@lowerdeck/id'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { generatePlainId } from '@mtsrc/id'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { InitializeResultSchema, type InitializeRequestParams, diff --git a/src/systems/shuttle/service/src/mcp/function/authManager.ts b/src/systems/shuttle/service/src/mcp/function/authManager.ts index edd457868..20649cb28 100644 --- a/src/systems/shuttle/service/src/mcp/function/authManager.ts +++ b/src/systems/shuttle/service/src/mcp/function/authManager.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import type { ServerAuthConfig, ServerConfig, diff --git a/src/systems/shuttle/service/src/mcp/function/connection.ts b/src/systems/shuttle/service/src/mcp/function/connection.ts index d94fd223f..927a3d6b0 100644 --- a/src/systems/shuttle/service/src/mcp/function/connection.ts +++ b/src/systems/shuttle/service/src/mcp/function/connection.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js'; import PQueue from 'p-queue'; import type { ServerVersion, Tenant } from '../../../prisma/generated/browser'; diff --git a/src/systems/shuttle/service/src/mcp/holopod/client.ts b/src/systems/shuttle/service/src/mcp/holopod/client.ts index 6d9e4fc7e..9c48c3572 100644 --- a/src/systems/shuttle/service/src/mcp/holopod/client.ts +++ b/src/systems/shuttle/service/src/mcp/holopod/client.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import axios from 'axios'; import { EventEmitter } from 'events'; import * as https from 'https'; diff --git a/src/systems/shuttle/service/src/mcp/holopod/connection.ts b/src/systems/shuttle/service/src/mcp/holopod/connection.ts index 3516bc0e4..a20ae9b89 100644 --- a/src/systems/shuttle/service/src/mcp/holopod/connection.ts +++ b/src/systems/shuttle/service/src/mcp/holopod/connection.ts @@ -1,6 +1,6 @@ -import { generatePlainId } from '@lowerdeck/id'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; -import { getSentry } from '@lowerdeck/sentry'; +import { generatePlainId } from '@mtsrc/id'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; +import { getSentry } from '@mtsrc/sentry'; import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js'; import PQueue from 'p-queue'; import type { Tenant } from '../../../prisma/generated/browser'; diff --git a/src/systems/shuttle/service/src/mcp/remote/authManager.ts b/src/systems/shuttle/service/src/mcp/remote/authManager.ts index 6489e1090..b73f1433d 100644 --- a/src/systems/shuttle/service/src/mcp/remote/authManager.ts +++ b/src/systems/shuttle/service/src/mcp/remote/authManager.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import type { ServerAuthConfig, ServerConfig, diff --git a/src/systems/shuttle/service/src/mcp/remote/sse.ts b/src/systems/shuttle/service/src/mcp/remote/sse.ts index b97c2127b..4da791400 100644 --- a/src/systems/shuttle/service/src/mcp/remote/sse.ts +++ b/src/systems/shuttle/service/src/mcp/remote/sse.ts @@ -1,5 +1,5 @@ -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; -import { getSentry } from '@lowerdeck/sentry'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; +import { getSentry } from '@mtsrc/sentry'; import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js'; import type { ServerVersion, Tenant } from '../../../prisma/generated/browser'; import type { diff --git a/src/systems/shuttle/service/src/mcp/utils/connection.ts b/src/systems/shuttle/service/src/mcp/utils/connection.ts index ba67e1e93..4f9eabffa 100644 --- a/src/systems/shuttle/service/src/mcp/utils/connection.ts +++ b/src/systems/shuttle/service/src/mcp/utils/connection.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import type { ServerConnection } from '../../../prisma/generated/client'; import { db } from '../../db'; diff --git a/src/systems/shuttle/service/src/queues/changeNotification/create.ts b/src/systems/shuttle/service/src/queues/changeNotification/create.ts index 41ff0a455..c1dc4044b 100644 --- a/src/systems/shuttle/service/src/queues/changeNotification/create.ts +++ b/src/systems/shuttle/service/src/queues/changeNotification/create.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId } from '../../id'; diff --git a/src/systems/shuttle/service/src/queues/connection/expire.ts b/src/systems/shuttle/service/src/queues/connection/expire.ts index 6240812e8..072095d11 100644 --- a/src/systems/shuttle/service/src/queues/connection/expire.ts +++ b/src/systems/shuttle/service/src/queues/connection/expire.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subHours, subMinutes } from 'date-fns'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/queues/connection/offload.ts b/src/systems/shuttle/service/src/queues/connection/offload.ts index e411397a1..fa50874c1 100644 --- a/src/systems/shuttle/service/src/queues/connection/offload.ts +++ b/src/systems/shuttle/service/src/queues/connection/offload.ts @@ -1,6 +1,6 @@ -import { createCron } from '@lowerdeck/cron'; -import { delay } from '@lowerdeck/delay'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { delay } from '@mtsrc/delay'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { offload } from '../../lib/offload'; diff --git a/src/systems/shuttle/service/src/queues/container/monitor.ts b/src/systems/shuttle/service/src/queues/container/monitor.ts index 503d64de8..f423ea716 100644 --- a/src/systems/shuttle/service/src/queues/container/monitor.ts +++ b/src/systems/shuttle/service/src/queues/container/monitor.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId } from '../../id'; diff --git a/src/systems/shuttle/service/src/queues/container/startDeployment.ts b/src/systems/shuttle/service/src/queues/container/startDeployment.ts index 19808f5e7..2632b4558 100644 --- a/src/systems/shuttle/service/src/queues/container/startDeployment.ts +++ b/src/systems/shuttle/service/src/queues/container/startDeployment.ts @@ -1,5 +1,5 @@ -import { isServiceError } from '@lowerdeck/error'; -import { createQueue } from '@lowerdeck/queue'; +import { isServiceError } from '@mtsrc/error'; +import { createQueue } from '@mtsrc/queue'; import type { ContainerRepositoryTag } from '../../../prisma/generated/client'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/queues/cron/discoveryCleanup.ts b/src/systems/shuttle/service/src/queues/cron/discoveryCleanup.ts index 18d1d99e1..83582e377 100644 --- a/src/systems/shuttle/service/src/queues/cron/discoveryCleanup.ts +++ b/src/systems/shuttle/service/src/queues/cron/discoveryCleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subDays } from 'date-fns'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/queues/deployment/failed.ts b/src/systems/shuttle/service/src/queues/deployment/failed.ts index 670f0023c..c97da2082 100644 --- a/src/systems/shuttle/service/src/queues/deployment/failed.ts +++ b/src/systems/shuttle/service/src/queues/deployment/failed.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/queues/deployment/succeeded.ts b/src/systems/shuttle/service/src/queues/deployment/succeeded.ts index 69c5b8687..eff40c501 100644 --- a/src/systems/shuttle/service/src/queues/deployment/succeeded.ts +++ b/src/systems/shuttle/service/src/queues/deployment/succeeded.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/queues/discovery/remoteOAuthConfig.ts b/src/systems/shuttle/service/src/queues/discovery/remoteOAuthConfig.ts index 49b3f8ad9..ac33b253d 100644 --- a/src/systems/shuttle/service/src/queues/discovery/remoteOAuthConfig.ts +++ b/src/systems/shuttle/service/src/queues/discovery/remoteOAuthConfig.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { OAuthUtils } from '../../lib/oauth/oauthUtils'; diff --git a/src/systems/shuttle/service/src/queues/discovery/remoteOAuthConnection.ts b/src/systems/shuttle/service/src/queues/discovery/remoteOAuthConnection.ts index b12740109..3467d7065 100644 --- a/src/systems/shuttle/service/src/queues/discovery/remoteOAuthConnection.ts +++ b/src/systems/shuttle/service/src/queues/discovery/remoteOAuthConnection.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId } from '../../id'; diff --git a/src/systems/shuttle/service/src/queues/discovery/server.ts b/src/systems/shuttle/service/src/queues/discovery/server.ts index b7855f747..ba8608fe5 100644 --- a/src/systems/shuttle/service/src/queues/discovery/server.ts +++ b/src/systems/shuttle/service/src/queues/discovery/server.ts @@ -1,8 +1,8 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { delay } from '@lowerdeck/delay'; -import { Hash } from '@lowerdeck/hash'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { delay } from '@mtsrc/delay'; +import { Hash } from '@mtsrc/hash'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import { McpError } from '@modelcontextprotocol/sdk/types.js'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/queues/function/discover.ts b/src/systems/shuttle/service/src/queues/function/discover.ts index f3bee2de0..40a1bbdcc 100644 --- a/src/systems/shuttle/service/src/queues/function/discover.ts +++ b/src/systems/shuttle/service/src/queues/function/discover.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { DeploymentManager } from '../../lib/deployment'; diff --git a/src/systems/shuttle/service/src/queues/function/monitor.ts b/src/systems/shuttle/service/src/queues/function/monitor.ts index 4e3a40767..e8a32ef92 100644 --- a/src/systems/shuttle/service/src/queues/function/monitor.ts +++ b/src/systems/shuttle/service/src/queues/function/monitor.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { functionBay } from '../../functionBay'; diff --git a/src/systems/shuttle/service/src/queues/function/publish.ts b/src/systems/shuttle/service/src/queues/function/publish.ts index 1ab285983..b993c2362 100644 --- a/src/systems/shuttle/service/src/queues/function/publish.ts +++ b/src/systems/shuttle/service/src/queues/function/publish.ts @@ -1,6 +1,6 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; -import { createQueue } from '@lowerdeck/queue'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId } from '../../id'; diff --git a/src/systems/shuttle/service/src/queues/function/startDeployment.ts b/src/systems/shuttle/service/src/queues/function/startDeployment.ts index bc660f07d..9d17d6ef1 100644 --- a/src/systems/shuttle/service/src/queues/function/startDeployment.ts +++ b/src/systems/shuttle/service/src/queues/function/startDeployment.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { diff --git a/src/systems/shuttle/service/src/queues/lifecycle/server.ts b/src/systems/shuttle/service/src/queues/lifecycle/server.ts index f5154efba..13df7dd6a 100644 --- a/src/systems/shuttle/service/src/queues/lifecycle/server.ts +++ b/src/systems/shuttle/service/src/queues/lifecycle/server.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; export let serverCreatedQueue = createQueue<{ serverId: string }>({ diff --git a/src/systems/shuttle/service/src/queues/lifecycle/serverVersion.ts b/src/systems/shuttle/service/src/queues/lifecycle/serverVersion.ts index 38f104b0a..d3a808233 100644 --- a/src/systems/shuttle/service/src/queues/lifecycle/serverVersion.ts +++ b/src/systems/shuttle/service/src/queues/lifecycle/serverVersion.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { withTransaction } from '../../transaction'; diff --git a/src/systems/shuttle/service/src/queues/lifecycle/tag.ts b/src/systems/shuttle/service/src/queues/lifecycle/tag.ts index d756f9ee6..e494aaa1a 100644 --- a/src/systems/shuttle/service/src/queues/lifecycle/tag.ts +++ b/src/systems/shuttle/service/src/queues/lifecycle/tag.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { syncTagQueue } from '../tag/sync'; diff --git a/src/systems/shuttle/service/src/queues/oauth/delegatedErrorCheck.ts b/src/systems/shuttle/service/src/queues/oauth/delegatedErrorCheck.ts index f9ee284b4..e92402709 100644 --- a/src/systems/shuttle/service/src/queues/oauth/delegatedErrorCheck.ts +++ b/src/systems/shuttle/service/src/queues/oauth/delegatedErrorCheck.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { startOfWeek, subDays } from 'date-fns'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/queues/oauth/remoteErrorCheck.ts b/src/systems/shuttle/service/src/queues/oauth/remoteErrorCheck.ts index 3c4ff2a16..4920b6b47 100644 --- a/src/systems/shuttle/service/src/queues/oauth/remoteErrorCheck.ts +++ b/src/systems/shuttle/service/src/queues/oauth/remoteErrorCheck.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { startOfWeek, subDays } from 'date-fns'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/queues/remote/startDeployment.ts b/src/systems/shuttle/service/src/queues/remote/startDeployment.ts index fe4d45c78..f6a09c48e 100644 --- a/src/systems/shuttle/service/src/queues/remote/startDeployment.ts +++ b/src/systems/shuttle/service/src/queues/remote/startDeployment.ts @@ -1,6 +1,6 @@ -import { delay } from '@lowerdeck/delay'; -import { isServiceError } from '@lowerdeck/error'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { delay } from '@mtsrc/delay'; +import { isServiceError } from '@mtsrc/error'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import type { RemoteOAuthConfig, RemoteOAuthDiscoveryDocument, diff --git a/src/systems/shuttle/service/src/queues/retention/cleanup.ts b/src/systems/shuttle/service/src/queues/retention/cleanup.ts index e9c742c41..9528243b0 100644 --- a/src/systems/shuttle/service/src/queues/retention/cleanup.ts +++ b/src/systems/shuttle/service/src/queues/retention/cleanup.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { ServerDeploymentStatus } from '../../../prisma/generated/client'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/queues/retention/index.ts b/src/systems/shuttle/service/src/queues/retention/index.ts index e2e6bae23..e2b526acf 100644 --- a/src/systems/shuttle/service/src/queues/retention/index.ts +++ b/src/systems/shuttle/service/src/queues/retention/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { shuttleRetentionCron, shuttleRetentionStorageCleanupQueueProcessor, diff --git a/src/systems/shuttle/service/src/queues/tag/serverVersion.e2e.test.ts b/src/systems/shuttle/service/src/queues/tag/serverVersion.e2e.test.ts index 9163ab513..4fe5907f5 100644 --- a/src/systems/shuttle/service/src/queues/tag/serverVersion.e2e.test.ts +++ b/src/systems/shuttle/service/src/queues/tag/serverVersion.e2e.test.ts @@ -5,7 +5,7 @@ import { getId } from '../../id'; import { deployContainerServerStartQueue } from '../container/startDeployment'; import { serverVersionCreatedQueue } from '../lifecycle/serverVersion'; -vi.mock('@lowerdeck/queue', () => ({ +vi.mock('@mtsrc/queue', () => ({ createQueue: vi.fn(() => ({ add: vi.fn(), addManyWithOps: vi.fn(), diff --git a/src/systems/shuttle/service/src/queues/tag/serverVersion.ts b/src/systems/shuttle/service/src/queues/tag/serverVersion.ts index d11c51d64..3302be32b 100644 --- a/src/systems/shuttle/service/src/queues/tag/serverVersion.ts +++ b/src/systems/shuttle/service/src/queues/tag/serverVersion.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId } from '../../id'; diff --git a/src/systems/shuttle/service/src/queues/tag/sync.ts b/src/systems/shuttle/service/src/queues/tag/sync.ts index b8c5e49a9..cc7bb50a5 100644 --- a/src/systems/shuttle/service/src/queues/tag/sync.ts +++ b/src/systems/shuttle/service/src/queues/tag/sync.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId, snowflake } from '../../id'; diff --git a/src/systems/shuttle/service/src/services/changeNotification.ts b/src/systems/shuttle/service/src/services/changeNotification.ts index 2e17c986b..acbe11d8a 100644 --- a/src/systems/shuttle/service/src/services/changeNotification.ts +++ b/src/systems/shuttle/service/src/services/changeNotification.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; let include = { diff --git a/src/systems/shuttle/service/src/services/containerRegistry.ts b/src/systems/shuttle/service/src/services/containerRegistry.ts index 84af4030b..9de4b402e 100644 --- a/src/systems/shuttle/service/src/services/containerRegistry.ts +++ b/src/systems/shuttle/service/src/services/containerRegistry.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/shuttle/service/src/services/containerRepository.ts b/src/systems/shuttle/service/src/services/containerRepository.ts index 8e6bbd889..35956996b 100644 --- a/src/systems/shuttle/service/src/services/containerRepository.ts +++ b/src/systems/shuttle/service/src/services/containerRepository.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/shuttle/service/src/services/containerRepositoryTag.ts b/src/systems/shuttle/service/src/services/containerRepositoryTag.ts index c443e38f7..bda3591bc 100644 --- a/src/systems/shuttle/service/src/services/containerRepositoryTag.ts +++ b/src/systems/shuttle/service/src/services/containerRepositoryTag.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/shuttle/service/src/services/containerRepositoryVersion.ts b/src/systems/shuttle/service/src/services/containerRepositoryVersion.ts index 2156a9f5e..f233d0b5d 100644 --- a/src/systems/shuttle/service/src/services/containerRepositoryVersion.ts +++ b/src/systems/shuttle/service/src/services/containerRepositoryVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/shuttle/service/src/services/functionServerInvocation.ts b/src/systems/shuttle/service/src/services/functionServerInvocation.ts index 9d7c586c8..cc024dd7a 100644 --- a/src/systems/shuttle/service/src/services/functionServerInvocation.ts +++ b/src/systems/shuttle/service/src/services/functionServerInvocation.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { FunctionServer, FunctionServerInvocation, diff --git a/src/systems/shuttle/service/src/services/networkRuleset.ts b/src/systems/shuttle/service/src/services/networkRuleset.ts index 5ae5ab805..a715911f2 100644 --- a/src/systems/shuttle/service/src/services/networkRuleset.ts +++ b/src/systems/shuttle/service/src/services/networkRuleset.ts @@ -1,7 +1,7 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { badRequestError, goneError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { badRequestError, goneError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { isValidCIDR } from 'ipaddr.js'; import type { NetworkingRuleset, diff --git a/src/systems/shuttle/service/src/services/oauth/delegated/authToken.ts b/src/systems/shuttle/service/src/services/oauth/delegated/authToken.ts index 94fb60439..ec8a61189 100644 --- a/src/systems/shuttle/service/src/services/oauth/delegated/authToken.ts +++ b/src/systems/shuttle/service/src/services/oauth/delegated/authToken.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; +import { Service } from '@mtsrc/service'; import { addMinutes, differenceInDays, differenceInMinutes } from 'date-fns'; import type { DelegatedOAuthConfig, diff --git a/src/systems/shuttle/service/src/services/oauth/delegated/authorization.ts b/src/systems/shuttle/service/src/services/oauth/delegated/authorization.ts index cf3e72a1a..9f0683a55 100644 --- a/src/systems/shuttle/service/src/services/oauth/delegated/authorization.ts +++ b/src/systems/shuttle/service/src/services/oauth/delegated/authorization.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; import { subMinutes } from 'date-fns'; import type { DelegatedOAuthConfig, diff --git a/src/systems/shuttle/service/src/services/oauth/delegated/connection.ts b/src/systems/shuttle/service/src/services/oauth/delegated/connection.ts index e535dfd81..e2a7f8890 100644 --- a/src/systems/shuttle/service/src/services/oauth/delegated/connection.ts +++ b/src/systems/shuttle/service/src/services/oauth/delegated/connection.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { DelegatedOAuthConfig, DelegatedOAuthConnection, diff --git a/src/systems/shuttle/service/src/services/oauth/remote/authToken.ts b/src/systems/shuttle/service/src/services/oauth/remote/authToken.ts index d502fb132..5e3967601 100644 --- a/src/systems/shuttle/service/src/services/oauth/remote/authToken.ts +++ b/src/systems/shuttle/service/src/services/oauth/remote/authToken.ts @@ -1,6 +1,6 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; +import { Service } from '@mtsrc/service'; import { addMinutes, differenceInDays, differenceInMinutes } from 'date-fns'; import type { RemoteOAuthConfig, diff --git a/src/systems/shuttle/service/src/services/oauth/remote/authorization.ts b/src/systems/shuttle/service/src/services/oauth/remote/authorization.ts index eec1807a6..9e6684e8f 100644 --- a/src/systems/shuttle/service/src/services/oauth/remote/authorization.ts +++ b/src/systems/shuttle/service/src/services/oauth/remote/authorization.ts @@ -1,7 +1,7 @@ -import { delay } from '@lowerdeck/delay'; -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; +import { delay } from '@mtsrc/delay'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; import { subMinutes } from 'date-fns'; import type { RemoteOAuthConfig, diff --git a/src/systems/shuttle/service/src/services/oauth/remote/connection.ts b/src/systems/shuttle/service/src/services/oauth/remote/connection.ts index 3141e2c36..58c3a8449 100644 --- a/src/systems/shuttle/service/src/services/oauth/remote/connection.ts +++ b/src/systems/shuttle/service/src/services/oauth/remote/connection.ts @@ -1,7 +1,7 @@ -import { delay } from '@lowerdeck/delay'; -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { delay } from '@mtsrc/delay'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { RemoteOAuthConfig, RemoteOAuthConnection, diff --git a/src/systems/shuttle/service/src/services/oauth/remote/discovery.ts b/src/systems/shuttle/service/src/services/oauth/remote/discovery.ts index 43cd7f510..31aa8f468 100644 --- a/src/systems/shuttle/service/src/services/oauth/remote/discovery.ts +++ b/src/systems/shuttle/service/src/services/oauth/remote/discovery.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../../../db'; import { getId } from '../../../id'; import { OAuthDiscovery } from '../../../lib/oauth/discovery'; diff --git a/src/systems/shuttle/service/src/services/oauth/serverAuthConfig.ts b/src/systems/shuttle/service/src/services/oauth/serverAuthConfig.ts index 7769ca040..d7bf4a6df 100644 --- a/src/systems/shuttle/service/src/services/oauth/serverAuthConfig.ts +++ b/src/systems/shuttle/service/src/services/oauth/serverAuthConfig.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Server, Tenant } from '../../../prisma/generated/client'; import { db } from '../../db'; import { getId } from '../../id'; diff --git a/src/systems/shuttle/service/src/services/oauth/serverAuthConfigEvent.ts b/src/systems/shuttle/service/src/services/oauth/serverAuthConfigEvent.ts index 3f66c93d4..93674e088 100644 --- a/src/systems/shuttle/service/src/services/oauth/serverAuthConfigEvent.ts +++ b/src/systems/shuttle/service/src/services/oauth/serverAuthConfigEvent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../../prisma/generated/client'; import { db } from '../../db'; diff --git a/src/systems/shuttle/service/src/services/oauth/serverAuthToken.ts b/src/systems/shuttle/service/src/services/oauth/serverAuthToken.ts index 5e91fd6df..a7772af5b 100644 --- a/src/systems/shuttle/service/src/services/oauth/serverAuthToken.ts +++ b/src/systems/shuttle/service/src/services/oauth/serverAuthToken.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { ServerAuthConfig, Tenant } from '../../../prisma/generated/client'; import { delegatedAuthTokenService } from './delegated'; import { remoteAuthTokenService } from './remote'; diff --git a/src/systems/shuttle/service/src/services/oauth/serverEvent.ts b/src/systems/shuttle/service/src/services/oauth/serverEvent.ts index 951c49d93..ec592317f 100644 --- a/src/systems/shuttle/service/src/services/oauth/serverEvent.ts +++ b/src/systems/shuttle/service/src/services/oauth/serverEvent.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import type { ServerAuthConfig, ServerOAuthSetup diff --git a/src/systems/shuttle/service/src/services/oauth/serverOAuthCredentials.ts b/src/systems/shuttle/service/src/services/oauth/serverOAuthCredentials.ts index 73a8f0c13..de0e6bbdd 100644 --- a/src/systems/shuttle/service/src/services/oauth/serverOAuthCredentials.ts +++ b/src/systems/shuttle/service/src/services/oauth/serverOAuthCredentials.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Server, Tenant } from '../../../prisma/generated/client'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/shuttle/service/src/services/oauth/serverOAuthSetup.ts b/src/systems/shuttle/service/src/services/oauth/serverOAuthSetup.ts index 8b0e1b21a..6c37073d0 100644 --- a/src/systems/shuttle/service/src/services/oauth/serverOAuthSetup.ts +++ b/src/systems/shuttle/service/src/services/oauth/serverOAuthSetup.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Server, ServerOAuthCredentials, Tenant } from '../../../prisma/generated/client'; import { db } from '../../db'; import { getId } from '../../id'; diff --git a/src/systems/shuttle/service/src/services/oauth/serverOAuthSetupEvent.ts b/src/systems/shuttle/service/src/services/oauth/serverOAuthSetupEvent.ts index 4757c083e..3eebafd06 100644 --- a/src/systems/shuttle/service/src/services/oauth/serverOAuthSetupEvent.ts +++ b/src/systems/shuttle/service/src/services/oauth/serverOAuthSetupEvent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../../prisma/generated/client'; import { db } from '../../db'; diff --git a/src/systems/shuttle/service/src/services/secret.ts b/src/systems/shuttle/service/src/services/secret.ts index 4f253e93e..2bdb7ff33 100644 --- a/src/systems/shuttle/service/src/services/secret.ts +++ b/src/systems/shuttle/service/src/services/secret.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Secret, SecretType, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { encryption } from '../encryption'; diff --git a/src/systems/shuttle/service/src/services/server.ts b/src/systems/shuttle/service/src/services/server.ts index 0d0db97ab..4ae3a62a0 100644 --- a/src/systems/shuttle/service/src/services/server.ts +++ b/src/systems/shuttle/service/src/services/server.ts @@ -3,9 +3,9 @@ import { forbiddenError, notFoundError, ServiceError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import z from 'zod'; import type { Server, ServerRemoteProtocol, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/shuttle/service/src/services/serverConfig.ts b/src/systems/shuttle/service/src/services/serverConfig.ts index c24660a95..c39df2b88 100644 --- a/src/systems/shuttle/service/src/services/serverConfig.ts +++ b/src/systems/shuttle/service/src/services/serverConfig.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { v } from '@mtsrc/validation'; import type { Server, ServerVersion, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/shuttle/service/src/services/serverConnection.ts b/src/systems/shuttle/service/src/services/serverConnection.ts index c880cfddf..9f0a85cdf 100644 --- a/src/systems/shuttle/service/src/services/serverConnection.ts +++ b/src/systems/shuttle/service/src/services/serverConnection.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { InitializeRequest } from '@modelcontextprotocol/sdk/types.js'; import type { Server, diff --git a/src/systems/shuttle/service/src/services/serverDeployment.ts b/src/systems/shuttle/service/src/services/serverDeployment.ts index 9cc344b25..d3c867515 100644 --- a/src/systems/shuttle/service/src/services/serverDeployment.ts +++ b/src/systems/shuttle/service/src/services/serverDeployment.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { ServerDeployment, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { functionBay } from '../functionBay'; diff --git a/src/systems/shuttle/service/src/services/serverDeploymentCreate.ts b/src/systems/shuttle/service/src/services/serverDeploymentCreate.ts index 8e63b590b..7f8f6b2a8 100644 --- a/src/systems/shuttle/service/src/services/serverDeploymentCreate.ts +++ b/src/systems/shuttle/service/src/services/serverDeploymentCreate.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { Server, ServerRemoteProtocol, Tenant } from '../../prisma/generated/client'; import { getId } from '../id'; import { oauthConfigValidator, type OAuthConfiguration } from '../lib/oauth/types'; diff --git a/src/systems/shuttle/service/src/services/serverDiscovery.ts b/src/systems/shuttle/service/src/services/serverDiscovery.ts index fda5119f5..f307a7230 100644 --- a/src/systems/shuttle/service/src/services/serverDiscovery.ts +++ b/src/systems/shuttle/service/src/services/serverDiscovery.ts @@ -1,6 +1,6 @@ -import { delay } from '@lowerdeck/delay'; -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { delay } from '@mtsrc/delay'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { subHours } from 'date-fns'; import type { Server, diff --git a/src/systems/shuttle/service/src/services/serverVersion.ts b/src/systems/shuttle/service/src/services/serverVersion.ts index aceaa4529..e17a62955 100644 --- a/src/systems/shuttle/service/src/services/serverVersion.ts +++ b/src/systems/shuttle/service/src/services/serverVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/shuttle/service/src/services/tenant.ts b/src/systems/shuttle/service/src/services/tenant.ts index d7813a968..038c6d848 100644 --- a/src/systems/shuttle/service/src/services/tenant.ts +++ b/src/systems/shuttle/service/src/services/tenant.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/shuttle/service/src/storage.ts b/src/systems/shuttle/service/src/storage.ts index 1d33bc336..725f27585 100644 --- a/src/systems/shuttle/service/src/storage.ts +++ b/src/systems/shuttle/service/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { db } from './db'; import { env } from './env'; diff --git a/src/systems/shuttle/service/src/test/client.ts b/src/systems/shuttle/service/src/test/client.ts index 34a965c1e..b1e0c9bca 100644 --- a/src/systems/shuttle/service/src/test/client.ts +++ b/src/systems/shuttle/service/src/test/client.ts @@ -1,6 +1,6 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { rpcMux } from '@lowerdeck/rpc-server'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { rpcMux } from '@mtsrc/rpc-server'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import type { ShuttleClient } from '../apis/controllers'; import { ShuttleRPC } from '../apis/controllers'; diff --git a/src/systems/shuttle/service/src/test/fixtures/changeNotificationFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/changeNotificationFixtures.ts index 5ca3b4b4e..b7885ade6 100644 --- a/src/systems/shuttle/service/src/test/fixtures/changeNotificationFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/changeNotificationFixtures.ts @@ -6,7 +6,7 @@ import type { } from '../../../prisma/generated/client'; import { ChangeNotificationType } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ServerFixtures } from './serverFixtures'; import { ServerVersionFixtures } from './serverVersionFixtures'; import { TenantFixtures } from './tenantFixtures'; diff --git a/src/systems/shuttle/service/src/test/fixtures/connectionLogsBucketFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/connectionLogsBucketFixtures.ts index d7df23e4e..7a32056fb 100644 --- a/src/systems/shuttle/service/src/test/fixtures/connectionLogsBucketFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/connectionLogsBucketFixtures.ts @@ -3,7 +3,7 @@ import type { ConnectionLogsStorageBucket } from '../../../prisma/generated/client'; import { snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const ConnectionLogsBucketFixtures = (db: PrismaClient) => { const defaultBucket = async ( diff --git a/src/systems/shuttle/service/src/test/fixtures/containerRegistryFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/containerRegistryFixtures.ts index 91576d86e..7130fffa7 100644 --- a/src/systems/shuttle/service/src/test/fixtures/containerRegistryFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/containerRegistryFixtures.ts @@ -7,7 +7,7 @@ import type { } from '../../../prisma/generated/client'; import { ContainerRegistryType } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; import { SecretFixtures } from './secretFixtures'; diff --git a/src/systems/shuttle/service/src/test/fixtures/containerRepositoryFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/containerRepositoryFixtures.ts index dac419d53..81106379a 100644 --- a/src/systems/shuttle/service/src/test/fixtures/containerRepositoryFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/containerRepositoryFixtures.ts @@ -7,7 +7,7 @@ import type { } from '../../../prisma/generated/client'; import { ContainerRepositoryType } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; import { ContainerRegistryFixtures } from './containerRegistryFixtures'; diff --git a/src/systems/shuttle/service/src/test/fixtures/containerRepositoryTagFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/containerRepositoryTagFixtures.ts index 31eaa8b04..cd8974ba1 100644 --- a/src/systems/shuttle/service/src/test/fixtures/containerRepositoryTagFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/containerRepositoryTagFixtures.ts @@ -9,7 +9,7 @@ import { ContainerRepositoryTagDiscoveryStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ContainerRepositoryFixtures } from './containerRepositoryFixtures'; export const ContainerRepositoryTagFixtures = (db: PrismaClient) => { diff --git a/src/systems/shuttle/service/src/test/fixtures/containerRepositoryVersionFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/containerRepositoryVersionFixtures.ts index 1ee3aa047..6aeceb214 100644 --- a/src/systems/shuttle/service/src/test/fixtures/containerRepositoryVersionFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/containerRepositoryVersionFixtures.ts @@ -5,7 +5,7 @@ import type { ContainerRepository } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ContainerRepositoryFixtures } from './containerRepositoryFixtures'; export const ContainerRepositoryVersionFixtures = (db: PrismaClient) => { diff --git a/src/systems/shuttle/service/src/test/fixtures/networkingRulesetFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/networkingRulesetFixtures.ts index 53828cfaf..ef9edb2fd 100644 --- a/src/systems/shuttle/service/src/test/fixtures/networkingRulesetFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/networkingRulesetFixtures.ts @@ -5,7 +5,7 @@ import type { } from '../../../prisma/generated/client'; import { NetworkingRuleStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; export const NetworkingRulesetFixtures = (db: PrismaClient) => { diff --git a/src/systems/shuttle/service/src/test/fixtures/secretFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/secretFixtures.ts index f178a901c..55792aed2 100644 --- a/src/systems/shuttle/service/src/test/fixtures/secretFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/secretFixtures.ts @@ -2,7 +2,7 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, Secret, Tenant } from '../../../prisma/generated/client'; import { SecretStatus, SecretType } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; export const SecretFixtures = (db: PrismaClient) => { diff --git a/src/systems/shuttle/service/src/test/fixtures/serverAuthConfigFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/serverAuthConfigFixtures.ts index 679dd97bf..c3cc9256b 100644 --- a/src/systems/shuttle/service/src/test/fixtures/serverAuthConfigFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/serverAuthConfigFixtures.ts @@ -6,7 +6,7 @@ import type { } from '../../../prisma/generated/client'; import { ServerAuthConfigType } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ServerFixtures } from './serverFixtures'; import { TenantFixtures } from './tenantFixtures'; diff --git a/src/systems/shuttle/service/src/test/fixtures/serverConfigFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/serverConfigFixtures.ts index 2b2b9da6a..e9064f5f6 100644 --- a/src/systems/shuttle/service/src/test/fixtures/serverConfigFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/serverConfigFixtures.ts @@ -6,7 +6,7 @@ import type { Tenant } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ServerFixtures } from './serverFixtures'; import { SecretFixtures } from './secretFixtures'; import { TenantFixtures } from './tenantFixtures'; diff --git a/src/systems/shuttle/service/src/test/fixtures/serverConnectionFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/serverConnectionFixtures.ts index 951535df9..1d8396662 100644 --- a/src/systems/shuttle/service/src/test/fixtures/serverConnectionFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/serverConnectionFixtures.ts @@ -6,7 +6,7 @@ import type { } from '../../../prisma/generated/client'; import { ServerConnectionStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ConnectionLogsBucketFixtures } from './connectionLogsBucketFixtures'; import { ServerConfigFixtures } from './serverConfigFixtures'; import { ServerVersionFixtures } from './serverVersionFixtures'; diff --git a/src/systems/shuttle/service/src/test/fixtures/serverDeploymentFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/serverDeploymentFixtures.ts index 5680a59c4..6ad824cb8 100644 --- a/src/systems/shuttle/service/src/test/fixtures/serverDeploymentFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/serverDeploymentFixtures.ts @@ -6,7 +6,7 @@ import type { } from '../../../prisma/generated/client'; import { ServerDeploymentStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ServerFixtures } from './serverFixtures'; import { TenantFixtures } from './tenantFixtures'; diff --git a/src/systems/shuttle/service/src/test/fixtures/serverDiscoveryFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/serverDiscoveryFixtures.ts index a91e233fb..c6502b780 100644 --- a/src/systems/shuttle/service/src/test/fixtures/serverDiscoveryFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/serverDiscoveryFixtures.ts @@ -6,7 +6,7 @@ import type { } from '../../../prisma/generated/client'; import { ServerDiscoveryStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ServerConfigFixtures } from './serverConfigFixtures'; import { ServerVersionFixtures } from './serverVersionFixtures'; diff --git a/src/systems/shuttle/service/src/test/fixtures/serverFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/serverFixtures.ts index 7cd2c3805..76631e1fa 100644 --- a/src/systems/shuttle/service/src/test/fixtures/serverFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/serverFixtures.ts @@ -6,7 +6,7 @@ import type { } from '../../../prisma/generated/client'; import { ServerType } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; export const ServerFixtures = (db: PrismaClient) => { diff --git a/src/systems/shuttle/service/src/test/fixtures/serverVersionFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/serverVersionFixtures.ts index 713211137..0bc84e5fe 100644 --- a/src/systems/shuttle/service/src/test/fixtures/serverVersionFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/serverVersionFixtures.ts @@ -6,7 +6,7 @@ import type { Tenant } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ServerFixtures } from './serverFixtures'; import { ServerDeploymentFixtures } from './serverDeploymentFixtures'; import { TenantFixtures } from './tenantFixtures'; diff --git a/src/systems/shuttle/service/src/test/fixtures/tenantFixtures.ts b/src/systems/shuttle/service/src/test/fixtures/tenantFixtures.ts index a74febbad..8bd5ad2b8 100644 --- a/src/systems/shuttle/service/src/test/fixtures/tenantFixtures.ts +++ b/src/systems/shuttle/service/src/test/fixtures/tenantFixtures.ts @@ -6,7 +6,7 @@ import type { ServerVersion } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { ServerFixtures } from './serverFixtures'; import { ServerVersionFixtures } from './serverVersionFixtures'; diff --git a/src/systems/shuttle/service/src/test/setup.ts b/src/systems/shuttle/service/src/test/setup.ts index d86a422c0..565cb738a 100644 --- a/src/systems/shuttle/service/src/test/setup.ts +++ b/src/systems/shuttle/service/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll, vi } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; import { getId } from '../id'; // Mock `hono/bun` for compatibility with Vitest's Node runner (`Bun` is undefined error) diff --git a/src/systems/shuttle/service/src/transaction.ts b/src/systems/shuttle/service/src/transaction.ts index 9061f5ec4..39a885532 100644 --- a/src/systems/shuttle/service/src/transaction.ts +++ b/src/systems/shuttle/service/src/transaction.ts @@ -1,7 +1,7 @@ import { provideExecutionContext, withExecutionContextOptional -} from '@lowerdeck/execution-context'; +} from '@mtsrc/execution-context'; import { AsyncLocalStorage } from 'async_hooks'; import PQueue from 'p-queue'; import { db } from './db'; diff --git a/src/systems/shuttle/service/src/worker.ts b/src/systems/shuttle/service/src/worker.ts index d2324c5db..0b4957ac1 100644 --- a/src/systems/shuttle/service/src/worker.ts +++ b/src/systems/shuttle/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { createChangeNotificationQueueProcessor } from './queues/changeNotification/create'; import { expiresConnectionsCron } from './queues/connection/expire'; import { diff --git a/src/systems/shuttle/service/vitest.config.ts b/src/systems/shuttle/service/vitest.config.ts index 3b0cf8250..aa90a9b40 100644 --- a/src/systems/shuttle/service/vitest.config.ts +++ b/src/systems/shuttle/service/vitest.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { const env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/shuttle/service/vitest.e2e.config.ts b/src/systems/shuttle/service/vitest.e2e.config.ts index 25e8bf570..08baa5fc2 100644 --- a/src/systems/shuttle/service/vitest.e2e.config.ts +++ b/src/systems/shuttle/service/vitest.e2e.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index 6dcdc0010..52ff2ae6f 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -23,7 +23,7 @@ WORKDIR /app/src/systems/signal/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index 8469348e7..28fd7527d 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -24,11 +24,11 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17" + "vitest": "4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -37,26 +37,6 @@ "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", @@ -69,6 +49,26 @@ "@metorial-platform-systems/object-storage-client": "workspace:*", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", - "yaml": "^2.8.2" + "yaml": "^2.8.2", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/signal/service/src/controllers/_app.ts b/src/systems/signal/service/src/controllers/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/signal/service/src/controllers/_app.ts +++ b/src/systems/signal/service/src/controllers/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/signal/service/src/controllers/event.ts b/src/systems/signal/service/src/controllers/event.ts index 64eeb1d94..f43bd0379 100644 --- a/src/systems/signal/service/src/controllers/event.ts +++ b/src/systems/signal/service/src/controllers/event.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { eventPresenter } from '../presenters'; import { eventService, senderService } from '../services'; import { app } from './_app'; diff --git a/src/systems/signal/service/src/controllers/eventDeliveryAttempt.ts b/src/systems/signal/service/src/controllers/eventDeliveryAttempt.ts index 2acbceb70..4b39449b0 100644 --- a/src/systems/signal/service/src/controllers/eventDeliveryAttempt.ts +++ b/src/systems/signal/service/src/controllers/eventDeliveryAttempt.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { eventDeliveryAttemptPresenter } from '../presenters'; import { eventDeliveryAttemptService } from '../services'; import { app } from './_app'; diff --git a/src/systems/signal/service/src/controllers/eventDeliveryIntent.ts b/src/systems/signal/service/src/controllers/eventDeliveryIntent.ts index 080c04b72..f00e751ca 100644 --- a/src/systems/signal/service/src/controllers/eventDeliveryIntent.ts +++ b/src/systems/signal/service/src/controllers/eventDeliveryIntent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { eventDeliveryIntentPresenter } from '../presenters'; import { eventDeliveryIntentService } from '../services'; import { app } from './_app'; diff --git a/src/systems/signal/service/src/controllers/eventDestination.ts b/src/systems/signal/service/src/controllers/eventDestination.ts index 95e8bf642..1a721b3e1 100644 --- a/src/systems/signal/service/src/controllers/eventDestination.ts +++ b/src/systems/signal/service/src/controllers/eventDestination.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { eventDestinationPresenter } from '../presenters'; import { eventDestinationService, senderService } from '../services'; import { app } from './_app'; diff --git a/src/systems/signal/service/src/controllers/index.ts b/src/systems/signal/service/src/controllers/index.ts index 666c09c64..0ea380b90 100644 --- a/src/systems/signal/service/src/controllers/index.ts +++ b/src/systems/signal/service/src/controllers/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { eventController } from './event'; import { eventDeliveryAttemptController } from './eventDeliveryAttempt'; diff --git a/src/systems/signal/service/src/controllers/sender.ts b/src/systems/signal/service/src/controllers/sender.ts index 670fbaacb..2cec0084c 100644 --- a/src/systems/signal/service/src/controllers/sender.ts +++ b/src/systems/signal/service/src/controllers/sender.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { senderPresenter } from '../presenters/sender'; import { senderService } from '../services'; import { app } from './_app'; diff --git a/src/systems/signal/service/src/controllers/tenant.ts b/src/systems/signal/service/src/controllers/tenant.ts index 25e2e4973..297fd0578 100644 --- a/src/systems/signal/service/src/controllers/tenant.ts +++ b/src/systems/signal/service/src/controllers/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { tenantPresenter } from '../presenters/tenant'; import { tenantService } from '../services'; import { app } from './_app'; diff --git a/src/systems/signal/service/src/endpoints.ts b/src/systems/signal/service/src/endpoints.ts index 278123144..a38855faf 100644 --- a/src/systems/signal/service/src/endpoints.ts +++ b/src/systems/signal/service/src/endpoints.ts @@ -1,4 +1,4 @@ -import { withTracingSuppressed } from '@lowerdeck/telemetry'; +import { withTracingSuppressed } from '@mtsrc/telemetry'; import { RedisClient } from 'bun'; import { SignalApi } from './controllers'; import { db } from './db'; diff --git a/src/systems/signal/service/src/env.ts b/src/systems/signal/service/src/env.ts index 27bb052e4..d0b52cf3d 100644 --- a/src/systems/signal/service/src/env.ts +++ b/src/systems/signal/service/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/signal/service/src/id.ts b/src/systems/signal/service/src/id.ts index 05e48a9eb..56f5928fc 100644 --- a/src/systems/signal/service/src/id.ts +++ b/src/systems/signal/service/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ tenant: idType.sorted('stn_'), diff --git a/src/systems/signal/service/src/instrument.ts b/src/systems/signal/service/src/instrument.ts index 6c090141f..e3b243086 100644 --- a/src/systems/signal/service/src/instrument.ts +++ b/src/systems/signal/service/src/instrument.ts @@ -1,5 +1,5 @@ -import { setSentry } from '@lowerdeck/sentry'; -import { initTelemetry } from '@lowerdeck/telemetry'; +import { setSentry } from '@mtsrc/sentry'; +import { initTelemetry } from '@mtsrc/telemetry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/signal/service/src/queues/cleanup.ts b/src/systems/signal/service/src/queues/cleanup.ts index ca91bf064..dbad113da 100644 --- a/src/systems/signal/service/src/queues/cleanup.ts +++ b/src/systems/signal/service/src/queues/cleanup.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { subDays } from 'date-fns'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/signal/service/src/queues/send/cleanup.ts b/src/systems/signal/service/src/queues/send/cleanup.ts index ec60f47c6..05c83b172 100644 --- a/src/systems/signal/service/src/queues/send/cleanup.ts +++ b/src/systems/signal/service/src/queues/send/cleanup.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { storageKey } from '../../lib/storageKey'; diff --git a/src/systems/signal/service/src/queues/send/delivery.ts b/src/systems/signal/service/src/queues/send/delivery.ts index a07f3ad1b..0beb27642 100644 --- a/src/systems/signal/service/src/queues/send/delivery.ts +++ b/src/systems/signal/service/src/queues/send/delivery.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import axios from 'axios'; import type { EventDeliveryAttemptStatus } from '../../../prisma/generated/enums'; import { db } from '../../db'; diff --git a/src/systems/signal/service/src/queues/send/index.ts b/src/systems/signal/service/src/queues/send/index.ts index 3bf6418c1..2b387a570 100644 --- a/src/systems/signal/service/src/queues/send/index.ts +++ b/src/systems/signal/service/src/queues/send/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { eventCleanupQueueProcessor } from './cleanup'; import { attemptDeliveryQueueProcessor, createDeliveryQueueProcessor } from './delivery'; import { newEventQueueProcessor } from './init'; diff --git a/src/systems/signal/service/src/queues/send/init.ts b/src/systems/signal/service/src/queues/send/init.ts index bb8f5ede1..06705f7dc 100644 --- a/src/systems/signal/service/src/queues/send/init.ts +++ b/src/systems/signal/service/src/queues/send/init.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { createDeliveryQueue } from './delivery'; diff --git a/src/systems/signal/service/src/queues/send/intent.ts b/src/systems/signal/service/src/queues/send/intent.ts index 58e60d6f6..83b6cfffc 100644 --- a/src/systems/signal/service/src/queues/send/intent.ts +++ b/src/systems/signal/service/src/queues/send/intent.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { eventFailedQueue, eventSucceededQueue } from './lifecycle'; diff --git a/src/systems/signal/service/src/queues/send/lifecycle.ts b/src/systems/signal/service/src/queues/send/lifecycle.ts index 98a4f3964..20e171d14 100644 --- a/src/systems/signal/service/src/queues/send/lifecycle.ts +++ b/src/systems/signal/service/src/queues/send/lifecycle.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { eventCleanupQueue } from './cleanup'; diff --git a/src/systems/signal/service/src/services/event.ts b/src/systems/signal/service/src/services/event.ts index 9e74bd318..1a08933f7 100644 --- a/src/systems/signal/service/src/services/event.ts +++ b/src/systems/signal/service/src/services/event.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Sender, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/signal/service/src/services/eventDeliveryAttempt.ts b/src/systems/signal/service/src/services/eventDeliveryAttempt.ts index c6794a439..0ac77321b 100644 --- a/src/systems/signal/service/src/services/eventDeliveryAttempt.ts +++ b/src/systems/signal/service/src/services/eventDeliveryAttempt.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { EventDeliveryAttemptStatus, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/signal/service/src/services/eventDeliveryIntent.ts b/src/systems/signal/service/src/services/eventDeliveryIntent.ts index 4fb0fdd6a..8c160651c 100644 --- a/src/systems/signal/service/src/services/eventDeliveryIntent.ts +++ b/src/systems/signal/service/src/services/eventDeliveryIntent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { EventDeliveryIntentStatus, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/signal/service/src/services/eventDestination.ts b/src/systems/signal/service/src/services/eventDestination.ts index 115ed9360..4534bab75 100644 --- a/src/systems/signal/service/src/services/eventDestination.ts +++ b/src/systems/signal/service/src/services/eventDestination.ts @@ -3,10 +3,10 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; -import { generateCustomId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { generateCustomId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { EventDestination, EventDestinationInstance, diff --git a/src/systems/signal/service/src/services/sender.ts b/src/systems/signal/service/src/services/sender.ts index ae74e0d8a..adce24d31 100644 --- a/src/systems/signal/service/src/services/sender.ts +++ b/src/systems/signal/service/src/services/sender.ts @@ -1,6 +1,6 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/signal/service/src/services/tenant.ts b/src/systems/signal/service/src/services/tenant.ts index d240b67fb..70f1e4649 100644 --- a/src/systems/signal/service/src/services/tenant.ts +++ b/src/systems/signal/service/src/services/tenant.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/signal/service/src/storage.ts b/src/systems/signal/service/src/storage.ts index a73b7b31f..c78c15d30 100644 --- a/src/systems/signal/service/src/storage.ts +++ b/src/systems/signal/service/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; diff --git a/src/systems/signal/service/src/test/client.ts b/src/systems/signal/service/src/test/client.ts index cb53af6b8..726cefe6e 100644 --- a/src/systems/signal/service/src/test/client.ts +++ b/src/systems/signal/service/src/test/client.ts @@ -1,6 +1,6 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { rpcMux } from '@lowerdeck/rpc-server'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { rpcMux } from '@mtsrc/rpc-server'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { SignalRPC, type SignalClient } from '../controllers'; type ClientOptsLike = { diff --git a/src/systems/signal/service/src/test/fixtures/eventDeliveryAttemptFixtures.ts b/src/systems/signal/service/src/test/fixtures/eventDeliveryAttemptFixtures.ts index bdc9a3926..be332c620 100644 --- a/src/systems/signal/service/src/test/fixtures/eventDeliveryAttemptFixtures.ts +++ b/src/systems/signal/service/src/test/fixtures/eventDeliveryAttemptFixtures.ts @@ -1,5 +1,5 @@ import type { EventDeliveryAttempt, PrismaClient } from '../../../prisma/generated/client'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { getId } from '../../id'; export const EventDeliveryAttemptFixtures = (db: PrismaClient) => { diff --git a/src/systems/signal/service/src/test/fixtures/eventDeliveryIntentFixtures.ts b/src/systems/signal/service/src/test/fixtures/eventDeliveryIntentFixtures.ts index 5cfa67c4e..ee75e68c0 100644 --- a/src/systems/signal/service/src/test/fixtures/eventDeliveryIntentFixtures.ts +++ b/src/systems/signal/service/src/test/fixtures/eventDeliveryIntentFixtures.ts @@ -1,5 +1,5 @@ import type { EventDeliveryIntent, PrismaClient } from '../../../prisma/generated/client'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { getId } from '../../id'; export const EventDeliveryIntentFixtures = (db: PrismaClient) => { diff --git a/src/systems/signal/service/src/test/fixtures/eventDestinationFixtures.ts b/src/systems/signal/service/src/test/fixtures/eventDestinationFixtures.ts index 092f5d1a8..c936f70f8 100644 --- a/src/systems/signal/service/src/test/fixtures/eventDestinationFixtures.ts +++ b/src/systems/signal/service/src/test/fixtures/eventDestinationFixtures.ts @@ -1,5 +1,5 @@ import { randomBytes } from 'crypto'; -import { generateCustomId } from '@lowerdeck/id'; +import { generateCustomId } from '@mtsrc/id'; import type { EventDestination, EventDestinationInstance, diff --git a/src/systems/signal/service/src/test/fixtures/eventFixtures.ts b/src/systems/signal/service/src/test/fixtures/eventFixtures.ts index a67c5e979..9c729b5c4 100644 --- a/src/systems/signal/service/src/test/fixtures/eventFixtures.ts +++ b/src/systems/signal/service/src/test/fixtures/eventFixtures.ts @@ -1,6 +1,6 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, Event } from '../../../prisma/generated/client'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { getId } from '../../id'; export const EventFixtures = (db: PrismaClient) => { diff --git a/src/systems/signal/service/src/test/fixtures/senderFixtures.ts b/src/systems/signal/service/src/test/fixtures/senderFixtures.ts index 8ef6277a8..ba692aef4 100644 --- a/src/systems/signal/service/src/test/fixtures/senderFixtures.ts +++ b/src/systems/signal/service/src/test/fixtures/senderFixtures.ts @@ -1,6 +1,6 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, Sender } from '../../../prisma/generated/client'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { getId } from '../../id'; export const SenderFixtures = (db: PrismaClient) => { diff --git a/src/systems/signal/service/src/test/fixtures/tenantFixtures.ts b/src/systems/signal/service/src/test/fixtures/tenantFixtures.ts index d8577bed8..13bbd61eb 100644 --- a/src/systems/signal/service/src/test/fixtures/tenantFixtures.ts +++ b/src/systems/signal/service/src/test/fixtures/tenantFixtures.ts @@ -1,7 +1,7 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, Tenant } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const TenantFixtures = (db: PrismaClient) => { const defaultTenant = async (overrides: Partial = {}): Promise => { diff --git a/src/systems/signal/service/src/test/setup.ts b/src/systems/signal/service/src/test/setup.ts index 2e1153390..792e3589f 100644 --- a/src/systems/signal/service/src/test/setup.ts +++ b/src/systems/signal/service/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/signal/service/src/worker.ts b/src/systems/signal/service/src/worker.ts index 61b91a403..2c2cfbda6 100644 --- a/src/systems/signal/service/src/worker.ts +++ b/src/systems/signal/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { cleanupQueues } from './queues/cleanup'; import { sendQueues } from './queues/send'; diff --git a/src/systems/signal/service/vitest.config.ts b/src/systems/signal/service/vitest.config.ts index 06d1b91b9..9bf80c914 100644 --- a/src/systems/signal/service/vitest.config.ts +++ b/src/systems/signal/service/vitest.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { const env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/signal/service/vitest.e2e.config.ts b/src/systems/signal/service/vitest.e2e.config.ts index 1b60a73d5..a31700405 100644 --- a/src/systems/signal/service/vitest.e2e.config.ts +++ b/src/systems/signal/service/vitest.e2e.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index 951b717d5..c567fe291 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -24,7 +24,7 @@ WORKDIR /app/src/systems/slates/apps/hub CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/slates/apps/hub/admin/src/hooks/client.ts b/src/systems/slates/apps/hub/admin/src/hooks/client.ts index a710f5e26..4e176fffc 100644 --- a/src/systems/slates/apps/hub/admin/src/hooks/client.ts +++ b/src/systems/slates/apps/hub/admin/src/hooks/client.ts @@ -1,5 +1,5 @@ -import { isServiceError } from '@lowerdeck/error'; -import { createClient } from '@lowerdeck/rpc-client'; +import { isServiceError } from '@mtsrc/error'; +import { createClient } from '@mtsrc/rpc-client'; import type { SlatesHubAdminClient } from '../../../src/apis/admin/controllers'; let endpoint = `${window.location.origin}/slates-hub-admin`; diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index dcc81c4bc..14ad4356c 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -36,8 +36,8 @@ "@vitejs/plugin-react": "^4.3.0", "@types/minimatch": "^6.0.0", "vite": "^5.4.0", - "@lowerdeck/testing-tools": "^1.0.1", - "vitest": "4.0.17" + "vitest": "4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -47,33 +47,6 @@ "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-key": "^1.0.3", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/shadow-id": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", "@metorial-io/data-hooks": "^1.0.1", "@metorial-io/layout": "^1.0.1", "@metorial-io/ui": "^1.0.0", @@ -108,6 +81,33 @@ "styled-components": "^6.1.13", "unzipper": "^0.12.3", "yaml": "^2.8.2", - "zod": "^4.2.1" + "zod": "^4.2.1", + "@mtsrc/api-key": "1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/slates/apps/hub/src/apis/admin/controllers/_app.ts b/src/systems/slates/apps/hub/src/apis/admin/controllers/_app.ts index 18fd0d55e..86b1ba316 100644 --- a/src/systems/slates/apps/hub/src/apis/admin/controllers/_app.ts +++ b/src/systems/slates/apps/hub/src/apis/admin/controllers/_app.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Group } from '@lowerdeck/rpc-server'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Group } from '@mtsrc/rpc-server'; import { adminAuthService } from '../../../services'; export let app = new Group(); diff --git a/src/systems/slates/apps/hub/src/apis/admin/controllers/auth.ts b/src/systems/slates/apps/hub/src/apis/admin/controllers/auth.ts index d66b9aeb6..df136d0a3 100644 --- a/src/systems/slates/apps/hub/src/apis/admin/controllers/auth.ts +++ b/src/systems/slates/apps/hub/src/apis/admin/controllers/auth.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { adminAuthService } from '../../../services'; import { app, authedApp } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/admin/controllers/index.ts b/src/systems/slates/apps/hub/src/apis/admin/controllers/index.ts index 0778cceef..c73402435 100644 --- a/src/systems/slates/apps/hub/src/apis/admin/controllers/index.ts +++ b/src/systems/slates/apps/hub/src/apis/admin/controllers/index.ts @@ -1,4 +1,4 @@ -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { authController } from './auth'; import { slateController } from './slate'; diff --git a/src/systems/slates/apps/hub/src/apis/admin/controllers/slate.ts b/src/systems/slates/apps/hub/src/apis/admin/controllers/slate.ts index 8a9faa192..32642d4dc 100644 --- a/src/systems/slates/apps/hub/src/apis/admin/controllers/slate.ts +++ b/src/systems/slates/apps/hub/src/apis/admin/controllers/slate.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slatePresenter } from '../../../presenters'; import { slateService } from '../../../services'; import { authedApp } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/admin/controllers/slateDeployment.ts b/src/systems/slates/apps/hub/src/apis/admin/controllers/slateDeployment.ts index 131b798e0..a869e557f 100644 --- a/src/systems/slates/apps/hub/src/apis/admin/controllers/slateDeployment.ts +++ b/src/systems/slates/apps/hub/src/apis/admin/controllers/slateDeployment.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { SlateDeploymentStatus } from '../../../../prisma/generated/client'; import { slateDeploymentPresenter } from '../../../presenters'; import { slateDeploymentService, slateService } from '../../../services'; diff --git a/src/systems/slates/apps/hub/src/apis/admin/controllers/slateDiscovery.ts b/src/systems/slates/apps/hub/src/apis/admin/controllers/slateDiscovery.ts index 8735cd2e4..ca573f351 100644 --- a/src/systems/slates/apps/hub/src/apis/admin/controllers/slateDiscovery.ts +++ b/src/systems/slates/apps/hub/src/apis/admin/controllers/slateDiscovery.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { SlateVersionDiscoveryStatus } from '../../../../prisma/generated/client'; import { slateVersionDiscoveryPresenter } from '../../../presenters/slateDiscovery'; import { slateDiscoveryBuildOutputPresenter } from '../../../presenters/slateDiscoveryBuildOutput'; diff --git a/src/systems/slates/apps/hub/src/apis/admin/controllers/slateEvent.ts b/src/systems/slates/apps/hub/src/apis/admin/controllers/slateEvent.ts index 3405cda7b..de3ee9a61 100644 --- a/src/systems/slates/apps/hub/src/apis/admin/controllers/slateEvent.ts +++ b/src/systems/slates/apps/hub/src/apis/admin/controllers/slateEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateEventPresenter } from '../../../presenters'; import { slateEventService, slateService } from '../../../services'; import { authedApp } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/admin/controllers/slateVersion.ts b/src/systems/slates/apps/hub/src/apis/admin/controllers/slateVersion.ts index 2f2ccc22d..2990d2af2 100644 --- a/src/systems/slates/apps/hub/src/apis/admin/controllers/slateVersion.ts +++ b/src/systems/slates/apps/hub/src/apis/admin/controllers/slateVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateVersionPresenter } from '../../../presenters'; import { slateVersionService } from '../../../services'; import { authedApp } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/admin/index.ts b/src/systems/slates/apps/hub/src/apis/admin/index.ts index 33491a469..5f26d6c66 100644 --- a/src/systems/slates/apps/hub/src/apis/admin/index.ts +++ b/src/systems/slates/apps/hub/src/apis/admin/index.ts @@ -1,4 +1,4 @@ -import { apiMux } from '@lowerdeck/api-mux'; +import { apiMux } from '@mtsrc/api-mux'; import { slatesHubAdminApi } from './controllers'; let adminDir = './dist/admin'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/_app.ts b/src/systems/slates/apps/hub/src/apis/internal/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/_app.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/slates/apps/hub/src/apis/internal/changeNotification.ts b/src/systems/slates/apps/hub/src/apis/internal/changeNotification.ts index 48d80dfdb..bb52deed0 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/changeNotification.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/changeNotification.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { changeNotificationPresenter } from '../../presenters'; import { changeNotificationService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/index.ts b/src/systems/slates/apps/hub/src/apis/internal/index.ts index 0a17a974e..9a926c3a9 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/index.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, type InferClient, rpcMux } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, type InferClient, rpcMux } from '@mtsrc/rpc-server'; import { app } from './_app'; import { changeNotificationController } from './changeNotification'; import { registryController } from './registry'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/registry.ts b/src/systems/slates/apps/hub/src/apis/internal/registry.ts index 4d0f4295c..f54216d20 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/registry.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/registry.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { registryPresenter } from '../../presenters'; import { registryService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/secret.ts b/src/systems/slates/apps/hub/src/apis/internal/secret.ts index 7b033c3c9..ade128f39 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/secret.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/secret.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { secretPresenter } from '../../presenters'; import { secretService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slate.ts b/src/systems/slates/apps/hub/src/apis/internal/slate.ts index e5bda1ad4..f7fcf5f9b 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slate.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slate.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slatePresenter } from '../../presenters'; import { slateService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateAuthConfig.ts b/src/systems/slates/apps/hub/src/apis/internal/slateAuthConfig.ts index f5c8d1c10..183b29ead 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateAuthConfig.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateAuthConfig.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateAuthConfigPresenter } from '../../presenters'; import { slateAuthConfigService, slateService, slateVersionService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateAuthConfigEvent.ts b/src/systems/slates/apps/hub/src/apis/internal/slateAuthConfigEvent.ts index 029ae2d0f..bf0d90050 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateAuthConfigEvent.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateAuthConfigEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateAuthConfigEventPresenter } from '../../presenters/slateAuthConfigEvent'; import { slateAuthConfigEventService } from '../../services/slateAuthConfigEvent'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateDeployment.ts b/src/systems/slates/apps/hub/src/apis/internal/slateDeployment.ts index 9b74f28c7..89c51c662 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateDeployment.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateDeployment.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { SlateDeploymentStatus } from '../../../prisma/generated/client'; import { slateDeploymentPresenter } from '../../presenters'; import { slateDeploymentService, slateService } from '../../services'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateDiscovery.ts b/src/systems/slates/apps/hub/src/apis/internal/slateDiscovery.ts index 8f53bbe0a..438ff1052 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateDiscovery.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateDiscovery.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { SlateVersionDiscoveryStatus } from '../../../prisma/generated/client'; import { slateVersionDiscoveryPresenter } from '../../presenters/slateDiscovery'; import { slateDiscoveryBuildOutputPresenter } from '../../presenters/slateDiscoveryBuildOutput'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateError.ts b/src/systems/slates/apps/hub/src/apis/internal/slateError.ts index a759d2835..39f44675e 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateError.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateError.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateErrorFullPresenter, slateErrorLitePresenter } from '../../presenters/slateError'; import { slateErrorService } from '../../services/slateError'; import { tenantService } from '../../services/tenant'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateEvent.ts b/src/systems/slates/apps/hub/src/apis/internal/slateEvent.ts index 5bc94cd24..f9032dfaf 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateEvent.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateEventPresenter } from '../../presenters'; import { slateEventService, slateService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateInstance.ts b/src/systems/slates/apps/hub/src/apis/internal/slateInstance.ts index d71e5db1a..47733e9f6 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateInstance.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateInstance.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateInstancePresenter } from '../../presenters'; import { slateInstanceService, slateService, slateVersionService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateInvocation.ts b/src/systems/slates/apps/hub/src/apis/internal/slateInvocation.ts index dc2b2e139..a4260a003 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateInvocation.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateInvocation.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { slateInvocationPresenter } from '../../presenters'; import { slateInvocationService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateOAuthCredentials.ts b/src/systems/slates/apps/hub/src/apis/internal/slateOAuthCredentials.ts index c109ade81..2a061b09a 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateOAuthCredentials.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateOAuthCredentials.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateOAuthCredentialsPresenter } from '../../presenters'; import { slateOAuthCredentialsService, slateService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateOAuthSetup.ts b/src/systems/slates/apps/hub/src/apis/internal/slateOAuthSetup.ts index 56cbac0a8..1a01c7188 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateOAuthSetup.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateOAuthSetup.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateInstanceOAuthSetupPresenter } from '../../presenters'; import { slateInstanceOAuthSetupLogsPresenter } from '../../presenters/slateOAuthSetupLogs'; import { diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateOAuthSetupEvent.ts b/src/systems/slates/apps/hub/src/apis/internal/slateOAuthSetupEvent.ts index 811258571..f414b815c 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateOAuthSetupEvent.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateOAuthSetupEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateOAuthSetupEventPresenter } from '../../presenters/slateOAuthSetupEvent'; import { slateOAuthSetupEventService } from '../../services/slateOAuthSetupEvent'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateSession.ts b/src/systems/slates/apps/hub/src/apis/internal/slateSession.ts index e6c5c6c49..8a805c984 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateSession.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateSession.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateSessionPresenter } from '../../presenters'; import { slateInstanceService, diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateSessionToolCall.ts b/src/systems/slates/apps/hub/src/apis/internal/slateSessionToolCall.ts index 906fc9a5a..412b1ad9a 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateSessionToolCall.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateSessionToolCall.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateSessionToolCallLogsPresenter, slateSessionToolCallPresenter diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateSpecification.ts b/src/systems/slates/apps/hub/src/apis/internal/slateSpecification.ts index 50246f88b..6e72ca239 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateSpecification.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateSpecification.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateSpecificationPresenter } from '../../presenters'; import { slateSpecificationService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateSpecificationChange.ts b/src/systems/slates/apps/hub/src/apis/internal/slateSpecificationChange.ts index 9985eea52..efec4a950 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateSpecificationChange.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateSpecificationChange.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateSpecificationChangePresenter } from '../../presenters'; import { slateSpecificationChangeService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerDelivery.ts b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerDelivery.ts index 3d3e3ed10..831dcad82 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerDelivery.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerDelivery.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateTriggerDeliveryService } from '../../services'; import { app } from './_app'; import { tenantApp } from './tenant'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerDestination.ts b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerDestination.ts index 9f521c13d..4afc733a4 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerDestination.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerDestination.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateTriggerDestinationPresenter } from '../../presenters'; import { slateTriggerDestinationService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerEvent.ts b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerEvent.ts index 946b99cf5..fb2230c05 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerEvent.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateTriggerEventPresenter } from '../../presenters'; import { slateTriggerEventService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerEventInput.ts b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerEventInput.ts index e24f9af6f..a2738f875 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerEventInput.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerEventInput.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateTriggerEventInputPresenter } from '../../presenters/slateTriggerEventInput'; import { slateTriggerEventInputService } from '../../services/slateTriggerEventInput'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerInvocation.ts b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerInvocation.ts index 923bef46b..3c8085b77 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerInvocation.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerInvocation.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateTriggerInvocationPresenter } from '../../presenters'; import { slateTriggerInvocationService } from '../../services'; import { SlateTriggerInvocationType } from '../../../prisma/generated/client'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerReceiver.ts b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerReceiver.ts index 85df6c89f..28ccfb12c 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateTriggerReceiver.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateTriggerReceiver.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import type { Tenant } from '../../../prisma/generated/client'; import { slateTriggerReceiverPresenter } from '../../presenters'; import { diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateVersion.ts b/src/systems/slates/apps/hub/src/apis/internal/slateVersion.ts index c203e8167..29e20bb3a 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateVersion.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateVersionPresenter } from '../../presenters'; import { slateVersionService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/slateVersionDiscovery.ts b/src/systems/slates/apps/hub/src/apis/internal/slateVersionDiscovery.ts index 42be5bd67..26c82ad59 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/slateVersionDiscovery.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/slateVersionDiscovery.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { slateVersionDiscoveryPresenter } from '../../presenters'; import { slateVersionDiscoveryService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/internal/tenant.ts b/src/systems/slates/apps/hub/src/apis/internal/tenant.ts index dde5ff497..b0ac808da 100644 --- a/src/systems/slates/apps/hub/src/apis/internal/tenant.ts +++ b/src/systems/slates/apps/hub/src/apis/internal/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { tenantPresenter } from '../../presenters'; import { tenantService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/hub/src/apis/public/index.ts b/src/systems/slates/apps/hub/src/apis/public/index.ts index 129cbc451..0b7f4db9f 100644 --- a/src/systems/slates/apps/hub/src/apis/public/index.ts +++ b/src/systems/slates/apps/hub/src/apis/public/index.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { createHono } from '@lowerdeck/hono'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { createHono } from '@mtsrc/hono'; import { deleteCookie, getCookie, setCookie } from 'hono/cookie'; import { env } from '../../env'; import { slateOAuthHandlerService } from '../../services/slateOAuthHandler'; diff --git a/src/systems/slates/apps/hub/src/aresClient.ts b/src/systems/slates/apps/hub/src/aresClient.ts index 2027408ff..6224f1af6 100644 --- a/src/systems/slates/apps/hub/src/aresClient.ts +++ b/src/systems/slates/apps/hub/src/aresClient.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { delay } from '@mtsrc/delay'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { createAresInternalClient } from '@metorial-platform-systems/ares-client'; import { env } from './env'; diff --git a/src/systems/slates/apps/hub/src/encryption.ts b/src/systems/slates/apps/hub/src/encryption.ts index a5584713b..804ef58e6 100644 --- a/src/systems/slates/apps/hub/src/encryption.ts +++ b/src/systems/slates/apps/hub/src/encryption.ts @@ -1,4 +1,4 @@ -import { Encryption } from '@lowerdeck/encryption'; +import { Encryption } from '@mtsrc/encryption'; import { env } from './env'; export let encryption = new Encryption(env.encryption.ENCRYPTION_KEY); diff --git a/src/systems/slates/apps/hub/src/endpoints.ts b/src/systems/slates/apps/hub/src/endpoints.ts index 118b12b00..0c08ab297 100644 --- a/src/systems/slates/apps/hub/src/endpoints.ts +++ b/src/systems/slates/apps/hub/src/endpoints.ts @@ -1,4 +1,4 @@ -import { withTracingSuppressed } from '@lowerdeck/telemetry'; +import { withTracingSuppressed } from '@mtsrc/telemetry'; import { RedisClient } from 'bun'; import { adminApi } from './apis/admin'; import { slatesHubApi } from './apis/internal'; diff --git a/src/systems/slates/apps/hub/src/env.ts b/src/systems/slates/apps/hub/src/env.ts index abcab9d69..4968243fb 100644 --- a/src/systems/slates/apps/hub/src/env.ts +++ b/src/systems/slates/apps/hub/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/slates/apps/hub/src/functionBay.ts b/src/systems/slates/apps/hub/src/functionBay.ts index 988a4ac1e..36af35481 100644 --- a/src/systems/slates/apps/hub/src/functionBay.ts +++ b/src/systems/slates/apps/hub/src/functionBay.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { delay } from '@mtsrc/delay'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { createFunctionBayClient } from '@metorial-platform-systems/function-bay-client'; import { db } from './db'; import { env } from './env'; diff --git a/src/systems/slates/apps/hub/src/hub.ts b/src/systems/slates/apps/hub/src/hub.ts index dcab1cdca..e16859453 100644 --- a/src/systems/slates/apps/hub/src/hub.ts +++ b/src/systems/slates/apps/hub/src/hub.ts @@ -1,5 +1,5 @@ -import { generatePlainId } from '@lowerdeck/id'; -import { slugify } from '@lowerdeck/slugify'; +import { generatePlainId } from '@mtsrc/id'; +import { slugify } from '@mtsrc/slugify'; import { db } from './db'; import { env } from './env'; import { getId } from './id'; diff --git a/src/systems/slates/apps/hub/src/id.ts b/src/systems/slates/apps/hub/src/id.ts index afdd26299..9b9ee893f 100644 --- a/src/systems/slates/apps/hub/src/id.ts +++ b/src/systems/slates/apps/hub/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ hub: idType.sorted('shhub'), diff --git a/src/systems/slates/apps/hub/src/instrument.ts b/src/systems/slates/apps/hub/src/instrument.ts index a22f3467c..1bfdf0e79 100644 --- a/src/systems/slates/apps/hub/src/instrument.ts +++ b/src/systems/slates/apps/hub/src/instrument.ts @@ -1,5 +1,5 @@ -import { setSentry } from '@lowerdeck/sentry'; -import { initTelemetry } from '@lowerdeck/telemetry'; +import { setSentry } from '@mtsrc/sentry'; +import { initTelemetry } from '@mtsrc/telemetry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/slates/apps/hub/src/keys.ts b/src/systems/slates/apps/hub/src/keys.ts index 926d44361..ef6f570e8 100644 --- a/src/systems/slates/apps/hub/src/keys.ts +++ b/src/systems/slates/apps/hub/src/keys.ts @@ -1,4 +1,4 @@ -import { createApiKeyGenerator } from '@lowerdeck/api-key'; +import { createApiKeyGenerator } from '@mtsrc/api-key'; export let apiKeys = createApiKeyGenerator( { utok: 'user_auth_token', rtok: 'reader_token' }, diff --git a/src/systems/slates/apps/hub/src/lib/invocation/stack.ts b/src/systems/slates/apps/hub/src/lib/invocation/stack.ts index 2c027dadf..2f8869439 100644 --- a/src/systems/slates/apps/hub/src/lib/invocation/stack.ts +++ b/src/systems/slates/apps/hub/src/lib/invocation/stack.ts @@ -1,8 +1,8 @@ -import { delay } from '@lowerdeck/delay'; -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { getSentry } from '@lowerdeck/sentry'; -import { serialize } from '@lowerdeck/serialize'; +import { delay } from '@mtsrc/delay'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { getSentry } from '@mtsrc/sentry'; +import { serialize } from '@mtsrc/serialize'; import type { SlatesParticipant, slatesRequestsByMethod, diff --git a/src/systems/slates/apps/hub/src/lib/invocation/store.ts b/src/systems/slates/apps/hub/src/lib/invocation/store.ts index b5040bcb8..297935119 100644 --- a/src/systems/slates/apps/hub/src/lib/invocation/store.ts +++ b/src/systems/slates/apps/hub/src/lib/invocation/store.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { getSentry } from '@lowerdeck/sentry'; +import { delay } from '@mtsrc/delay'; +import { getSentry } from '@mtsrc/sentry'; import PQueue from 'p-queue'; import type { SlateInvocation } from '../../../prisma/generated/client'; import { db } from '../../db'; diff --git a/src/systems/slates/apps/hub/src/lib/specificationHash.ts b/src/systems/slates/apps/hub/src/lib/specificationHash.ts index 04dc3a904..0fe2ddb7a 100644 --- a/src/systems/slates/apps/hub/src/lib/specificationHash.ts +++ b/src/systems/slates/apps/hub/src/lib/specificationHash.ts @@ -1,5 +1,5 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; import type { SlateAuthenticationMethod, SlatesAction } from '@slates/proto'; export let dedupeDiscoveredItems = ( diff --git a/src/systems/slates/apps/hub/src/lib/validateHttpUrl.ts b/src/systems/slates/apps/hub/src/lib/validateHttpUrl.ts index 8dcdcdcc4..9f8677197 100644 --- a/src/systems/slates/apps/hub/src/lib/validateHttpUrl.ts +++ b/src/systems/slates/apps/hub/src/lib/validateHttpUrl.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; export const assertPublicHttpUrl = async (rawUrl: string) => { let parsed: URL; diff --git a/src/systems/slates/apps/hub/src/lib/validateJsonSchema.ts b/src/systems/slates/apps/hub/src/lib/validateJsonSchema.ts index 4bcaf91fb..df84ef675 100644 --- a/src/systems/slates/apps/hub/src/lib/validateJsonSchema.ts +++ b/src/systems/slates/apps/hub/src/lib/validateJsonSchema.ts @@ -1,5 +1,5 @@ -import { ServiceError, validationError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; +import { ServiceError, validationError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; import z from 'zod'; let Sentry = getSentry(); diff --git a/src/systems/slates/apps/hub/src/lib/validator.ts b/src/systems/slates/apps/hub/src/lib/validator.ts index 2dd8fab57..6cefacc76 100644 --- a/src/systems/slates/apps/hub/src/lib/validator.ts +++ b/src/systems/slates/apps/hub/src/lib/validator.ts @@ -1,5 +1,5 @@ import { zValidator } from '@hono/zod-validator'; -import { validationError } from '@lowerdeck/error'; +import { validationError } from '@mtsrc/error'; export let useValidation = ((target: any, schema: any) => zValidator(target, schema, (data, c) => { if (!data.success) diff --git a/src/systems/slates/apps/hub/src/presenters/slateAuthConfigEvent.ts b/src/systems/slates/apps/hub/src/presenters/slateAuthConfigEvent.ts index f5c180b1b..2ecbdeaa3 100644 --- a/src/systems/slates/apps/hub/src/presenters/slateAuthConfigEvent.ts +++ b/src/systems/slates/apps/hub/src/presenters/slateAuthConfigEvent.ts @@ -1,4 +1,4 @@ -import { shadowId } from '@lowerdeck/shadow-id'; +import { shadowId } from '@mtsrc/shadow-id'; import type { SlateAttachment, SlateAuthConfig, diff --git a/src/systems/slates/apps/hub/src/presenters/slateInvocation.ts b/src/systems/slates/apps/hub/src/presenters/slateInvocation.ts index 97c0c22e0..9dc57ca2b 100644 --- a/src/systems/slates/apps/hub/src/presenters/slateInvocation.ts +++ b/src/systems/slates/apps/hub/src/presenters/slateInvocation.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import type { SlateAttachment, SlateDeployment, diff --git a/src/systems/slates/apps/hub/src/presenters/slateOAuthSetupLogs.ts b/src/systems/slates/apps/hub/src/presenters/slateOAuthSetupLogs.ts index 622031ebd..86c3417ff 100644 --- a/src/systems/slates/apps/hub/src/presenters/slateOAuthSetupLogs.ts +++ b/src/systems/slates/apps/hub/src/presenters/slateOAuthSetupLogs.ts @@ -1,4 +1,4 @@ -import { shadowId } from '@lowerdeck/shadow-id'; +import { shadowId } from '@mtsrc/shadow-id'; import type { Slate, SlateAuthConfig, diff --git a/src/systems/slates/apps/hub/src/presenters/slateVersion.ts b/src/systems/slates/apps/hub/src/presenters/slateVersion.ts index e87ab5301..6dc508e53 100644 --- a/src/systems/slates/apps/hub/src/presenters/slateVersion.ts +++ b/src/systems/slates/apps/hub/src/presenters/slateVersion.ts @@ -1,4 +1,4 @@ -import { shadowId } from '@lowerdeck/shadow-id'; +import { shadowId } from '@mtsrc/shadow-id'; import type { Slate, SlateSpecification, SlateVersion } from '../../prisma/generated/client'; export let slateVersionPresenter = ( diff --git a/src/systems/slates/apps/hub/src/queues/attachment/cleanup.ts b/src/systems/slates/apps/hub/src/queues/attachment/cleanup.ts index 23b369023..2422db704 100644 --- a/src/systems/slates/apps/hub/src/queues/attachment/cleanup.ts +++ b/src/systems/slates/apps/hub/src/queues/attachment/cleanup.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getStoredAttachmentsStorageKey } from '../../lib/invocation/store'; diff --git a/src/systems/slates/apps/hub/src/queues/attachment/index.ts b/src/systems/slates/apps/hub/src/queues/attachment/index.ts index 343ba4bca..851780ae6 100644 --- a/src/systems/slates/apps/hub/src/queues/attachment/index.ts +++ b/src/systems/slates/apps/hub/src/queues/attachment/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { slateAttachmentCleanupCron, slateAttachmentCleanupManyQueueProcessor, diff --git a/src/systems/slates/apps/hub/src/queues/cron/cleanup.ts b/src/systems/slates/apps/hub/src/queues/cron/cleanup.ts index eade5dc60..dc1000f89 100644 --- a/src/systems/slates/apps/hub/src/queues/cron/cleanup.ts +++ b/src/systems/slates/apps/hub/src/queues/cron/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subDays } from 'date-fns'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/slates/apps/hub/src/queues/deployment/deploy.ts b/src/systems/slates/apps/hub/src/queues/deployment/deploy.ts index f4342ad5e..307404f8d 100644 --- a/src/systems/slates/apps/hub/src/queues/deployment/deploy.ts +++ b/src/systems/slates/apps/hub/src/queues/deployment/deploy.ts @@ -1,7 +1,7 @@ -import { createCron } from '@lowerdeck/cron'; -import { generateCode } from '@lowerdeck/id'; -import { createLock } from '@lowerdeck/lock'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { generateCode } from '@mtsrc/id'; +import { createLock } from '@mtsrc/lock'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { subDays } from 'date-fns'; import SuperJSON from 'superjson'; import unzipper from 'unzipper'; diff --git a/src/systems/slates/apps/hub/src/queues/deployment/index.ts b/src/systems/slates/apps/hub/src/queues/deployment/index.ts index 8b98370c8..23b9c19f3 100644 --- a/src/systems/slates/apps/hub/src/queues/deployment/index.ts +++ b/src/systems/slates/apps/hub/src/queues/deployment/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { deploySlateVersionCompletedQueueProcessor, deploySlateVersionFailedQueueProcessor, diff --git a/src/systems/slates/apps/hub/src/queues/deployment/packageFiles.test.ts b/src/systems/slates/apps/hub/src/queues/deployment/packageFiles.test.ts index 4af50a37b..c87075240 100644 --- a/src/systems/slates/apps/hub/src/queues/deployment/packageFiles.test.ts +++ b/src/systems/slates/apps/hub/src/queues/deployment/packageFiles.test.ts @@ -46,7 +46,7 @@ describe('buildSlateDeploymentFiles', () => { '@slates/provider-handler': 'latest', '@slates/proto': 'latest', slates: 'latest', - '@lowerdeck/serialize': 'latest' + '@mtsrc/serialize': 'latest' }); let functionBayJson = JSON.parse(getFile(result.files, 'function-bay.json').content); diff --git a/src/systems/slates/apps/hub/src/queues/deployment/packageFiles.ts b/src/systems/slates/apps/hub/src/queues/deployment/packageFiles.ts index 8346de59e..7f2a1f224 100644 --- a/src/systems/slates/apps/hub/src/queues/deployment/packageFiles.ts +++ b/src/systems/slates/apps/hub/src/queues/deployment/packageFiles.ts @@ -8,7 +8,7 @@ let wrapperDependencies = { '@slates/provider-handler': 'latest', '@slates/proto': 'latest', slates: 'latest', - '@lowerdeck/serialize': 'latest' + '@mtsrc/serialize': 'latest' }; let entrypointExtensions = ['.ts', '.js', '.cjs', '.mjs']; let prebuiltEntrypoints = ['dist/index.js', 'dist/index.cjs', 'dist/index.mjs']; @@ -123,7 +123,7 @@ export let buildSlateDeploymentFiles = (files: DeploymentArchiveFile[]) => { import { provider } from './${slateEntrypoint}'; import { createProviderHandler } from '@slates/provider-handler'; import { SlatesProviderProtoHandlerManager } from '@slates/proto'; - import { serialize } from '@lowerdeck/serialize'; + import { serialize } from '@mtsrc/serialize'; let handler = createProviderHandler(provider, [ e => e.forEach(e => console.log(e.type.toUpperCase(), e.message)) diff --git a/src/systems/slates/apps/hub/src/queues/discovery/discover.ts b/src/systems/slates/apps/hub/src/queues/discovery/discover.ts index 75e2203a5..b01cf4d23 100644 --- a/src/systems/slates/apps/hub/src/queues/discovery/discover.ts +++ b/src/systems/slates/apps/hub/src/queues/discovery/discover.ts @@ -1,6 +1,6 @@ -import { createLock } from '@lowerdeck/lock'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { createLock } from '@mtsrc/lock'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import type { SlateAuthenticationMethod, SlatesAction } from '@slates/proto'; import { differenceInMinutes } from 'date-fns'; import semver from 'semver'; diff --git a/src/systems/slates/apps/hub/src/queues/discovery/index.ts b/src/systems/slates/apps/hub/src/queues/discovery/index.ts index 5372ef0b6..2b8a52409 100644 --- a/src/systems/slates/apps/hub/src/queues/discovery/index.ts +++ b/src/systems/slates/apps/hub/src/queues/discovery/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { discoverSlateErrorQueueProcessor, discoverSlateQueueProcessor } from './discover'; import { rediscoverSlateQueueProcessor, diff --git a/src/systems/slates/apps/hub/src/queues/discovery/rediscover.ts b/src/systems/slates/apps/hub/src/queues/discovery/rediscover.ts index 8a5438815..eec6e7882 100644 --- a/src/systems/slates/apps/hub/src/queues/discovery/rediscover.ts +++ b/src/systems/slates/apps/hub/src/queues/discovery/rediscover.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { subDays } from 'date-fns'; import { db } from '../../db'; import { env } from '../../env'; diff --git a/src/systems/slates/apps/hub/src/queues/error/index.ts b/src/systems/slates/apps/hub/src/queues/error/index.ts index 24ed26e07..8e35969ff 100644 --- a/src/systems/slates/apps/hub/src/queues/error/index.ts +++ b/src/systems/slates/apps/hub/src/queues/error/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { recordSlateErrorQueueProcessor } from './record'; export let errorQueues = combineQueueProcessors([recordSlateErrorQueueProcessor]); diff --git a/src/systems/slates/apps/hub/src/queues/error/record.ts b/src/systems/slates/apps/hub/src/queues/error/record.ts index 5d8fad7d7..81c54453c 100644 --- a/src/systems/slates/apps/hub/src/queues/error/record.ts +++ b/src/systems/slates/apps/hub/src/queues/error/record.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import type { SlateErrorType } from '../../../prisma/generated/client'; import { env } from '../../env'; import { slateErrorService } from '../../services/slateError'; diff --git a/src/systems/slates/apps/hub/src/queues/instance/configChanged.ts b/src/systems/slates/apps/hub/src/queues/instance/configChanged.ts index e7f1764b1..84092444c 100644 --- a/src/systems/slates/apps/hub/src/queues/instance/configChanged.ts +++ b/src/systems/slates/apps/hub/src/queues/instance/configChanged.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { slateErrorService, slateInvocationService } from '../../services'; diff --git a/src/systems/slates/apps/hub/src/queues/instance/credentials.ts b/src/systems/slates/apps/hub/src/queues/instance/credentials.ts index fdb412aca..2bee221c3 100644 --- a/src/systems/slates/apps/hub/src/queues/instance/credentials.ts +++ b/src/systems/slates/apps/hub/src/queues/instance/credentials.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId } from '../../id'; diff --git a/src/systems/slates/apps/hub/src/queues/instance/index.ts b/src/systems/slates/apps/hub/src/queues/instance/index.ts index 4123b7ff0..5a93d8181 100644 --- a/src/systems/slates/apps/hub/src/queues/instance/index.ts +++ b/src/systems/slates/apps/hub/src/queues/instance/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { slateInstanceConfigChangedQueueProcessor } from './configChanged'; import { createCredentialsUpdateEventQueueProcessor, diff --git a/src/systems/slates/apps/hub/src/queues/instance/processAuth.ts b/src/systems/slates/apps/hub/src/queues/instance/processAuth.ts index 513453e3d..5131285f3 100644 --- a/src/systems/slates/apps/hub/src/queues/instance/processAuth.ts +++ b/src/systems/slates/apps/hub/src/queues/instance/processAuth.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { extractExpiresAt } from '../../lib/extractExpiresAt'; diff --git a/src/systems/slates/apps/hub/src/queues/instance/reconcileEventIds.ts b/src/systems/slates/apps/hub/src/queues/instance/reconcileEventIds.ts index 14d6d0061..d903904b5 100644 --- a/src/systems/slates/apps/hub/src/queues/instance/reconcileEventIds.ts +++ b/src/systems/slates/apps/hub/src/queues/instance/reconcileEventIds.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { ID } from '../../id'; diff --git a/src/systems/slates/apps/hub/src/queues/instance/updateProfile.ts b/src/systems/slates/apps/hub/src/queues/instance/updateProfile.ts index 527d106ad..02d98f6da 100644 --- a/src/systems/slates/apps/hub/src/queues/instance/updateProfile.ts +++ b/src/systems/slates/apps/hub/src/queues/instance/updateProfile.ts @@ -1,5 +1,5 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import { db } from '../../db'; import { env } from '../../env'; import { secretService, slateErrorService, slateInvocationService } from '../../services'; diff --git a/src/systems/slates/apps/hub/src/queues/registry/cron.ts b/src/systems/slates/apps/hub/src/queues/registry/cron.ts index 3fb7e37c5..13540608f 100644 --- a/src/systems/slates/apps/hub/src/queues/registry/cron.ts +++ b/src/systems/slates/apps/hub/src/queues/registry/cron.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { syncRegistryQueue } from './syncRegistry'; diff --git a/src/systems/slates/apps/hub/src/queues/registry/index.ts b/src/systems/slates/apps/hub/src/queues/registry/index.ts index ea6e6d9e7..536d7d036 100644 --- a/src/systems/slates/apps/hub/src/queues/registry/index.ts +++ b/src/systems/slates/apps/hub/src/queues/registry/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { registrySyncCron, syncRegistryAllQueueProcessor } from './cron'; import { syncRegistryQueueProcessor } from './syncRegistry'; import { deploySlateAfterSyncQueueProcessor, syncSlateQueueProcessor } from './syncSlate'; diff --git a/src/systems/slates/apps/hub/src/queues/registry/syncRegistry.ts b/src/systems/slates/apps/hub/src/queues/registry/syncRegistry.ts index a5c70aea3..16c1cfbf6 100644 --- a/src/systems/slates/apps/hub/src/queues/registry/syncRegistry.ts +++ b/src/systems/slates/apps/hub/src/queues/registry/syncRegistry.ts @@ -1,5 +1,5 @@ -import { createLock } from '@lowerdeck/lock'; -import { createQueue } from '@lowerdeck/queue'; +import { createLock } from '@mtsrc/lock'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId } from '../../id'; diff --git a/src/systems/slates/apps/hub/src/queues/registry/syncSlate.ts b/src/systems/slates/apps/hub/src/queues/registry/syncSlate.ts index d9d2887de..91ceaac99 100644 --- a/src/systems/slates/apps/hub/src/queues/registry/syncSlate.ts +++ b/src/systems/slates/apps/hub/src/queues/registry/syncSlate.ts @@ -1,6 +1,6 @@ -import { generateCode } from '@lowerdeck/id'; -import { createLock } from '@lowerdeck/lock'; -import { createQueue } from '@lowerdeck/queue'; +import { generateCode } from '@mtsrc/id'; +import { createLock } from '@mtsrc/lock'; +import { createQueue } from '@mtsrc/queue'; import { db } from '../../db'; import { env } from '../../env'; import { getId, ID, snowflake } from '../../id'; diff --git a/src/systems/slates/apps/hub/src/queues/retention/cleanup.ts b/src/systems/slates/apps/hub/src/queues/retention/cleanup.ts index 4d3027f49..d886cd23a 100644 --- a/src/systems/slates/apps/hub/src/queues/retention/cleanup.ts +++ b/src/systems/slates/apps/hub/src/queues/retention/cleanup.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { SlateDeploymentStatus, SlateTriggerEventInputStatus diff --git a/src/systems/slates/apps/hub/src/queues/retention/index.ts b/src/systems/slates/apps/hub/src/queues/retention/index.ts index 087f04a7d..c7ca1d3a4 100644 --- a/src/systems/slates/apps/hub/src/queues/retention/index.ts +++ b/src/systems/slates/apps/hub/src/queues/retention/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { slatesRetentionCron, slatesRetentionStorageCleanupQueueProcessor, diff --git a/src/systems/slates/apps/hub/src/queues/trigger/archive.ts b/src/systems/slates/apps/hub/src/queues/trigger/archive.ts index 632a18e2e..a4451731e 100644 --- a/src/systems/slates/apps/hub/src/queues/trigger/archive.ts +++ b/src/systems/slates/apps/hub/src/queues/trigger/archive.ts @@ -1,5 +1,5 @@ -import { QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import { SlateTriggerEventInputStatus } from '../../../prisma/generated/client'; import { db } from '../../db'; import { diff --git a/src/systems/slates/apps/hub/src/queues/trigger/eventQueues.ts b/src/systems/slates/apps/hub/src/queues/trigger/eventQueues.ts index 21d48f90d..d445ed6f1 100644 --- a/src/systems/slates/apps/hub/src/queues/trigger/eventQueues.ts +++ b/src/systems/slates/apps/hub/src/queues/trigger/eventQueues.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; export let slateTriggerEventProcessQueue = createQueue<{ eventInputId: string }>({ diff --git a/src/systems/slates/apps/hub/src/queues/trigger/index.ts b/src/systems/slates/apps/hub/src/queues/trigger/index.ts index 0c495cecd..36a3f2da5 100644 --- a/src/systems/slates/apps/hub/src/queues/trigger/index.ts +++ b/src/systems/slates/apps/hub/src/queues/trigger/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { slateTriggerPollQueueProcessor, slateTriggerPollingBatchQueueProcessor, diff --git a/src/systems/slates/apps/hub/src/queues/trigger/poll.ts b/src/systems/slates/apps/hub/src/queues/trigger/poll.ts index 2469b4767..5ad39682c 100644 --- a/src/systems/slates/apps/hub/src/queues/trigger/poll.ts +++ b/src/systems/slates/apps/hub/src/queues/trigger/poll.ts @@ -1,7 +1,7 @@ -import { createCron } from '@lowerdeck/cron'; -import { createLock } from '@lowerdeck/lock'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { createCron } from '@mtsrc/cron'; +import { createLock } from '@mtsrc/lock'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import { db } from '../../db'; import { env } from '../../env'; import { slateTriggerReceiverService } from '../../services/slateTriggerReceiver'; diff --git a/src/systems/slates/apps/hub/src/queues/trigger/process.ts b/src/systems/slates/apps/hub/src/queues/trigger/process.ts index 22dc75034..ee1464faf 100644 --- a/src/systems/slates/apps/hub/src/queues/trigger/process.ts +++ b/src/systems/slates/apps/hub/src/queues/trigger/process.ts @@ -1,5 +1,5 @@ -import { QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import { db } from '../../db'; import { slateTriggerReceiverService } from '../../services/slateTriggerReceiver'; import { slateTriggerEventProcessQueue } from './eventQueues'; diff --git a/src/systems/slates/apps/hub/src/queues/trigger/register.ts b/src/systems/slates/apps/hub/src/queues/trigger/register.ts index b62c88aa7..ab8198b54 100644 --- a/src/systems/slates/apps/hub/src/queues/trigger/register.ts +++ b/src/systems/slates/apps/hub/src/queues/trigger/register.ts @@ -1,5 +1,5 @@ -import { QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import { db } from '../../db'; import { slateTriggerReceiverService } from '../../services/slateTriggerReceiver'; import { diff --git a/src/systems/slates/apps/hub/src/queues/trigger/send.ts b/src/systems/slates/apps/hub/src/queues/trigger/send.ts index 7af73e863..582817862 100644 --- a/src/systems/slates/apps/hub/src/queues/trigger/send.ts +++ b/src/systems/slates/apps/hub/src/queues/trigger/send.ts @@ -1,5 +1,5 @@ -import { QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import { db } from '../../db'; import { slateTriggerReceiverService } from '../../services/slateTriggerReceiver'; import { slateTriggerEventSendQueue } from './eventQueues'; diff --git a/src/systems/slates/apps/hub/src/queues/trigger/webhook.ts b/src/systems/slates/apps/hub/src/queues/trigger/webhook.ts index d57a08083..6feace484 100644 --- a/src/systems/slates/apps/hub/src/queues/trigger/webhook.ts +++ b/src/systems/slates/apps/hub/src/queues/trigger/webhook.ts @@ -1,6 +1,6 @@ -import { createLock } from '@lowerdeck/lock'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; -import { getSentry } from '@lowerdeck/sentry'; +import { createLock } from '@mtsrc/lock'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; +import { getSentry } from '@mtsrc/sentry'; import { db } from '../../db'; import { env } from '../../env'; import { diff --git a/src/systems/slates/apps/hub/src/registry.ts b/src/systems/slates/apps/hub/src/registry.ts index 692d0ac5c..4821079aa 100644 --- a/src/systems/slates/apps/hub/src/registry.ts +++ b/src/systems/slates/apps/hub/src/registry.ts @@ -1,6 +1,6 @@ -import { ServiceError, validationError } from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; -import { v } from '@lowerdeck/validation'; +import { ServiceError, validationError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { v } from '@mtsrc/validation'; import { addMinutes } from 'date-fns'; import { hc } from 'hono/client'; import type { Registry } from '../prisma/generated/client'; diff --git a/src/systems/slates/apps/hub/src/services/adminAuth.ts b/src/systems/slates/apps/hub/src/services/adminAuth.ts index 32a6a28c8..1cb4f16a2 100644 --- a/src/systems/slates/apps/hub/src/services/adminAuth.ts +++ b/src/systems/slates/apps/hub/src/services/adminAuth.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { addHours } from 'date-fns'; import { aresAdminApp, aresClient } from '../aresClient'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/changeNotification.ts b/src/systems/slates/apps/hub/src/services/changeNotification.ts index 9c07aa5f6..92de7e145 100644 --- a/src/systems/slates/apps/hub/src/services/changeNotification.ts +++ b/src/systems/slates/apps/hub/src/services/changeNotification.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; let include = {}; diff --git a/src/systems/slates/apps/hub/src/services/registry.ts b/src/systems/slates/apps/hub/src/services/registry.ts index c60b4209e..e08abe25b 100644 --- a/src/systems/slates/apps/hub/src/services/registry.ts +++ b/src/systems/slates/apps/hub/src/services/registry.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { upsertRegistry } from '../registry'; diff --git a/src/systems/slates/apps/hub/src/services/secret.ts b/src/systems/slates/apps/hub/src/services/secret.ts index a73fdb965..9b17a868d 100644 --- a/src/systems/slates/apps/hub/src/services/secret.ts +++ b/src/systems/slates/apps/hub/src/services/secret.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Secret, SecretType, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { encryption } from '../encryption'; diff --git a/src/systems/slates/apps/hub/src/services/slate.ts b/src/systems/slates/apps/hub/src/services/slate.ts index 4c59a970b..138e86296 100644 --- a/src/systems/slates/apps/hub/src/services/slate.ts +++ b/src/systems/slates/apps/hub/src/services/slate.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Registry, Slate } from '../../prisma/generated/client'; import { db } from '../db'; import { getRegistryClient, getRegistryQuery } from '../registry'; diff --git a/src/systems/slates/apps/hub/src/services/slateAuthConfig.ts b/src/systems/slates/apps/hub/src/services/slateAuthConfig.ts index 3b2af07aa..fd298a274 100644 --- a/src/systems/slates/apps/hub/src/services/slateAuthConfig.ts +++ b/src/systems/slates/apps/hub/src/services/slateAuthConfig.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate, SlateAuthConfig, diff --git a/src/systems/slates/apps/hub/src/services/slateAuthConfigEvent.ts b/src/systems/slates/apps/hub/src/services/slateAuthConfigEvent.ts index 3b92e4d61..515c63b55 100644 --- a/src/systems/slates/apps/hub/src/services/slateAuthConfigEvent.ts +++ b/src/systems/slates/apps/hub/src/services/slateAuthConfigEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/slateDeployment.ts b/src/systems/slates/apps/hub/src/services/slateDeployment.ts index b81f8a90a..47f544197 100644 --- a/src/systems/slates/apps/hub/src/services/slateDeployment.ts +++ b/src/systems/slates/apps/hub/src/services/slateDeployment.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate, SlateDeployment } from '../../prisma/generated/client'; import { db } from '../db'; import { functionBay, functionBayTenant } from '../functionBay'; diff --git a/src/systems/slates/apps/hub/src/services/slateDiscovery.ts b/src/systems/slates/apps/hub/src/services/slateDiscovery.ts index 98d0aa16b..4762dfb82 100644 --- a/src/systems/slates/apps/hub/src/services/slateDiscovery.ts +++ b/src/systems/slates/apps/hub/src/services/slateDiscovery.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate, SlateVersion, diff --git a/src/systems/slates/apps/hub/src/services/slateError.ts b/src/systems/slates/apps/hub/src/services/slateError.ts index ff7c48c65..2da668728 100644 --- a/src/systems/slates/apps/hub/src/services/slateError.ts +++ b/src/systems/slates/apps/hub/src/services/slateError.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { SlateErrorType, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/slates/apps/hub/src/services/slateEvent.ts b/src/systems/slates/apps/hub/src/services/slateEvent.ts index 7390e83c5..4b477c891 100644 --- a/src/systems/slates/apps/hub/src/services/slateEvent.ts +++ b/src/systems/slates/apps/hub/src/services/slateEvent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/slateInstance.ts b/src/systems/slates/apps/hub/src/services/slateInstance.ts index 9a865e1bc..0a7e63bfe 100644 --- a/src/systems/slates/apps/hub/src/services/slateInstance.ts +++ b/src/systems/slates/apps/hub/src/services/slateInstance.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate, SlateConfigSchema, diff --git a/src/systems/slates/apps/hub/src/services/slateInstanceAuthHandler.ts b/src/systems/slates/apps/hub/src/services/slateInstanceAuthHandler.ts index ab9170c54..fef41ec36 100644 --- a/src/systems/slates/apps/hub/src/services/slateInstanceAuthHandler.ts +++ b/src/systems/slates/apps/hub/src/services/slateInstanceAuthHandler.ts @@ -1,7 +1,7 @@ -import { delay } from '@lowerdeck/delay'; -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; -import { Service } from '@lowerdeck/service'; +import { delay } from '@mtsrc/delay'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; +import { Service } from '@mtsrc/service'; import type { SlateInstance, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/slates/apps/hub/src/services/slateInstanceConfig.ts b/src/systems/slates/apps/hub/src/services/slateInstanceConfig.ts index 0cfc65bc3..4c62bffa6 100644 --- a/src/systems/slates/apps/hub/src/services/slateInstanceConfig.ts +++ b/src/systems/slates/apps/hub/src/services/slateInstanceConfig.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/slateInstanceEvent.ts b/src/systems/slates/apps/hub/src/services/slateInstanceEvent.ts index 23ebb2198..59cb5d9bd 100644 --- a/src/systems/slates/apps/hub/src/services/slateInstanceEvent.ts +++ b/src/systems/slates/apps/hub/src/services/slateInstanceEvent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/browser'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/slateInvocation.ts b/src/systems/slates/apps/hub/src/services/slateInvocation.ts index 156b96239..acc87c4a5 100644 --- a/src/systems/slates/apps/hub/src/services/slateInvocation.ts +++ b/src/systems/slates/apps/hub/src/services/slateInvocation.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { SlateInvocationStack } from '../lib/invocation/stack'; import type { SlateInvocationBaseParams, SlatesRequest } from '../lib/invocation/types'; diff --git a/src/systems/slates/apps/hub/src/services/slateOAuthCredentials.ts b/src/systems/slates/apps/hub/src/services/slateOAuthCredentials.ts index f421a81e4..e8f175ad8 100644 --- a/src/systems/slates/apps/hub/src/services/slateOAuthCredentials.ts +++ b/src/systems/slates/apps/hub/src/services/slateOAuthCredentials.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate, SlateOAuthCredentials, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/slates/apps/hub/src/services/slateOAuthHandler.ts b/src/systems/slates/apps/hub/src/services/slateOAuthHandler.ts index 67c287d48..62029fb6b 100644 --- a/src/systems/slates/apps/hub/src/services/slateOAuthHandler.ts +++ b/src/systems/slates/apps/hub/src/services/slateOAuthHandler.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { env } from '../env'; import { getId, ID, snowflake } from '../id'; diff --git a/src/systems/slates/apps/hub/src/services/slateOAuthSetup.ts b/src/systems/slates/apps/hub/src/services/slateOAuthSetup.ts index ac0939f05..19976464c 100644 --- a/src/systems/slates/apps/hub/src/services/slateOAuthSetup.ts +++ b/src/systems/slates/apps/hub/src/services/slateOAuthSetup.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { SlateInstanceOAuthSetup, SlateVersion } from '../../prisma/generated/browser'; import type { Slate, SlateOAuthCredentials, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/slateOAuthSetupEvent.ts b/src/systems/slates/apps/hub/src/services/slateOAuthSetupEvent.ts index 4a1074490..43a8ca271 100644 --- a/src/systems/slates/apps/hub/src/services/slateOAuthSetupEvent.ts +++ b/src/systems/slates/apps/hub/src/services/slateOAuthSetupEvent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/slateSession.ts b/src/systems/slates/apps/hub/src/services/slateSession.ts index 31bcd4f4f..2ac7f6c25 100644 --- a/src/systems/slates/apps/hub/src/services/slateSession.ts +++ b/src/systems/slates/apps/hub/src/services/slateSession.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate, SlateInstance, diff --git a/src/systems/slates/apps/hub/src/services/slateSessionToolCall.ts b/src/systems/slates/apps/hub/src/services/slateSessionToolCall.ts index fe5c3ad25..990c84ad4 100644 --- a/src/systems/slates/apps/hub/src/services/slateSessionToolCall.ts +++ b/src/systems/slates/apps/hub/src/services/slateSessionToolCall.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { SlatesParticipant } from '@slates/proto'; import { addDays, differenceInMinutes } from 'date-fns'; import { PublicUrlPurpose } from '@metorial-platform-systems/object-storage-client'; diff --git a/src/systems/slates/apps/hub/src/services/slateSpecification.ts b/src/systems/slates/apps/hub/src/services/slateSpecification.ts index 22f743a05..f4dfa1848 100644 --- a/src/systems/slates/apps/hub/src/services/slateSpecification.ts +++ b/src/systems/slates/apps/hub/src/services/slateSpecification.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; let include = { diff --git a/src/systems/slates/apps/hub/src/services/slateSpecificationChange.ts b/src/systems/slates/apps/hub/src/services/slateSpecificationChange.ts index 0322e8278..de81fcac9 100644 --- a/src/systems/slates/apps/hub/src/services/slateSpecificationChange.ts +++ b/src/systems/slates/apps/hub/src/services/slateSpecificationChange.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; let include = { diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerDelivery.ts b/src/systems/slates/apps/hub/src/services/slateTriggerDelivery.ts index 84a78fb5b..a22a8ca7a 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerDelivery.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerDelivery.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { getTenantAndSenderForSignal, signal } from '../signal'; diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerDestination.ts b/src/systems/slates/apps/hub/src/services/slateTriggerDestination.ts index 53804f9d2..cde271efd 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerDestination.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerDestination.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { SlateTriggerDestinationStatus, SlateTriggerDestinationType, diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerEvent.ts b/src/systems/slates/apps/hub/src/services/slateTriggerEvent.ts index 8bdbf4cae..b86e790b7 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerEvent.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerEvent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerEventInput.ts b/src/systems/slates/apps/hub/src/services/slateTriggerEventInput.ts index 016dc1edb..3ea1e90b3 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerEventInput.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerEventInput.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerInvocation.ts b/src/systems/slates/apps/hub/src/services/slateTriggerInvocation.ts index 14415490d..612461915 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerInvocation.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerInvocation.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { SlateTriggerInvocationType, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerReceiver.ts b/src/systems/slates/apps/hub/src/services/slateTriggerReceiver.ts index 4ac201d8b..48dc3fb28 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerReceiver.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerReceiver.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { getSentry } from '@lowerdeck/sentry'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { getSentry } from '@mtsrc/sentry'; +import { Service } from '@mtsrc/service'; import { SlateTriggerDestinationStatus, SlateTriggerReceiverTriggerSource, diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerReceiverCore.ts b/src/systems/slates/apps/hub/src/services/slateTriggerReceiverCore.ts index 8a8e28f50..8d5b06a6f 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerReceiverCore.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerReceiverCore.ts @@ -1,4 +1,4 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; import { SlateTriggerDestinationStatus, SlateTriggerEventDeliveryStatus, diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerReceiverRuntime.ts b/src/systems/slates/apps/hub/src/services/slateTriggerReceiverRuntime.ts index 3b7a45bc7..5aabbcc73 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerReceiverRuntime.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerReceiverRuntime.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; import { SlateTriggerEventDeliveryStatus, SlateTriggerEventInputStatus, diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerReceiverShared.ts b/src/systems/slates/apps/hub/src/services/slateTriggerReceiverShared.ts index a5e34b37c..44f943cc0 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerReceiverShared.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerReceiverShared.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import type { SlateTriggerReceiverTriggerSource, Slate, diff --git a/src/systems/slates/apps/hub/src/services/slateTriggerWebhookRequest.ts b/src/systems/slates/apps/hub/src/services/slateTriggerWebhookRequest.ts index 9609ca6be..97679ca5c 100644 --- a/src/systems/slates/apps/hub/src/services/slateTriggerWebhookRequest.ts +++ b/src/systems/slates/apps/hub/src/services/slateTriggerWebhookRequest.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { getId } from '../id'; import type { TriggerWebhookRequestPayload } from '../lib/triggerWebhook'; diff --git a/src/systems/slates/apps/hub/src/services/slateVersion.ts b/src/systems/slates/apps/hub/src/services/slateVersion.ts index a9e986381..cb6f5b2ec 100644 --- a/src/systems/slates/apps/hub/src/services/slateVersion.ts +++ b/src/systems/slates/apps/hub/src/services/slateVersion.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Registry, Slate, SlateVersion } from '../../prisma/generated/client'; import { db } from '../db'; import { getRegistryClient, getRegistryQuery } from '../registry'; diff --git a/src/systems/slates/apps/hub/src/services/slateVersionDiscovery.ts b/src/systems/slates/apps/hub/src/services/slateVersionDiscovery.ts index dd22c1145..3227994be 100644 --- a/src/systems/slates/apps/hub/src/services/slateVersionDiscovery.ts +++ b/src/systems/slates/apps/hub/src/services/slateVersionDiscovery.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/hub/src/services/tenant.ts b/src/systems/slates/apps/hub/src/services/tenant.ts index 7e228263b..b49b6d1da 100644 --- a/src/systems/slates/apps/hub/src/services/tenant.ts +++ b/src/systems/slates/apps/hub/src/services/tenant.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/slates/apps/hub/src/signal.ts b/src/systems/slates/apps/hub/src/signal.ts index f751429d0..bfebd9a94 100644 --- a/src/systems/slates/apps/hub/src/signal.ts +++ b/src/systems/slates/apps/hub/src/signal.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { delay } from '@mtsrc/delay'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { createSignalClient } from '@metorial-platform-systems/signal-client'; import type { Tenant } from '../prisma/generated/client'; import { db } from './db'; diff --git a/src/systems/slates/apps/hub/src/storage.ts b/src/systems/slates/apps/hub/src/storage.ts index 6214a7da3..e8f868048 100644 --- a/src/systems/slates/apps/hub/src/storage.ts +++ b/src/systems/slates/apps/hub/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { db } from './db'; import { env } from './env'; diff --git a/src/systems/slates/apps/hub/src/test/client.ts b/src/systems/slates/apps/hub/src/test/client.ts index 104709c78..2c823351f 100644 --- a/src/systems/slates/apps/hub/src/test/client.ts +++ b/src/systems/slates/apps/hub/src/test/client.ts @@ -1,5 +1,5 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import type { SlatesHubClient } from '../apis/internal'; import { slatesHubApi } from '../apis/internal'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/changeNotificationFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/changeNotificationFixtures.ts index 9e8dcf807..c2722cbc8 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/changeNotificationFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/changeNotificationFixtures.ts @@ -6,7 +6,7 @@ import type { } from '../../../prisma/generated/client'; import { ChangeNotificationType, SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateFixtures } from './slateFixtures'; export const ChangeNotificationFixtures = (db: PrismaClient) => { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/deploymentFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/deploymentFixtures.ts index 3f3bf1f73..17cb2d98c 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/deploymentFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/deploymentFixtures.ts @@ -6,7 +6,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateDeploymentStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const DeploymentProviderFixtures = (db: PrismaClient) => { const defaultProvider = async ( diff --git a/src/systems/slates/apps/hub/src/test/fixtures/instanceFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/instanceFixtures.ts index 3e1181666..bdd6723e8 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/instanceFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/instanceFixtures.ts @@ -6,7 +6,7 @@ import type { SlateInstanceConfig } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const SlateConfigSchemaFixtures = (db: PrismaClient) => { const defaultSchema = async (data: { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/invocationFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/invocationFixtures.ts index 0fe683659..8016aff7f 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/invocationFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/invocationFixtures.ts @@ -9,7 +9,7 @@ import { storage } from '../../storage'; import { env } from '../../env'; import { getStoredInvocationStorageKey } from '../../lib/invocation/store'; import type { StoredSlateInvocation } from '../../lib/invocation/types'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const SlateInvocationStorageBucketFixtures = (db: PrismaClient) => { const defaultBucket = async (bucket?: string): Promise => { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/registryFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/registryFixtures.ts index b8d6f0f05..a66e2447e 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/registryFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/registryFixtures.ts @@ -2,7 +2,7 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, Registry } from '../../../prisma/generated/client'; import { RegistryStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const RegistryFixtures = (db: PrismaClient) => { const defaultRegistry = async ( diff --git a/src/systems/slates/apps/hub/src/test/fixtures/secretFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/secretFixtures.ts index a0fe6e02e..df28a6d35 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/secretFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/secretFixtures.ts @@ -2,7 +2,7 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, Secret, Tenant } from '../../../prisma/generated/client'; import { SecretStatus, SecretType } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; export const SecretFixtures = (db: PrismaClient) => { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateAuthConfigFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateAuthConfigFixtures.ts index 20a80f89a..4e9543cfd 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateAuthConfigFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateAuthConfigFixtures.ts @@ -9,7 +9,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateAuthConfigType, SecretType, type SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; import { SecretFixtures } from './secretFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateAuthMethodFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateAuthMethodFixtures.ts index e6132cb48..f1697ee2f 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateAuthMethodFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateAuthMethodFixtures.ts @@ -7,7 +7,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateAuthMethodType, SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateFixtures } from './slateFixtures'; export const SlateAuthMethodFixtures = (db: PrismaClient) => { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateEventFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateEventFixtures.ts index bf3f6983e..6d41bbe2b 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateEventFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateEventFixtures.ts @@ -6,7 +6,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateEventType, SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateFixtures } from './slateFixtures'; export const SlateEventFixtures = (db: PrismaClient) => { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateFixtures.ts index 8f9b89a79..0d267ce0c 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateFixtures.ts @@ -8,7 +8,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { RegistryFixtures } from './registryFixtures'; import { SlateVersionFixtures } from './slateVersionFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateOAuthCredentialsFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateOAuthCredentialsFixtures.ts index 14cf9ef32..8cf9a1b96 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateOAuthCredentialsFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateOAuthCredentialsFixtures.ts @@ -8,7 +8,7 @@ import type { } from '../../../prisma/generated/client'; import { SecretType, SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateFixtures } from './slateFixtures'; import { TenantFixtures } from './tenantFixtures'; import { SecretFixtures } from './secretFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateOAuthSetupFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateOAuthSetupFixtures.ts index cfc25bd25..4de50fdf8 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateOAuthSetupFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateOAuthSetupFixtures.ts @@ -14,7 +14,7 @@ import { SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateFixtures } from './slateFixtures'; import { TenantFixtures } from './tenantFixtures'; import { SecretFixtures } from './secretFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateSessionFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateSessionFixtures.ts index 94f43a911..cea029bc4 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateSessionFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateSessionFixtures.ts @@ -9,7 +9,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateFixtures } from './slateFixtures'; import { SlateInstanceFixtures } from './instanceFixtures'; import { TenantFixtures } from './tenantFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateSessionToolCallFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateSessionToolCallFixtures.ts index 76bd49077..bb427270b 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateSessionToolCallFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateSessionToolCallFixtures.ts @@ -12,7 +12,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateSessionToolCallStatus, type SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateSessionFixtures } from './slateSessionFixtures'; import { SlateSpecificationFixtures } from './slateSpecificationFixtures'; import { SlateInvocationFixtures, SlateInvocationStorageBucketFixtures } from './invocationFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateSpecificationChangeFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateSpecificationChangeFixtures.ts index ab6efcd36..f8fb7b12c 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateSpecificationChangeFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateSpecificationChangeFixtures.ts @@ -7,7 +7,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateSpecificationChangeType, SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateFixtures } from './slateFixtures'; import { SlateVersionFixtures } from './slateVersionFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateSpecificationFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateSpecificationFixtures.ts index 61713a90f..5e676d100 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateSpecificationFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateSpecificationFixtures.ts @@ -6,7 +6,7 @@ import type { SlateSpecificationAction } from '../../../prisma/generated/client'; import { getId, snowflake } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const SlateSpecificationFixtures = (db: PrismaClient) => { const defaultSpecification = async (data: { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerDeliveryFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerDeliveryFixtures.ts index 5d16325c0..2dfc6d499 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerDeliveryFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerDeliveryFixtures.ts @@ -8,7 +8,7 @@ import type { Tenant } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateTriggerEventFixtures } from './slateTriggerEventFixtures'; import { SlateTriggerDestinationFixtures } from './slateTriggerDestinationFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerDestinationFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerDestinationFixtures.ts index f7122cbde..23436bdc6 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerDestinationFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerDestinationFixtures.ts @@ -5,7 +5,7 @@ import { SlateTriggerDestinationStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; export const SlateTriggerDestinationFixtures = (db: PrismaClient) => { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerEventFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerEventFixtures.ts index e8bedf57d..376109d86 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerEventFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerEventFixtures.ts @@ -14,7 +14,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateTriggerEventDeliveryStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateTriggerReceiverFixtures } from './slateTriggerReceiverFixtures'; import { SlateInvocationFixtures, SlateInvocationStorageBucketFixtures } from './invocationFixtures'; import { DeploymentProviderFixtures, SlateDeploymentFixtures } from './deploymentFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerInvocationFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerInvocationFixtures.ts index b5004accb..0550ab089 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerInvocationFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerInvocationFixtures.ts @@ -13,7 +13,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateTriggerInvocationType } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateTriggerReceiverFixtures } from './slateTriggerReceiverFixtures'; import { SlateInvocationFixtures } from './invocationFixtures'; import { DeploymentProviderFixtures, SlateDeploymentFixtures } from './deploymentFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerReceiverFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerReceiverFixtures.ts index 950bbef7b..93eca9507 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerReceiverFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateTriggerReceiverFixtures.ts @@ -16,7 +16,7 @@ import { SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { TenantFixtures } from './tenantFixtures'; import { SlateFixtures } from './slateFixtures'; import { SlateInstanceFixtures } from './instanceFixtures'; diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateVersionDiscoveryFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateVersionDiscoveryFixtures.ts index b4531117d..f243e2284 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateVersionDiscoveryFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateVersionDiscoveryFixtures.ts @@ -7,7 +7,7 @@ import type { } from '../../../prisma/generated/client'; import { SlateVersionDiscoveryStatus, SlateStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateFixtures } from './slateFixtures'; export const SlateVersionDiscoveryFixtures = (db: PrismaClient) => { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/slateVersionFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/slateVersionFixtures.ts index 5e372d98b..295a0f6f4 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/slateVersionFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/slateVersionFixtures.ts @@ -1,7 +1,7 @@ import type { PrismaClient, SlateVersion, SlateSpecification } from '../../../prisma/generated/client'; import { SlateVersionStatus } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { SlateSpecificationFixtures } from './slateSpecificationFixtures'; export const SlateVersionFixtures = (db: PrismaClient) => { diff --git a/src/systems/slates/apps/hub/src/test/fixtures/tenantFixtures.ts b/src/systems/slates/apps/hub/src/test/fixtures/tenantFixtures.ts index 5c203ae60..305a9ae22 100644 --- a/src/systems/slates/apps/hub/src/test/fixtures/tenantFixtures.ts +++ b/src/systems/slates/apps/hub/src/test/fixtures/tenantFixtures.ts @@ -1,7 +1,7 @@ import { randomBytes } from 'crypto'; import type { PrismaClient, Tenant } from '../../../prisma/generated/client'; import { getId } from '../../id'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; export const TenantFixtures = (db: PrismaClient) => { const defaultTenant = async (overrides: Partial = {}): Promise => { diff --git a/src/systems/slates/apps/hub/src/test/setup.ts b/src/systems/slates/apps/hub/src/test/setup.ts index 81df5c026..d5643533d 100644 --- a/src/systems/slates/apps/hub/src/test/setup.ts +++ b/src/systems/slates/apps/hub/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/slates/apps/hub/src/worker.ts b/src/systems/slates/apps/hub/src/worker.ts index c1bddffda..3476cc045 100644 --- a/src/systems/slates/apps/hub/src/worker.ts +++ b/src/systems/slates/apps/hub/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { attachmentQueues } from './queues/attachment'; import { cleanupCron } from './queues/cron/cleanup'; import { deploymentQueues } from './queues/deployment'; diff --git a/src/systems/slates/apps/hub/vitest.config.ts b/src/systems/slates/apps/hub/vitest.config.ts index 7d026a8f8..f37ed24f5 100644 --- a/src/systems/slates/apps/hub/vitest.config.ts +++ b/src/systems/slates/apps/hub/vitest.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { const env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/slates/apps/hub/vitest.e2e.config.ts b/src/systems/slates/apps/hub/vitest.e2e.config.ts index 67507cbaa..ca935a5dd 100644 --- a/src/systems/slates/apps/hub/vitest.e2e.config.ts +++ b/src/systems/slates/apps/hub/vitest.e2e.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 95fef4fd2..3436f8b07 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -24,7 +24,7 @@ WORKDIR /app/src/systems/slates/apps/registry CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/slates/apps/registry/admin/src/hooks/client.ts b/src/systems/slates/apps/registry/admin/src/hooks/client.ts index e98f52b5d..a9be0e160 100644 --- a/src/systems/slates/apps/registry/admin/src/hooks/client.ts +++ b/src/systems/slates/apps/registry/admin/src/hooks/client.ts @@ -1,5 +1,5 @@ -import { isServiceError } from '@lowerdeck/error'; -import { createClient } from '@lowerdeck/rpc-client'; +import { isServiceError } from '@mtsrc/error'; +import { createClient } from '@mtsrc/rpc-client'; import type { SlatesRegistryAdminClient } from '../../../src/apis/admin/controllers'; let endpoint = `${window.location.origin}/slates-registry-admin`; diff --git a/src/systems/slates/apps/registry/package.json b/src/systems/slates/apps/registry/package.json index 1e199b416..cd1623c97 100644 --- a/src/systems/slates/apps/registry/package.json +++ b/src/systems/slates/apps/registry/package.json @@ -25,7 +25,6 @@ "admin:typecheck": "tsc --noEmit --project admin/tsconfig.json" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/minimatch": "^6.0.0", "@types/react": "^19.0.0", @@ -35,7 +34,8 @@ "@vitejs/plugin-react": "^4.3.0", "autoprefixer": "^10.4.0", "vite": "^5.4.0", - "vitest": "^4.0.17" + "vitest": "^4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -45,29 +45,6 @@ "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-key": "^1.0.3", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/encryption": "^1.0.8", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/shadow-id": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/validation": "^1.0.10", "@metorial-io/data-hooks": "^1.0.1", "@metorial-io/layout": "^1.0.1", "@metorial-io/ui": "^1.0.0", @@ -95,6 +72,29 @@ "styled-components": "^6.1.13", "tar-stream": "^3.1.8", "unzipper": "^0.12.3", - "yaml": "^2.8.2" + "yaml": "^2.8.2", + "@mtsrc/api-key": "1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/slates/apps/registry/src/apis/admin/controllers/_app.ts b/src/systems/slates/apps/registry/src/apis/admin/controllers/_app.ts index 18fd0d55e..86b1ba316 100644 --- a/src/systems/slates/apps/registry/src/apis/admin/controllers/_app.ts +++ b/src/systems/slates/apps/registry/src/apis/admin/controllers/_app.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Group } from '@lowerdeck/rpc-server'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Group } from '@mtsrc/rpc-server'; import { adminAuthService } from '../../../services'; export let app = new Group(); diff --git a/src/systems/slates/apps/registry/src/apis/admin/controllers/auth.ts b/src/systems/slates/apps/registry/src/apis/admin/controllers/auth.ts index d66b9aeb6..df136d0a3 100644 --- a/src/systems/slates/apps/registry/src/apis/admin/controllers/auth.ts +++ b/src/systems/slates/apps/registry/src/apis/admin/controllers/auth.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { adminAuthService } from '../../../services'; import { app, authedApp } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/admin/controllers/index.ts b/src/systems/slates/apps/registry/src/apis/admin/controllers/index.ts index a43470d19..11fb86a36 100644 --- a/src/systems/slates/apps/registry/src/apis/admin/controllers/index.ts +++ b/src/systems/slates/apps/registry/src/apis/admin/controllers/index.ts @@ -1,4 +1,4 @@ -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { authController } from './auth'; import { slateController } from './slate'; diff --git a/src/systems/slates/apps/registry/src/apis/admin/controllers/slate.ts b/src/systems/slates/apps/registry/src/apis/admin/controllers/slate.ts index aa162a69f..a83b0ffb6 100644 --- a/src/systems/slates/apps/registry/src/apis/admin/controllers/slate.ts +++ b/src/systems/slates/apps/registry/src/apis/admin/controllers/slate.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { getPreferredCurrentSlateVersion } from '../../../lib/slateVersion/current'; import { slatePresenter, slateVersionPresenter } from '../../../presenters'; import { slateService, slateVersionService, userService } from '../../../services'; diff --git a/src/systems/slates/apps/registry/src/apis/admin/controllers/subRegistry.ts b/src/systems/slates/apps/registry/src/apis/admin/controllers/subRegistry.ts index 8ec1188c1..7da458888 100644 --- a/src/systems/slates/apps/registry/src/apis/admin/controllers/subRegistry.ts +++ b/src/systems/slates/apps/registry/src/apis/admin/controllers/subRegistry.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subRegistryPresenter } from '../../../presenters'; import { subRegistryService } from '../../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/admin/controllers/tenant.ts b/src/systems/slates/apps/registry/src/apis/admin/controllers/tenant.ts index a2ae0a6ed..73d961773 100644 --- a/src/systems/slates/apps/registry/src/apis/admin/controllers/tenant.ts +++ b/src/systems/slates/apps/registry/src/apis/admin/controllers/tenant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { tenantPresenter } from '../../../presenters'; import { tenantService } from '../../../services'; import { app, authedApp } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/admin/controllers/user.ts b/src/systems/slates/apps/registry/src/apis/admin/controllers/user.ts index 2902b399a..4254c81a6 100644 --- a/src/systems/slates/apps/registry/src/apis/admin/controllers/user.ts +++ b/src/systems/slates/apps/registry/src/apis/admin/controllers/user.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { userPresenter, userTokenPresenter } from '../../../presenters'; import { userService, userTokenService } from '../../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/admin/controllers/workspace.ts b/src/systems/slates/apps/registry/src/apis/admin/controllers/workspace.ts index 16306fc94..aa1f25e0f 100644 --- a/src/systems/slates/apps/registry/src/apis/admin/controllers/workspace.ts +++ b/src/systems/slates/apps/registry/src/apis/admin/controllers/workspace.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { workspacePresenter } from '../../../presenters'; import { workspaceService } from '../../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/admin/index.ts b/src/systems/slates/apps/registry/src/apis/admin/index.ts index 1b0a2299e..99ea43154 100644 --- a/src/systems/slates/apps/registry/src/apis/admin/index.ts +++ b/src/systems/slates/apps/registry/src/apis/admin/index.ts @@ -1,4 +1,4 @@ -import { apiMux } from '@lowerdeck/api-mux'; +import { apiMux } from '@mtsrc/api-mux'; import { slatesRegistryAdminApi } from './controllers'; let adminDir = './dist/admin'; diff --git a/src/systems/slates/apps/registry/src/apis/internal/_app.ts b/src/systems/slates/apps/registry/src/apis/internal/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/slates/apps/registry/src/apis/internal/_app.ts +++ b/src/systems/slates/apps/registry/src/apis/internal/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/slates/apps/registry/src/apis/internal/index.ts b/src/systems/slates/apps/registry/src/apis/internal/index.ts index 7a848e76c..c080907f7 100644 --- a/src/systems/slates/apps/registry/src/apis/internal/index.ts +++ b/src/systems/slates/apps/registry/src/apis/internal/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, type InferClient, rpcMux } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, type InferClient, rpcMux } from '@mtsrc/rpc-server'; import { app } from './_app'; import { readerTokenController } from './readerTokens'; import { subRegistryController } from './subRegistry'; diff --git a/src/systems/slates/apps/registry/src/apis/internal/readerTokens.ts b/src/systems/slates/apps/registry/src/apis/internal/readerTokens.ts index fdd83fcc5..797e2ef96 100644 --- a/src/systems/slates/apps/registry/src/apis/internal/readerTokens.ts +++ b/src/systems/slates/apps/registry/src/apis/internal/readerTokens.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { readerTokenPresenter } from '../../presenters'; import { readerTokenService, tenantService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/internal/subRegistry.ts b/src/systems/slates/apps/registry/src/apis/internal/subRegistry.ts index cd732f011..eb21b7d5b 100644 --- a/src/systems/slates/apps/registry/src/apis/internal/subRegistry.ts +++ b/src/systems/slates/apps/registry/src/apis/internal/subRegistry.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { subRegistryFilterPresenter, subRegistryPresenter } from '../../presenters'; import { subRegistryService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/internal/tenant.ts b/src/systems/slates/apps/registry/src/apis/internal/tenant.ts index 2bc8a19fb..d388560a9 100644 --- a/src/systems/slates/apps/registry/src/apis/internal/tenant.ts +++ b/src/systems/slates/apps/registry/src/apis/internal/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { tenantPresenter } from '../../presenters'; import { tenantService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/internal/user.ts b/src/systems/slates/apps/registry/src/apis/internal/user.ts index 9e9c14eeb..6169671f9 100644 --- a/src/systems/slates/apps/registry/src/apis/internal/user.ts +++ b/src/systems/slates/apps/registry/src/apis/internal/user.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { userPresenter, userTokenPresenter } from '../../presenters'; import { userService, userTokenService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/internal/workspace.ts b/src/systems/slates/apps/registry/src/apis/internal/workspace.ts index f551dfb54..d20a7a2cb 100644 --- a/src/systems/slates/apps/registry/src/apis/internal/workspace.ts +++ b/src/systems/slates/apps/registry/src/apis/internal/workspace.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { workspacePresenter } from '../../presenters'; import { workspaceService } from '../../services'; import { app } from './_app'; diff --git a/src/systems/slates/apps/registry/src/apis/public/_app.ts b/src/systems/slates/apps/registry/src/apis/public/_app.ts index ec4c60249..9ec41404f 100644 --- a/src/systems/slates/apps/registry/src/apis/public/_app.ts +++ b/src/systems/slates/apps/registry/src/apis/public/_app.ts @@ -1,4 +1,4 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; import type { Context } from 'hono'; import { env } from '../../env'; import { readerTokenService, subRegistryService, userTokenService } from '../../services'; diff --git a/src/systems/slates/apps/registry/src/apis/public/changeNotification.ts b/src/systems/slates/apps/registry/src/apis/public/changeNotification.ts index 4993b1255..d8dea5a28 100644 --- a/src/systems/slates/apps/registry/src/apis/public/changeNotification.ts +++ b/src/systems/slates/apps/registry/src/apis/public/changeNotification.ts @@ -1,5 +1,5 @@ -import { createHono } from '@lowerdeck/hono'; -import { Paginator } from '@lowerdeck/pagination'; +import { createHono } from '@mtsrc/hono'; +import { Paginator } from '@mtsrc/pagination'; import { z } from 'zod'; import { paginatorSchema } from '../../lib/paginatorSchema'; import { useValidation } from '../../lib/validator'; diff --git a/src/systems/slates/apps/registry/src/apis/public/index.ts b/src/systems/slates/apps/registry/src/apis/public/index.ts index 1131ba063..42334d41c 100644 --- a/src/systems/slates/apps/registry/src/apis/public/index.ts +++ b/src/systems/slates/apps/registry/src/apis/public/index.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { changeNotificationsController } from './changeNotification'; import { infoController } from './info'; import { scopesController } from './scope'; diff --git a/src/systems/slates/apps/registry/src/apis/public/info.ts b/src/systems/slates/apps/registry/src/apis/public/info.ts index e324f5b10..050db941d 100644 --- a/src/systems/slates/apps/registry/src/apis/public/info.ts +++ b/src/systems/slates/apps/registry/src/apis/public/info.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { paginatorSchema } from '../../lib/paginatorSchema'; import { useValidation } from '../../lib/validator'; import { subRegistryPresenter, tenantPresenter } from '../../presenters'; diff --git a/src/systems/slates/apps/registry/src/apis/public/scope.ts b/src/systems/slates/apps/registry/src/apis/public/scope.ts index ceced4f67..86826fe0a 100644 --- a/src/systems/slates/apps/registry/src/apis/public/scope.ts +++ b/src/systems/slates/apps/registry/src/apis/public/scope.ts @@ -1,5 +1,5 @@ -import { createHono } from '@lowerdeck/hono'; -import { Paginator } from '@lowerdeck/pagination'; +import { createHono } from '@mtsrc/hono'; +import { Paginator } from '@mtsrc/pagination'; import { paginatorSchema } from '../../lib/paginatorSchema'; import { useValidation } from '../../lib/validator'; import { scopePresenter } from '../../presenters'; diff --git a/src/systems/slates/apps/registry/src/apis/public/slate.ts b/src/systems/slates/apps/registry/src/apis/public/slate.ts index 8a8468c09..49071c2ba 100644 --- a/src/systems/slates/apps/registry/src/apis/public/slate.ts +++ b/src/systems/slates/apps/registry/src/apis/public/slate.ts @@ -1,5 +1,5 @@ -import { createHono } from '@lowerdeck/hono'; -import { Paginator } from '@lowerdeck/pagination'; +import { createHono } from '@mtsrc/hono'; +import { Paginator } from '@mtsrc/pagination'; import { z } from 'zod'; import { paginatorSchema } from '../../lib/paginatorSchema'; import { getPreferredCurrentSlateVersion } from '../../lib/slateVersion/current'; diff --git a/src/systems/slates/apps/registry/src/apis/public/user.ts b/src/systems/slates/apps/registry/src/apis/public/user.ts index 018320ebb..8b2c7fc4b 100644 --- a/src/systems/slates/apps/registry/src/apis/public/user.ts +++ b/src/systems/slates/apps/registry/src/apis/public/user.ts @@ -1,5 +1,5 @@ -import { createHono } from '@lowerdeck/hono'; -import { Paginator } from '@lowerdeck/pagination'; +import { createHono } from '@mtsrc/hono'; +import { Paginator } from '@mtsrc/pagination'; import { paginatorSchema } from '../../lib/paginatorSchema'; import { useValidation } from '../../lib/validator'; import { userPresenter } from '../../presenters'; diff --git a/src/systems/slates/apps/registry/src/apis/public/workspace.ts b/src/systems/slates/apps/registry/src/apis/public/workspace.ts index db938e667..0f2f62606 100644 --- a/src/systems/slates/apps/registry/src/apis/public/workspace.ts +++ b/src/systems/slates/apps/registry/src/apis/public/workspace.ts @@ -1,5 +1,5 @@ -import { createHono } from '@lowerdeck/hono'; -import { Paginator } from '@lowerdeck/pagination'; +import { createHono } from '@mtsrc/hono'; +import { Paginator } from '@mtsrc/pagination'; import { paginatorSchema } from '../../lib/paginatorSchema'; import { useValidation } from '../../lib/validator'; import { workspacePresenter } from '../../presenters'; diff --git a/src/systems/slates/apps/registry/src/env.ts b/src/systems/slates/apps/registry/src/env.ts index a495143f4..b99710b3c 100644 --- a/src/systems/slates/apps/registry/src/env.ts +++ b/src/systems/slates/apps/registry/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/slates/apps/registry/src/id.ts b/src/systems/slates/apps/registry/src/id.ts index 218ce8191..da961fb47 100644 --- a/src/systems/slates/apps/registry/src/id.ts +++ b/src/systems/slates/apps/registry/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ tenant: idType.sorted('srtn'), diff --git a/src/systems/slates/apps/registry/src/instrument.ts b/src/systems/slates/apps/registry/src/instrument.ts index 0974c894c..2f7af995a 100644 --- a/src/systems/slates/apps/registry/src/instrument.ts +++ b/src/systems/slates/apps/registry/src/instrument.ts @@ -1,4 +1,4 @@ -import { setSentry } from '@lowerdeck/sentry'; +import { setSentry } from '@mtsrc/sentry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/slates/apps/registry/src/keys.ts b/src/systems/slates/apps/registry/src/keys.ts index 926d44361..ef6f570e8 100644 --- a/src/systems/slates/apps/registry/src/keys.ts +++ b/src/systems/slates/apps/registry/src/keys.ts @@ -1,4 +1,4 @@ -import { createApiKeyGenerator } from '@lowerdeck/api-key'; +import { createApiKeyGenerator } from '@mtsrc/api-key'; export let apiKeys = createApiKeyGenerator( { utok: 'user_auth_token', rtok: 'reader_token' }, diff --git a/src/systems/slates/apps/registry/src/lib/slatePackage/manifest.ts b/src/systems/slates/apps/registry/src/lib/slatePackage/manifest.ts index d2cdca18c..9adfbc654 100644 --- a/src/systems/slates/apps/registry/src/lib/slatePackage/manifest.ts +++ b/src/systems/slates/apps/registry/src/lib/slatePackage/manifest.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError, validationError } from '@lowerdeck/error'; -import { type ValidationTypeValue, v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError, validationError } from '@mtsrc/error'; +import { type ValidationTypeValue, v } from '@mtsrc/validation'; import semver from 'semver'; import type { SlatePackageEntry } from './archive'; diff --git a/src/systems/slates/apps/registry/src/lib/slateVersion/promotion.ts b/src/systems/slates/apps/registry/src/lib/slateVersion/promotion.ts index e4faa248c..1bd47226b 100644 --- a/src/systems/slates/apps/registry/src/lib/slateVersion/promotion.ts +++ b/src/systems/slates/apps/registry/src/lib/slateVersion/promotion.ts @@ -1,4 +1,4 @@ -import { preconditionFailedError, ServiceError } from '@lowerdeck/error'; +import { preconditionFailedError, ServiceError } from '@mtsrc/error'; import semver from 'semver'; import type { SlateVersionBackend } from '../../../prisma/generated/client'; diff --git a/src/systems/slates/apps/registry/src/lib/validator.ts b/src/systems/slates/apps/registry/src/lib/validator.ts index 4f1ba710d..4efcbdd80 100644 --- a/src/systems/slates/apps/registry/src/lib/validator.ts +++ b/src/systems/slates/apps/registry/src/lib/validator.ts @@ -1,5 +1,5 @@ import { zValidator } from '@hono/zod-validator'; -import { validationError } from '@lowerdeck/error'; +import { validationError } from '@mtsrc/error'; export let useValidation = ((target: any, schema: any) => zValidator(target, schema, (data, c) => { if (!data.success) diff --git a/src/systems/slates/apps/registry/src/presenters/scope.ts b/src/systems/slates/apps/registry/src/presenters/scope.ts index 709ae7e09..af4e3d160 100644 --- a/src/systems/slates/apps/registry/src/presenters/scope.ts +++ b/src/systems/slates/apps/registry/src/presenters/scope.ts @@ -1,4 +1,4 @@ -import { shadowId } from '@lowerdeck/shadow-id'; +import { shadowId } from '@mtsrc/shadow-id'; import type { Scope, Tenant } from '../../prisma/generated/client'; export let scopePresenter = (scope: Scope & { tenant: Tenant }) => ({ diff --git a/src/systems/slates/apps/registry/src/queues/cleanup.ts b/src/systems/slates/apps/registry/src/queues/cleanup.ts index 9142be22f..ce93b4dc1 100644 --- a/src/systems/slates/apps/registry/src/queues/cleanup.ts +++ b/src/systems/slates/apps/registry/src/queues/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subDays, subHours } from 'date-fns'; import { env } from '../env'; diff --git a/src/systems/slates/apps/registry/src/queues/expiresTokens.ts b/src/systems/slates/apps/registry/src/queues/expiresTokens.ts index 831210c77..da2289351 100644 --- a/src/systems/slates/apps/registry/src/queues/expiresTokens.ts +++ b/src/systems/slates/apps/registry/src/queues/expiresTokens.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/slates/apps/registry/src/queues/syncNpm.ts b/src/systems/slates/apps/registry/src/queues/syncNpm.ts index 91295c4ed..e18715152 100644 --- a/src/systems/slates/apps/registry/src/queues/syncNpm.ts +++ b/src/systems/slates/apps/registry/src/queues/syncNpm.ts @@ -1,6 +1,6 @@ -import { createCron } from '@lowerdeck/cron'; -import { createLock } from '@lowerdeck/lock'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createLock } from '@mtsrc/lock'; +import { createQueue } from '@mtsrc/queue'; import semver from 'semver'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/slates/apps/registry/src/services/adminAuth.ts b/src/systems/slates/apps/registry/src/services/adminAuth.ts index d0ab8c84b..85425ab46 100644 --- a/src/systems/slates/apps/registry/src/services/adminAuth.ts +++ b/src/systems/slates/apps/registry/src/services/adminAuth.ts @@ -1,5 +1,5 @@ -import { ServiceError, unauthorizedError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { ServiceError, unauthorizedError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { addHours } from 'date-fns'; import { aresClient } from '../aresClient'; import { db } from '../db'; diff --git a/src/systems/slates/apps/registry/src/services/changeNotification.ts b/src/systems/slates/apps/registry/src/services/changeNotification.ts index 7d904c00f..f7e7dfc3c 100644 --- a/src/systems/slates/apps/registry/src/services/changeNotification.ts +++ b/src/systems/slates/apps/registry/src/services/changeNotification.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { diff --git a/src/systems/slates/apps/registry/src/services/readerToken.ts b/src/systems/slates/apps/registry/src/services/readerToken.ts index fe22a8cfe..f4ce6e0df 100644 --- a/src/systems/slates/apps/registry/src/services/readerToken.ts +++ b/src/systems/slates/apps/registry/src/services/readerToken.ts @@ -1,5 +1,5 @@ -import { unauthorizedError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { unauthorizedError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/slates/apps/registry/src/services/scope.ts b/src/systems/slates/apps/registry/src/services/scope.ts index 66c1fe8a4..3e4c18ebd 100644 --- a/src/systems/slates/apps/registry/src/services/scope.ts +++ b/src/systems/slates/apps/registry/src/services/scope.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Scope } from '../../prisma/generated/client'; import { db } from '../db'; diff --git a/src/systems/slates/apps/registry/src/services/slate.ts b/src/systems/slates/apps/registry/src/services/slate.ts index a22f12ed0..182f14dd1 100644 --- a/src/systems/slates/apps/registry/src/services/slate.ts +++ b/src/systems/slates/apps/registry/src/services/slate.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate, Tenant } from '../../prisma/generated/client'; import { db } from '../db'; import { buildSlateFilterClause, type SubRegistryWithFilters } from '../lib/subRegistryFilter'; diff --git a/src/systems/slates/apps/registry/src/services/slateVersion.ts b/src/systems/slates/apps/registry/src/services/slateVersion.ts index 6c900cc5f..6b9c77d37 100644 --- a/src/systems/slates/apps/registry/src/services/slateVersion.ts +++ b/src/systems/slates/apps/registry/src/services/slateVersion.ts @@ -4,10 +4,10 @@ import { preconditionFailedError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Slate, SlateAccess, diff --git a/src/systems/slates/apps/registry/src/services/subRegistry.ts b/src/systems/slates/apps/registry/src/services/subRegistry.ts index 34bceccb6..fd98f4e5c 100644 --- a/src/systems/slates/apps/registry/src/services/subRegistry.ts +++ b/src/systems/slates/apps/registry/src/services/subRegistry.ts @@ -1,6 +1,6 @@ -import { badRequestError, conflictError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, conflictError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { SubRegistry, SubRegistryFilterType, diff --git a/src/systems/slates/apps/registry/src/services/tenant.ts b/src/systems/slates/apps/registry/src/services/tenant.ts index b654ddc48..e97a26530 100644 --- a/src/systems/slates/apps/registry/src/services/tenant.ts +++ b/src/systems/slates/apps/registry/src/services/tenant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/slates/apps/registry/src/services/user.ts b/src/systems/slates/apps/registry/src/services/user.ts index dce23b7fb..0ef32824c 100644 --- a/src/systems/slates/apps/registry/src/services/user.ts +++ b/src/systems/slates/apps/registry/src/services/user.ts @@ -1,6 +1,6 @@ -import { conflictError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { conflictError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant, User } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/slates/apps/registry/src/services/userToken.ts b/src/systems/slates/apps/registry/src/services/userToken.ts index 427671a82..c4e1119fb 100644 --- a/src/systems/slates/apps/registry/src/services/userToken.ts +++ b/src/systems/slates/apps/registry/src/services/userToken.ts @@ -3,9 +3,9 @@ import { notFoundError, ServiceError, unauthorizedError -} from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { User, UserToken } from '../../prisma/generated/client'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/slates/apps/registry/src/services/workspace.ts b/src/systems/slates/apps/registry/src/services/workspace.ts index afd1f2cf1..65f8bfda6 100644 --- a/src/systems/slates/apps/registry/src/services/workspace.ts +++ b/src/systems/slates/apps/registry/src/services/workspace.ts @@ -1,6 +1,6 @@ -import { conflictError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { conflictError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Scope, Tenant, Workspace } from '../../prisma/generated/client'; import { db } from '../db'; import { getId } from '../id'; diff --git a/src/systems/slates/apps/registry/src/storage.ts b/src/systems/slates/apps/registry/src/storage.ts index 8b8da30bb..fffde4047 100644 --- a/src/systems/slates/apps/registry/src/storage.ts +++ b/src/systems/slates/apps/registry/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; diff --git a/src/systems/slates/apps/registry/src/test/client.ts b/src/systems/slates/apps/registry/src/test/client.ts index 3eb2d451a..d852ab896 100644 --- a/src/systems/slates/apps/registry/src/test/client.ts +++ b/src/systems/slates/apps/registry/src/test/client.ts @@ -1,5 +1,5 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { slatesRegistryApi, type SlatesRegistryClient } from '../apis/internal'; type ClientOptsLike = Parameters[0]; diff --git a/src/systems/slates/apps/registry/src/test/setup.ts b/src/systems/slates/apps/registry/src/test/setup.ts index a77bd863a..6fbf8ac7c 100644 --- a/src/systems/slates/apps/registry/src/test/setup.ts +++ b/src/systems/slates/apps/registry/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/slates/apps/registry/src/worker.ts b/src/systems/slates/apps/registry/src/worker.ts index c8571291e..55bdcfea2 100644 --- a/src/systems/slates/apps/registry/src/worker.ts +++ b/src/systems/slates/apps/registry/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { cleanupProcessor } from './queues/cleanup'; import { expireTokensProcessor } from './queues/expiresTokens'; import { diff --git a/src/systems/slates/apps/registry/vitest.e2e.config.ts b/src/systems/slates/apps/registry/vitest.e2e.config.ts index e94b22be2..bd8dc65bc 100644 --- a/src/systems/slates/apps/registry/vitest.e2e.config.ts +++ b/src/systems/slates/apps/registry/vitest.e2e.config.ts @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv, withAliases } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv, withAliases } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/slates/clients/registry-internal/dts-bundle-generator.config.json b/src/systems/slates/clients/registry-internal/dts-bundle-generator.config.json index 51547a10f..023f67db9 100644 --- a/src/systems/slates/clients/registry-internal/dts-bundle-generator.config.json +++ b/src/systems/slates/clients/registry-internal/dts-bundle-generator.config.json @@ -9,9 +9,6 @@ "noCheck": true, "libraries": { "inlinedLibraries": [ - "@lowerdeck/rpc-client", - "@lowerdeck/rpc-server", - "@lowerdeck/validation", "@metorial-platform-systems/object-storage-client" ] } diff --git a/src/systems/slates/clients/registry-internal/package.json b/src/systems/slates/clients/registry-internal/package.json index 779c7720d..f1663e0a4 100644 --- a/src/systems/slates/clients/registry-internal/package.json +++ b/src/systems/slates/clients/registry-internal/package.json @@ -27,12 +27,12 @@ "scripts": { "test": "vitest run --passWithNoTests", "lint": "prettier src/**/*.ts --check", - "build:client": "rm -rf ./dist && microbundle && dts-bundle-generator --config dts-bundle-generator.config.json", + "build:client": "rm -rf ./dist && microbundle && dts-bundle-generator --config dts-bundle-generator.config.json --external-imports @mtsrc/rpc-client @mtsrc/rpc-server @mtsrc/validation", "prepublish": "bun run build:client", "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4" + "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { "dts-bundle-generator": "^9.5.1", diff --git a/src/systems/slates/clients/registry-internal/src/index.ts b/src/systems/slates/clients/registry-internal/src/index.ts index 2c0727e03..5681e5d22 100644 --- a/src/systems/slates/clients/registry-internal/src/index.ts +++ b/src/systems/slates/clients/registry-internal/src/index.ts @@ -1,5 +1,5 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import type { ClientOpts } from '@lowerdeck/rpc-client/dist/shared/clientBuilder'; +import { createClient } from '@mtsrc/rpc-client'; +import type { ClientOpts } from '@mtsrc/rpc-client/dist/shared/clientBuilder'; import type { SlatesRegistryClient } from '../../../apps/registry/src/apis/internal'; export let createSlatesRegistryInternalClient = (o: ClientOpts): SlatesRegistryClient => diff --git a/src/systems/slates/clients/registry-internal/tsconfig.dts.json b/src/systems/slates/clients/registry-internal/tsconfig.dts.json index 985e9cd22..cf8fae4bf 100644 --- a/src/systems/slates/clients/registry-internal/tsconfig.dts.json +++ b/src/systems/slates/clients/registry-internal/tsconfig.dts.json @@ -5,7 +5,20 @@ "skipLibCheck": true, "noEmit": true, "skipDefaultLibCheck": true, - "types": [] + "types": [], + "moduleResolution": "bundler", + "baseUrl": ".", + "paths": { + "@mtsrc/validation": ["../../../../_shared/util/validation/src/index.ts"], + "@mtsrc/rpc-client": ["../../../../_shared/rpc/rpc-client/src/index.ts"], + "@mtsrc/rpc-server": ["../../../../_shared/rpc/rpc-server/src/index.ts"] + } }, + "include": [ + "src/**/*", + "../../../../_shared/util/validation/src/**/*", + "../../../../_shared/rpc/rpc-client/src/**/*", + "../../../../_shared/rpc/rpc-server/src/**/*" + ], "exclude": ["dist", "node_modules", "../../node_modules/bun-types"] } diff --git a/src/systems/slates/clients/registry/dts-bundle-generator.config.json b/src/systems/slates/clients/registry/dts-bundle-generator.config.json index 51547a10f..023f67db9 100644 --- a/src/systems/slates/clients/registry/dts-bundle-generator.config.json +++ b/src/systems/slates/clients/registry/dts-bundle-generator.config.json @@ -9,9 +9,6 @@ "noCheck": true, "libraries": { "inlinedLibraries": [ - "@lowerdeck/rpc-client", - "@lowerdeck/rpc-server", - "@lowerdeck/validation", "@metorial-platform-systems/object-storage-client" ] } diff --git a/src/systems/slates/clients/registry/package.json b/src/systems/slates/clients/registry/package.json index 80a447828..63378952c 100644 --- a/src/systems/slates/clients/registry/package.json +++ b/src/systems/slates/clients/registry/package.json @@ -27,12 +27,12 @@ "scripts": { "test": "vitest run --passWithNoTests", "lint": "prettier src/**/*.ts --check", - "build:client": "rm -rf ./dist && microbundle && dts-bundle-generator --config dts-bundle-generator.config.json", + "build:client": "rm -rf ./dist && microbundle && dts-bundle-generator --config dts-bundle-generator.config.json --external-imports @mtsrc/rpc-client @mtsrc/rpc-server @mtsrc/validation", "prepublish": "bun run build:client", "typecheck": "tsc --noEmit" }, "dependencies": { - "@lowerdeck/rpc-client": "^1.1.4" + "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { "dts-bundle-generator": "^9.5.1", diff --git a/src/systems/slates/clients/registry/tsconfig.dts.json b/src/systems/slates/clients/registry/tsconfig.dts.json index 985e9cd22..cf8fae4bf 100644 --- a/src/systems/slates/clients/registry/tsconfig.dts.json +++ b/src/systems/slates/clients/registry/tsconfig.dts.json @@ -5,7 +5,20 @@ "skipLibCheck": true, "noEmit": true, "skipDefaultLibCheck": true, - "types": [] + "types": [], + "moduleResolution": "bundler", + "baseUrl": ".", + "paths": { + "@mtsrc/validation": ["../../../../_shared/util/validation/src/index.ts"], + "@mtsrc/rpc-client": ["../../../../_shared/rpc/rpc-client/src/index.ts"], + "@mtsrc/rpc-server": ["../../../../_shared/rpc/rpc-server/src/index.ts"] + } }, + "include": [ + "src/**/*", + "../../../../_shared/util/validation/src/**/*", + "../../../../_shared/rpc/rpc-client/src/**/*", + "../../../../_shared/rpc/rpc-server/src/**/*" + ], "exclude": ["dist", "node_modules", "../../node_modules/bun-types"] } diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index 27cebe4c8..1c0b78fc5 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -34,7 +34,7 @@ WORKDIR /app/src/systems/subspace/apps/controller CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/subspace/apps/controller/package.json b/src/systems/subspace/apps/controller/package.json index 7420c7fb1..8bf5c45c4 100644 --- a/src/systems/subspace/apps/controller/package.json +++ b/src/systems/subspace/apps/controller/package.json @@ -16,8 +16,6 @@ "test:watch": "bunx vitest watch" }, "devDependencies": { - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/testing-tools": "^1.0.1", "@metorial-platform-systems/shuttle-client": "^1.0.0", "@metorial-subspace/connection-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", @@ -26,26 +24,15 @@ "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", "express": "^5.2.1", - "vitest": "4.0.17" + "vitest": "4.0.17", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" }, "dependencies": { "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", "@metorial-platform-systems/signal-client": "workspace:*", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/module-agent": "^1.0.0", @@ -69,6 +56,19 @@ "@types/minimatch": "^6.0.0", "@vercel/ncc": "^0.38.3", "hono": "^4.11.3", - "zod": "^4.3.6" + "zod": "^4.3.6", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0" } } diff --git a/src/systems/subspace/apps/controller/src/connection/api/index.ts b/src/systems/subspace/apps/controller/src/connection/api/index.ts index 177092b07..6f76aef03 100644 --- a/src/systems/subspace/apps/controller/src/connection/api/index.ts +++ b/src/systems/subspace/apps/controller/src/connection/api/index.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { mcpRouter } from './mcp'; import { metorialIntegrationProtocolRouter } from './metorialIntegrationProtocol'; diff --git a/src/systems/subspace/apps/controller/src/connection/api/mcp.ts b/src/systems/subspace/apps/controller/src/connection/api/mcp.ts index 4eaff23c6..7dba40e84 100644 --- a/src/systems/subspace/apps/controller/src/connection/api/mcp.ts +++ b/src/systems/subspace/apps/controller/src/connection/api/mcp.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { createHono } from '@lowerdeck/hono'; +import { delay } from '@mtsrc/delay'; +import { createHono } from '@mtsrc/hono'; import { McpConnection } from '@metorial-subspace/module-connection'; import { streamSSE } from 'hono/streaming'; import z from 'zod'; diff --git a/src/systems/subspace/apps/controller/src/connection/api/metorialIntegrationProtocol.ts b/src/systems/subspace/apps/controller/src/connection/api/metorialIntegrationProtocol.ts index eaacd72b5..93ec25a94 100644 --- a/src/systems/subspace/apps/controller/src/connection/api/metorialIntegrationProtocol.ts +++ b/src/systems/subspace/apps/controller/src/connection/api/metorialIntegrationProtocol.ts @@ -1,5 +1,5 @@ -import { preconditionFailedError, ServiceError } from '@lowerdeck/error'; -import { createHono } from '@lowerdeck/hono'; +import { preconditionFailedError, ServiceError } from '@mtsrc/error'; +import { createHono } from '@mtsrc/hono'; import { messageOutputToToolCall } from '@metorial-subspace/db'; import { connectionPresenter, diff --git a/src/systems/subspace/apps/controller/src/connection/lib/validator.ts b/src/systems/subspace/apps/controller/src/connection/lib/validator.ts index 9fc06a32f..9b0556be0 100644 --- a/src/systems/subspace/apps/controller/src/connection/lib/validator.ts +++ b/src/systems/subspace/apps/controller/src/connection/lib/validator.ts @@ -1,5 +1,5 @@ import { zValidator } from '@hono/zod-validator'; -import { validationError } from '@lowerdeck/error'; +import { validationError } from '@mtsrc/error'; import type { ValidationTargets } from 'hono'; import type z from 'zod'; diff --git a/src/systems/subspace/apps/controller/src/connection/server.ts b/src/systems/subspace/apps/controller/src/connection/server.ts index 16d8a4521..e4646e9d1 100644 --- a/src/systems/subspace/apps/controller/src/connection/server.ts +++ b/src/systems/subspace/apps/controller/src/connection/server.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import { api } from './api'; import { websocket } from './api/metorialIntegrationProtocol'; diff --git a/src/systems/subspace/apps/controller/src/connection/tests/mcp.e2e.test.ts b/src/systems/subspace/apps/controller/src/connection/tests/mcp.e2e.test.ts index a235964c3..a7223c8ca 100644 --- a/src/systems/subspace/apps/controller/src/connection/tests/mcp.e2e.test.ts +++ b/src/systems/subspace/apps/controller/src/connection/tests/mcp.e2e.test.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; import { applySessionProviderNameTemplate } from '@metorial-subspace/module-session/src/lib/sessionProviderNameTemplate'; import { describe, expect, it } from 'vitest'; diff --git a/src/systems/subspace/apps/controller/src/controllers/_app.ts b/src/systems/subspace/apps/controller/src/controllers/_app.ts index fb666c9e6..86dee7a0c 100644 --- a/src/systems/subspace/apps/controller/src/controllers/_app.ts +++ b/src/systems/subspace/apps/controller/src/controllers/_app.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Group } from '@lowerdeck/rpc-server'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Group } from '@mtsrc/rpc-server'; import { solutionService } from '@metorial-subspace/module-tenant'; export let appWithoutSolution = new Group(); diff --git a/src/systems/subspace/apps/controller/src/controllers/_dateFilter.ts b/src/systems/subspace/apps/controller/src/controllers/_dateFilter.ts index 7108dec45..b6c647510 100644 --- a/src/systems/subspace/apps/controller/src/controllers/_dateFilter.ts +++ b/src/systems/subspace/apps/controller/src/controllers/_dateFilter.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; export let createdAtValidator = v.optional( v.object({ diff --git a/src/systems/subspace/apps/controller/src/controllers/actor.ts b/src/systems/subspace/apps/controller/src/controllers/actor.ts index a76a34625..3283ada07 100644 --- a/src/systems/subspace/apps/controller/src/controllers/actor.ts +++ b/src/systems/subspace/apps/controller/src/controllers/actor.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { actorService } from '@metorial-subspace/module-tenant'; import { actorPresenter } from '@metorial-subspace/presenters'; import { tenantWithoutEnvironmentApp } from './tenant'; diff --git a/src/systems/subspace/apps/controller/src/controllers/adminProviderTelemetry.ts b/src/systems/subspace/apps/controller/src/controllers/adminProviderTelemetry.ts index c117a4328..d2c785967 100644 --- a/src/systems/subspace/apps/controller/src/controllers/adminProviderTelemetry.ts +++ b/src/systems/subspace/apps/controller/src/controllers/adminProviderTelemetry.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { db } from '@metorial-subspace/db'; import { providerService } from '@metorial-subspace/module-catalog'; import { diff --git a/src/systems/subspace/apps/controller/src/controllers/agent.ts b/src/systems/subspace/apps/controller/src/controllers/agent.ts index 61cd884fe..9b22110a0 100644 --- a/src/systems/subspace/apps/controller/src/controllers/agent.ts +++ b/src/systems/subspace/apps/controller/src/controllers/agent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { agentService } from '@metorial-subspace/module-agent'; import { agentPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/agentClient.ts b/src/systems/subspace/apps/controller/src/controllers/agentClient.ts index a15d3e410..e94e4f359 100644 --- a/src/systems/subspace/apps/controller/src/controllers/agentClient.ts +++ b/src/systems/subspace/apps/controller/src/controllers/agentClient.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { agentClientService } from '@metorial-subspace/module-agent'; import { agentClientPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/agentInstance.ts b/src/systems/subspace/apps/controller/src/controllers/agentInstance.ts index 443437737..65fe6331a 100644 --- a/src/systems/subspace/apps/controller/src/controllers/agentInstance.ts +++ b/src/systems/subspace/apps/controller/src/controllers/agentInstance.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { agentInstanceService } from '@metorial-subspace/module-agent'; import { agentInstancePresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/authConfigError.ts b/src/systems/subspace/apps/controller/src/controllers/authConfigError.ts index 7788936c4..063a800d8 100644 --- a/src/systems/subspace/apps/controller/src/controllers/authConfigError.ts +++ b/src/systems/subspace/apps/controller/src/controllers/authConfigError.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { authConfigErrorService } from '@metorial-subspace/module-auth'; import { authConfigErrorPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/authConfigErrorGlobal.ts b/src/systems/subspace/apps/controller/src/controllers/authConfigErrorGlobal.ts index 43abc839c..06e6aadf9 100644 --- a/src/systems/subspace/apps/controller/src/controllers/authConfigErrorGlobal.ts +++ b/src/systems/subspace/apps/controller/src/controllers/authConfigErrorGlobal.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { authConfigErrorGlobalService } from '@metorial-subspace/module-auth'; import { authConfigErrorGlobalPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/authConfigEvent.ts b/src/systems/subspace/apps/controller/src/controllers/authConfigEvent.ts index 3d24795d6..80ada536d 100644 --- a/src/systems/subspace/apps/controller/src/controllers/authConfigEvent.ts +++ b/src/systems/subspace/apps/controller/src/controllers/authConfigEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { authConfigEventService } from '@metorial-subspace/module-auth'; import { authConfigEventPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/brand.ts b/src/systems/subspace/apps/controller/src/controllers/brand.ts index 9cb4f980f..9eaba6c9e 100644 --- a/src/systems/subspace/apps/controller/src/controllers/brand.ts +++ b/src/systems/subspace/apps/controller/src/controllers/brand.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import type { EntityImage } from '@metorial-subspace/db'; import { brandService, tenantService } from '@metorial-subspace/module-tenant'; import { brandPresenter } from '@metorial-subspace/presenters'; diff --git a/src/systems/subspace/apps/controller/src/controllers/bucket.ts b/src/systems/subspace/apps/controller/src/controllers/bucket.ts index db1a28e4a..6cc085f94 100644 --- a/src/systems/subspace/apps/controller/src/controllers/bucket.ts +++ b/src/systems/subspace/apps/controller/src/controllers/bucket.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { bucketService } from '@metorial-subspace/module-custom-provider'; import { bucketPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/callback.ts b/src/systems/subspace/apps/controller/src/controllers/callback.ts index 5ff1c2cb9..828a5d590 100644 --- a/src/systems/subspace/apps/controller/src/controllers/callback.ts +++ b/src/systems/subspace/apps/controller/src/controllers/callback.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { callbackService } from '@metorial-subspace/module-callback'; import { providerDeploymentService } from '@metorial-subspace/module-deployment'; import { callbackPresenter } from '@metorial-subspace/presenters'; diff --git a/src/systems/subspace/apps/controller/src/controllers/callbackDelivery.ts b/src/systems/subspace/apps/controller/src/controllers/callbackDelivery.ts index 9be7c3c88..85ff909ee 100644 --- a/src/systems/subspace/apps/controller/src/controllers/callbackDelivery.ts +++ b/src/systems/subspace/apps/controller/src/controllers/callbackDelivery.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { callbackDeliveryService } from '@metorial-subspace/module-callback'; import { callbackDeliveryListPresenter, diff --git a/src/systems/subspace/apps/controller/src/controllers/callbackDeliveryAttempt.ts b/src/systems/subspace/apps/controller/src/controllers/callbackDeliveryAttempt.ts index ad3f28fa9..d94d3af98 100644 --- a/src/systems/subspace/apps/controller/src/controllers/callbackDeliveryAttempt.ts +++ b/src/systems/subspace/apps/controller/src/controllers/callbackDeliveryAttempt.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { callbackDeliveryService } from '@metorial-subspace/module-callback'; import { callbackDeliveryAttemptListPresenter, diff --git a/src/systems/subspace/apps/controller/src/controllers/callbackDestination.ts b/src/systems/subspace/apps/controller/src/controllers/callbackDestination.ts index db1c84b02..a7954ed3d 100644 --- a/src/systems/subspace/apps/controller/src/controllers/callbackDestination.ts +++ b/src/systems/subspace/apps/controller/src/controllers/callbackDestination.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { callbackDestinationService } from '@metorial-subspace/module-callback'; import { callbackDestinationPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/callbackEvent.ts b/src/systems/subspace/apps/controller/src/controllers/callbackEvent.ts index c36b5e19a..dfe016450 100644 --- a/src/systems/subspace/apps/controller/src/controllers/callbackEvent.ts +++ b/src/systems/subspace/apps/controller/src/controllers/callbackEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { callbackEventService } from '@metorial-subspace/module-callback'; import { callbackEventListPresenter, diff --git a/src/systems/subspace/apps/controller/src/controllers/callbackInstance.ts b/src/systems/subspace/apps/controller/src/controllers/callbackInstance.ts index 109105004..dba683b8b 100644 --- a/src/systems/subspace/apps/controller/src/controllers/callbackInstance.ts +++ b/src/systems/subspace/apps/controller/src/controllers/callbackInstance.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerAuthConfigService } from '@metorial-subspace/module-auth'; import { callbackInstanceService, diff --git a/src/systems/subspace/apps/controller/src/controllers/containerRegistry.ts b/src/systems/subspace/apps/controller/src/controllers/containerRegistry.ts index 12e9f6816..eea3428a8 100644 --- a/src/systems/subspace/apps/controller/src/controllers/containerRegistry.ts +++ b/src/systems/subspace/apps/controller/src/controllers/containerRegistry.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { containerRegistryPresenter, containerRegistryService diff --git a/src/systems/subspace/apps/controller/src/controllers/containerRepository.ts b/src/systems/subspace/apps/controller/src/controllers/containerRepository.ts index 627a59195..70573de90 100644 --- a/src/systems/subspace/apps/controller/src/controllers/containerRepository.ts +++ b/src/systems/subspace/apps/controller/src/controllers/containerRepository.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { containerRepositoryPresenter, containerRepositoryService diff --git a/src/systems/subspace/apps/controller/src/controllers/customProvider.ts b/src/systems/subspace/apps/controller/src/controllers/customProvider.ts index b4bda1e66..00e171605 100644 --- a/src/systems/subspace/apps/controller/src/controllers/customProvider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/customProvider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { customProviderService } from '@metorial-subspace/module-custom-provider'; import { actorService } from '@metorial-subspace/module-tenant'; import { customProviderPresenter } from '@metorial-subspace/presenters'; diff --git a/src/systems/subspace/apps/controller/src/controllers/customProviderCommit.ts b/src/systems/subspace/apps/controller/src/controllers/customProviderCommit.ts index e2337b7d8..cbc6147e7 100644 --- a/src/systems/subspace/apps/controller/src/controllers/customProviderCommit.ts +++ b/src/systems/subspace/apps/controller/src/controllers/customProviderCommit.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { customProviderCommitService, customProviderEnvironmentService, diff --git a/src/systems/subspace/apps/controller/src/controllers/customProviderDeployment.ts b/src/systems/subspace/apps/controller/src/controllers/customProviderDeployment.ts index abffa99fe..b4c910258 100644 --- a/src/systems/subspace/apps/controller/src/controllers/customProviderDeployment.ts +++ b/src/systems/subspace/apps/controller/src/controllers/customProviderDeployment.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { customProviderDeploymentService } from '@metorial-subspace/module-custom-provider'; import { customProviderDeploymentPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/customProviderEnvironment.ts b/src/systems/subspace/apps/controller/src/controllers/customProviderEnvironment.ts index 3c91b92e0..ff7e3de76 100644 --- a/src/systems/subspace/apps/controller/src/controllers/customProviderEnvironment.ts +++ b/src/systems/subspace/apps/controller/src/controllers/customProviderEnvironment.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { customProviderEnvironmentService } from '@metorial-subspace/module-custom-provider'; import { customProviderEnvironmentPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/customProviderVersion.ts b/src/systems/subspace/apps/controller/src/controllers/customProviderVersion.ts index 3fa07af3e..22940d538 100644 --- a/src/systems/subspace/apps/controller/src/controllers/customProviderVersion.ts +++ b/src/systems/subspace/apps/controller/src/controllers/customProviderVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { customProviderService, customProviderVersionService diff --git a/src/systems/subspace/apps/controller/src/controllers/environment.ts b/src/systems/subspace/apps/controller/src/controllers/environment.ts index f6d8288fa..5bb774621 100644 --- a/src/systems/subspace/apps/controller/src/controllers/environment.ts +++ b/src/systems/subspace/apps/controller/src/controllers/environment.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { environmentService } from '@metorial-subspace/module-tenant'; import { environmentPresenter } from '@metorial-subspace/presenters'; import { tenantWithoutEnvironmentApp } from './tenant'; diff --git a/src/systems/subspace/apps/controller/src/controllers/ephemeralManagedSession.ts b/src/systems/subspace/apps/controller/src/controllers/ephemeralManagedSession.ts index 26d221250..ae6fe6627 100644 --- a/src/systems/subspace/apps/controller/src/controllers/ephemeralManagedSession.ts +++ b/src/systems/subspace/apps/controller/src/controllers/ephemeralManagedSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { ephemeralManagedSessionService, sessionTemplateService diff --git a/src/systems/subspace/apps/controller/src/controllers/identity.ts b/src/systems/subspace/apps/controller/src/controllers/identity.ts index bed34f6c4..b93525270 100644 --- a/src/systems/subspace/apps/controller/src/controllers/identity.ts +++ b/src/systems/subspace/apps/controller/src/controllers/identity.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { identityActorService, identityService } from '@metorial-subspace/module-identity'; import { identityPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/identityActor.ts b/src/systems/subspace/apps/controller/src/controllers/identityActor.ts index 010101fa2..2b509cb3e 100644 --- a/src/systems/subspace/apps/controller/src/controllers/identityActor.ts +++ b/src/systems/subspace/apps/controller/src/controllers/identityActor.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { identityActorService } from '@metorial-subspace/module-identity'; import { identityActorPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/identityCredential.ts b/src/systems/subspace/apps/controller/src/controllers/identityCredential.ts index b555e125b..295d72d83 100644 --- a/src/systems/subspace/apps/controller/src/controllers/identityCredential.ts +++ b/src/systems/subspace/apps/controller/src/controllers/identityCredential.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { identityCredentialService, identityDelegationConfigService, diff --git a/src/systems/subspace/apps/controller/src/controllers/identityDelegation.ts b/src/systems/subspace/apps/controller/src/controllers/identityDelegation.ts index c71b01300..314d16568 100644 --- a/src/systems/subspace/apps/controller/src/controllers/identityDelegation.ts +++ b/src/systems/subspace/apps/controller/src/controllers/identityDelegation.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { identityActorService, identityDelegationService, diff --git a/src/systems/subspace/apps/controller/src/controllers/identityDelegationConfig.ts b/src/systems/subspace/apps/controller/src/controllers/identityDelegationConfig.ts index 642f16979..521614477 100644 --- a/src/systems/subspace/apps/controller/src/controllers/identityDelegationConfig.ts +++ b/src/systems/subspace/apps/controller/src/controllers/identityDelegationConfig.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { identityDelegationConfigService } from '@metorial-subspace/module-identity'; import { identityDelegationConfigPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/identityDelegationRequest.ts b/src/systems/subspace/apps/controller/src/controllers/identityDelegationRequest.ts index 0577c9159..92ae29cfc 100644 --- a/src/systems/subspace/apps/controller/src/controllers/identityDelegationRequest.ts +++ b/src/systems/subspace/apps/controller/src/controllers/identityDelegationRequest.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { identityActorService, identityDelegationRequestService, diff --git a/src/systems/subspace/apps/controller/src/controllers/index.ts b/src/systems/subspace/apps/controller/src/controllers/index.ts index 937fdfbc0..890ff382c 100644 --- a/src/systems/subspace/apps/controller/src/controllers/index.ts +++ b/src/systems/subspace/apps/controller/src/controllers/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, type InferClient, rpcMux } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, type InferClient, rpcMux } from '@mtsrc/rpc-server'; import { app } from './_app'; import { actorController } from './actor'; import { agentController } from './agent'; diff --git a/src/systems/subspace/apps/controller/src/controllers/integration.ts b/src/systems/subspace/apps/controller/src/controllers/integration.ts index f2b9130f9..f307321f9 100644 --- a/src/systems/subspace/apps/controller/src/controllers/integration.ts +++ b/src/systems/subspace/apps/controller/src/controllers/integration.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { integrationService } from '@metorial-subspace/module-integration'; import { integrationPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/integrationInstance.ts b/src/systems/subspace/apps/controller/src/controllers/integrationInstance.ts index 1054a5652..d166d3c5b 100644 --- a/src/systems/subspace/apps/controller/src/controllers/integrationInstance.ts +++ b/src/systems/subspace/apps/controller/src/controllers/integrationInstance.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { integrationInstanceService, integrationService diff --git a/src/systems/subspace/apps/controller/src/controllers/integrationInstanceGroup.ts b/src/systems/subspace/apps/controller/src/controllers/integrationInstanceGroup.ts index db3eff37a..c7849873d 100644 --- a/src/systems/subspace/apps/controller/src/controllers/integrationInstanceGroup.ts +++ b/src/systems/subspace/apps/controller/src/controllers/integrationInstanceGroup.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { integrationInstanceGroupService } from '@metorial-subspace/module-integration'; import { integrationInstanceGroupPresenter, diff --git a/src/systems/subspace/apps/controller/src/controllers/integrationInstanceGroupProvider.ts b/src/systems/subspace/apps/controller/src/controllers/integrationInstanceGroupProvider.ts index bf74f1934..3fd8c4ec0 100644 --- a/src/systems/subspace/apps/controller/src/controllers/integrationInstanceGroupProvider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/integrationInstanceGroupProvider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { integrationInstanceGroupProviderService, integrationInstanceGroupService diff --git a/src/systems/subspace/apps/controller/src/controllers/integrationInstanceProvider.ts b/src/systems/subspace/apps/controller/src/controllers/integrationInstanceProvider.ts index 6ccdb88be..b29036297 100644 --- a/src/systems/subspace/apps/controller/src/controllers/integrationInstanceProvider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/integrationInstanceProvider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { integrationInstanceProviderService, integrationInstanceService diff --git a/src/systems/subspace/apps/controller/src/controllers/integrationProvider.ts b/src/systems/subspace/apps/controller/src/controllers/integrationProvider.ts index 13ad4e406..1c4e96e8d 100644 --- a/src/systems/subspace/apps/controller/src/controllers/integrationProvider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/integrationProvider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { integrationProviderService, integrationService diff --git a/src/systems/subspace/apps/controller/src/controllers/integrationSetupSession.ts b/src/systems/subspace/apps/controller/src/controllers/integrationSetupSession.ts index b31209e48..69749ae61 100644 --- a/src/systems/subspace/apps/controller/src/controllers/integrationSetupSession.ts +++ b/src/systems/subspace/apps/controller/src/controllers/integrationSetupSession.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { integrationService, integrationSetupSessionService diff --git a/src/systems/subspace/apps/controller/src/controllers/integrationVersion.ts b/src/systems/subspace/apps/controller/src/controllers/integrationVersion.ts index 70807e91b..265239626 100644 --- a/src/systems/subspace/apps/controller/src/controllers/integrationVersion.ts +++ b/src/systems/subspace/apps/controller/src/controllers/integrationVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { integrationVersionService } from '@metorial-subspace/module-integration'; import { integrationVersionPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/magicMcpBacking.ts b/src/systems/subspace/apps/controller/src/controllers/magicMcpBacking.ts index 8ded896f7..c56159bc0 100644 --- a/src/systems/subspace/apps/controller/src/controllers/magicMcpBacking.ts +++ b/src/systems/subspace/apps/controller/src/controllers/magicMcpBacking.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v, type ValidationTypeValue } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v, type ValidationTypeValue } from '@mtsrc/validation'; import { magicMcpEndpointBackingService, magicMcpServerBackingService, diff --git a/src/systems/subspace/apps/controller/src/controllers/magicMcpServerProvider.ts b/src/systems/subspace/apps/controller/src/controllers/magicMcpServerProvider.ts index 847b50cbb..1b2710ba0 100644 --- a/src/systems/subspace/apps/controller/src/controllers/magicMcpServerProvider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/magicMcpServerProvider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { magicMcpServerProviderService } from '@metorial-subspace/module-integration'; import { magicMcpServerProviderPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/managedProviderAuthCredentials.ts b/src/systems/subspace/apps/controller/src/controllers/managedProviderAuthCredentials.ts index 45074d927..2ce17d717 100644 --- a/src/systems/subspace/apps/controller/src/controllers/managedProviderAuthCredentials.ts +++ b/src/systems/subspace/apps/controller/src/controllers/managedProviderAuthCredentials.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { managedProviderAuthCredentialsService } from '@metorial-subspace/module-auth'; import { managedProviderAuthCredentialsPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/networkingRuleset.ts b/src/systems/subspace/apps/controller/src/controllers/networkingRuleset.ts index b36c6f3fd..077f796be 100644 --- a/src/systems/subspace/apps/controller/src/controllers/networkingRuleset.ts +++ b/src/systems/subspace/apps/controller/src/controllers/networkingRuleset.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { networkingRulesetPresenter, networkingRulesetService diff --git a/src/systems/subspace/apps/controller/src/controllers/provider.ts b/src/systems/subspace/apps/controller/src/controllers/provider.ts index 35e529bd5..82b9fd468 100644 --- a/src/systems/subspace/apps/controller/src/controllers/provider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/provider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerService } from '@metorial-subspace/module-catalog'; import { providerPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerAuthConfig.ts b/src/systems/subspace/apps/controller/src/controllers/providerAuthConfig.ts index 4086c4fcb..dfa783e5d 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerAuthConfig.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerAuthConfig.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerAuthConfigService } from '@metorial-subspace/module-auth'; import { providerService, providerVersionService } from '@metorial-subspace/module-catalog'; import { providerDeploymentService } from '@metorial-subspace/module-deployment'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerAuthCredentials.ts b/src/systems/subspace/apps/controller/src/controllers/providerAuthCredentials.ts index 577b28b35..189817f64 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerAuthCredentials.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerAuthCredentials.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerAuthCredentialsService } from '@metorial-subspace/module-auth'; import { providerService } from '@metorial-subspace/module-catalog'; import { providerAuthCredentialsPresenter } from '@metorial-subspace/presenters'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerAuthExport.ts b/src/systems/subspace/apps/controller/src/controllers/providerAuthExport.ts index 45ac516a3..8819e8959 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerAuthExport.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerAuthExport.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerAuthConfigService, providerAuthExportService diff --git a/src/systems/subspace/apps/controller/src/controllers/providerAuthImport.ts b/src/systems/subspace/apps/controller/src/controllers/providerAuthImport.ts index b4849eb4f..11b5ea99e 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerAuthImport.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerAuthImport.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import type { Environment, Solution, Tenant } from '@metorial-subspace/db'; import { providerAuthConfigService, diff --git a/src/systems/subspace/apps/controller/src/controllers/providerAuthMethod.ts b/src/systems/subspace/apps/controller/src/controllers/providerAuthMethod.ts index 8e1495628..037fe0eeb 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerAuthMethod.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerAuthMethod.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerAuthMethodService, providerVersionService diff --git a/src/systems/subspace/apps/controller/src/controllers/providerCategory.ts b/src/systems/subspace/apps/controller/src/controllers/providerCategory.ts index a4a855abe..8b61564d1 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerCategory.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerCategory.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerListingCategoryService } from '@metorial-subspace/module-catalog'; import { providerListingCategoryPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerCollection.ts b/src/systems/subspace/apps/controller/src/controllers/providerCollection.ts index 750fe2691..5d08701b0 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerCollection.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerCollection.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerListingCollectionService } from '@metorial-subspace/module-catalog'; import { providerListingCollectionPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerConfig.ts b/src/systems/subspace/apps/controller/src/controllers/providerConfig.ts index d17eac177..7d85bf0d2 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerConfig.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerConfig.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerService, providerVersionService } from '@metorial-subspace/module-catalog'; import { providerConfigService, diff --git a/src/systems/subspace/apps/controller/src/controllers/providerConfigVault.ts b/src/systems/subspace/apps/controller/src/controllers/providerConfigVault.ts index 7f5cb6cf7..8f34c251a 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerConfigVault.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerConfigVault.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerService } from '@metorial-subspace/module-catalog'; import { providerConfigVaultService, diff --git a/src/systems/subspace/apps/controller/src/controllers/providerDeployment.ts b/src/systems/subspace/apps/controller/src/controllers/providerDeployment.ts index 16fa9d9c2..3a11db35d 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerDeployment.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerDeployment.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerService, providerVersionService } from '@metorial-subspace/module-catalog'; import { providerDeploymentService } from '@metorial-subspace/module-deployment'; import { normalizeToolFilters } from '@metorial-subspace/module-provider-internal'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerGroup.ts b/src/systems/subspace/apps/controller/src/controllers/providerGroup.ts index e69214b6b..f5b70e68d 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerGroup.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerGroup.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerListingGroupService, providerListingService diff --git a/src/systems/subspace/apps/controller/src/controllers/providerInvocation.ts b/src/systems/subspace/apps/controller/src/controllers/providerInvocation.ts index 95e418a9d..0c891031f 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerInvocation.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerInvocation.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { providerInvocationService } from '@metorial-subspace/module-session'; import { providerInvocationPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerListing.ts b/src/systems/subspace/apps/controller/src/controllers/providerListing.ts index a168802c6..bf661cb4d 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerListing.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerListing.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { type ProviderListingOrderByUse, providerListingService diff --git a/src/systems/subspace/apps/controller/src/controllers/providerOAuthSetup.ts b/src/systems/subspace/apps/controller/src/controllers/providerOAuthSetup.ts index 067833f85..465f55fac 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerOAuthSetup.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerOAuthSetup.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerAuthCredentialsService, providerOAuthSetupService diff --git a/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveAuthConfig.ts b/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveAuthConfig.ts index b63b12fc6..38985dc77 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveAuthConfig.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveAuthConfig.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { v, type ValidationTypeValue } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { v, type ValidationTypeValue } from '@mtsrc/validation'; import type { TenantSelector } from '@metorial-subspace/list-utils'; import { providerAuthConfigService } from '@metorial-subspace/module-auth'; import { providerService } from '@metorial-subspace/module-catalog'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveConfig.ts b/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveConfig.ts index 3feaad7ed..2d1e2d82d 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveConfig.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveConfig.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { v, type ValidationTypeValue } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { v, type ValidationTypeValue } from '@mtsrc/validation'; import type { TenantSelector } from '@metorial-subspace/list-utils'; import { providerService } from '@metorial-subspace/module-catalog'; import { diff --git a/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveDeployment.ts b/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveDeployment.ts index 4f2c32f8e..37827210c 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveDeployment.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveDeployment.ts @@ -1,4 +1,4 @@ -import { v, type ValidationTypeValue } from '@lowerdeck/validation'; +import { v, type ValidationTypeValue } from '@mtsrc/validation'; import type { TenantSelector } from '@metorial-subspace/list-utils'; import { providerService, providerVersionService } from '@metorial-subspace/module-catalog'; import { providerDeploymentService } from '@metorial-subspace/module-deployment'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveSessionProvider.ts b/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveSessionProvider.ts index c96a0b097..1bab95233 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveSessionProvider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerResourceValidators/resolveSessionProvider.ts @@ -1,4 +1,4 @@ -import type { ValidationTypeValue } from '@lowerdeck/validation'; +import type { ValidationTypeValue } from '@mtsrc/validation'; import type { TenantSelector } from '@metorial-subspace/list-utils'; import { resolveAuthConfig, type authConfigValidator } from './resolveAuthConfig'; import { resolveConfig, type configValidator } from './resolveConfig'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerRun.ts b/src/systems/subspace/apps/controller/src/controllers/providerRun.ts index 89c3bcf5c..ecda7a990 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerRun.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerRun.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerRunLogsService, providerRunService } from '@metorial-subspace/module-session'; import { providerRunPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerRunUsageRecord.ts b/src/systems/subspace/apps/controller/src/controllers/providerRunUsageRecord.ts index f66f0bab2..786b63781 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerRunUsageRecord.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerRunUsageRecord.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerRunUsageRecordService } from '@metorial-subspace/module-session'; import { providerRunUsageRecordPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerSetupSession.ts b/src/systems/subspace/apps/controller/src/controllers/providerSetupSession.ts index 12be3eebb..e2c3ef944 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerSetupSession.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerSetupSession.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerAuthCredentialsService, providerSetupSessionService diff --git a/src/systems/subspace/apps/controller/src/controllers/providerSpecification.ts b/src/systems/subspace/apps/controller/src/controllers/providerSpecification.ts index aa4844518..fa0e1f656 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerSpecification.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerSpecification.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerSpecificationService } from '@metorial-subspace/module-catalog'; import { providerSpecificationPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerTool.ts b/src/systems/subspace/apps/controller/src/controllers/providerTool.ts index f98846335..40e303075 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerTool.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerTool.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerAuthConfigService, providerAuthCredentialsService diff --git a/src/systems/subspace/apps/controller/src/controllers/providerTrigger.ts b/src/systems/subspace/apps/controller/src/controllers/providerTrigger.ts index 88d7d6c3d..6196d1742 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerTrigger.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerTrigger.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerTriggerService, providerVersionService diff --git a/src/systems/subspace/apps/controller/src/controllers/providerVariant.ts b/src/systems/subspace/apps/controller/src/controllers/providerVariant.ts index 12aca9fc4..1f6cfe1ef 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerVariant.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerVariant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerVariantService } from '@metorial-subspace/module-catalog'; import { providerVariantPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/providerVersion.ts b/src/systems/subspace/apps/controller/src/controllers/providerVersion.ts index 5be148be0..09b6a8a43 100644 --- a/src/systems/subspace/apps/controller/src/controllers/providerVersion.ts +++ b/src/systems/subspace/apps/controller/src/controllers/providerVersion.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { providerVersionService } from '@metorial-subspace/module-catalog'; import { providerVersionPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/publisher.ts b/src/systems/subspace/apps/controller/src/controllers/publisher.ts index f18aaf8c7..dfe91fa93 100644 --- a/src/systems/subspace/apps/controller/src/controllers/publisher.ts +++ b/src/systems/subspace/apps/controller/src/controllers/publisher.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { publisherService } from '@metorial-subspace/module-catalog'; import { publisherPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/scmConnection.ts b/src/systems/subspace/apps/controller/src/controllers/scmConnection.ts index 071635271..c95da4d95 100644 --- a/src/systems/subspace/apps/controller/src/controllers/scmConnection.ts +++ b/src/systems/subspace/apps/controller/src/controllers/scmConnection.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { scmConnectionPresenter, scmConnectionService diff --git a/src/systems/subspace/apps/controller/src/controllers/scmConnectionSetupSession.ts b/src/systems/subspace/apps/controller/src/controllers/scmConnectionSetupSession.ts index 0e057446c..5248d1006 100644 --- a/src/systems/subspace/apps/controller/src/controllers/scmConnectionSetupSession.ts +++ b/src/systems/subspace/apps/controller/src/controllers/scmConnectionSetupSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { scmConnectionSetupSessionPresenter, scmConnectionSetupSessionService diff --git a/src/systems/subspace/apps/controller/src/controllers/scmProvider.ts b/src/systems/subspace/apps/controller/src/controllers/scmProvider.ts index cb50ed9da..d3e225a04 100644 --- a/src/systems/subspace/apps/controller/src/controllers/scmProvider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/scmProvider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { scmProviderPresenter, scmProviderService diff --git a/src/systems/subspace/apps/controller/src/controllers/scmProviderSetupSession.ts b/src/systems/subspace/apps/controller/src/controllers/scmProviderSetupSession.ts index 32c19cef2..f24021d55 100644 --- a/src/systems/subspace/apps/controller/src/controllers/scmProviderSetupSession.ts +++ b/src/systems/subspace/apps/controller/src/controllers/scmProviderSetupSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { scmProviderSetupSessionPresenter, scmProviderSetupSessionService diff --git a/src/systems/subspace/apps/controller/src/controllers/scmPush.ts b/src/systems/subspace/apps/controller/src/controllers/scmPush.ts index 4d30d4c3e..4649e2381 100644 --- a/src/systems/subspace/apps/controller/src/controllers/scmPush.ts +++ b/src/systems/subspace/apps/controller/src/controllers/scmPush.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { scmPushService } from '@metorial-subspace/module-custom-provider'; import { scmPushPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/scmRepository.ts b/src/systems/subspace/apps/controller/src/controllers/scmRepository.ts index b8eadefd1..0730f5f05 100644 --- a/src/systems/subspace/apps/controller/src/controllers/scmRepository.ts +++ b/src/systems/subspace/apps/controller/src/controllers/scmRepository.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { scmAccountPreviewPresenter, scmRepositoryPreviewPresenter, diff --git a/src/systems/subspace/apps/controller/src/controllers/session.ts b/src/systems/subspace/apps/controller/src/controllers/session.ts index 70bcc8e9b..716a78ede 100644 --- a/src/systems/subspace/apps/controller/src/controllers/session.ts +++ b/src/systems/subspace/apps/controller/src/controllers/session.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionService } from '@metorial-subspace/module-session'; import { sessionPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionConnection.ts b/src/systems/subspace/apps/controller/src/controllers/sessionConnection.ts index 8c0f44765..76b8f9a40 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionConnection.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionConnection.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionConnectionService } from '@metorial-subspace/module-session'; import { sessionConnectionPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionError.ts b/src/systems/subspace/apps/controller/src/controllers/sessionError.ts index ebfe12886..216285f14 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionError.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionError.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionErrorService } from '@metorial-subspace/module-session'; import { sessionErrorPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionErrorGlobal.ts b/src/systems/subspace/apps/controller/src/controllers/sessionErrorGlobal.ts index 472753339..e915e4ca8 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionErrorGlobal.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionErrorGlobal.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionErrorGroupService } from '@metorial-subspace/module-session'; import { sessionErrorGroupPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionEvent.ts b/src/systems/subspace/apps/controller/src/controllers/sessionEvent.ts index 166820589..c674b1366 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionEvent.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionEvent.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { SessionEventType } from '@metorial-subspace/db'; import { sessionEventService } from '@metorial-subspace/module-session'; import { sessionEventPresenter } from '@metorial-subspace/presenters'; diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionMessage.ts b/src/systems/subspace/apps/controller/src/controllers/sessionMessage.ts index 5fe7e4b5c..63b9d949a 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionMessage.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionMessage.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionMessageService } from '@metorial-subspace/module-session'; import { sessionMessagePresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionParticipant.ts b/src/systems/subspace/apps/controller/src/controllers/sessionParticipant.ts index adeec9f3f..208e7e1c2 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionParticipant.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionParticipant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionParticipantService } from '@metorial-subspace/module-session'; import { sessionParticipantPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionProvider.ts b/src/systems/subspace/apps/controller/src/controllers/sessionProvider.ts index 1cb099f50..5a64c7621 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionProvider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionProvider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v, type ValidationTypeValue } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v, type ValidationTypeValue } from '@mtsrc/validation'; import { normalizeToolFilters as normalizeProviderToolFilters } from '@metorial-subspace/module-provider-internal'; import { sessionProviderNameTemplateService, diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionTemplate.ts b/src/systems/subspace/apps/controller/src/controllers/sessionTemplate.ts index 65fe76119..041933e62 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionTemplate.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionTemplate.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionTemplateService } from '@metorial-subspace/module-session'; import { providerToolPresenter, diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionTemplateProvider.ts b/src/systems/subspace/apps/controller/src/controllers/sessionTemplateProvider.ts index 7bcc9d6c3..0fb64c529 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionTemplateProvider.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionTemplateProvider.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionTemplateProviderService, sessionTemplateService diff --git a/src/systems/subspace/apps/controller/src/controllers/sessionUsageRecord.ts b/src/systems/subspace/apps/controller/src/controllers/sessionUsageRecord.ts index 1787e1995..dde309c07 100644 --- a/src/systems/subspace/apps/controller/src/controllers/sessionUsageRecord.ts +++ b/src/systems/subspace/apps/controller/src/controllers/sessionUsageRecord.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionUsageRecordService } from '@metorial-subspace/module-session'; import { sessionUsageRecordPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/skill.ts b/src/systems/subspace/apps/controller/src/controllers/skill.ts index 06762a72b..b5bd7f00b 100644 --- a/src/systems/subspace/apps/controller/src/controllers/skill.ts +++ b/src/systems/subspace/apps/controller/src/controllers/skill.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillService } from '@metorial-subspace/module-skills'; import { actorService } from '@metorial-subspace/module-tenant'; import { skillPresenter } from '@metorial-subspace/presenters'; diff --git a/src/systems/subspace/apps/controller/src/controllers/skillGroup.ts b/src/systems/subspace/apps/controller/src/controllers/skillGroup.ts index 34f9d2601..f31fd6687 100644 --- a/src/systems/subspace/apps/controller/src/controllers/skillGroup.ts +++ b/src/systems/subspace/apps/controller/src/controllers/skillGroup.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillGroupService } from '@metorial-subspace/module-skills'; import { skillGroupPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/skillGroupItem.ts b/src/systems/subspace/apps/controller/src/controllers/skillGroupItem.ts index 1cb334b53..4319cd6bb 100644 --- a/src/systems/subspace/apps/controller/src/controllers/skillGroupItem.ts +++ b/src/systems/subspace/apps/controller/src/controllers/skillGroupItem.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillGroupItemService } from '@metorial-subspace/module-skills'; import { skillGroupItemPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/skillItem.ts b/src/systems/subspace/apps/controller/src/controllers/skillItem.ts index 9894fbb89..6bda1da33 100644 --- a/src/systems/subspace/apps/controller/src/controllers/skillItem.ts +++ b/src/systems/subspace/apps/controller/src/controllers/skillItem.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillItemService } from '@metorial-subspace/module-skills'; import { skillItemPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/skillTemplate.ts b/src/systems/subspace/apps/controller/src/controllers/skillTemplate.ts index ab50d9230..86fca2e77 100644 --- a/src/systems/subspace/apps/controller/src/controllers/skillTemplate.ts +++ b/src/systems/subspace/apps/controller/src/controllers/skillTemplate.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillTemplateService } from '@metorial-subspace/module-skills'; import { skillTemplatePresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/skillTemplateItem.ts b/src/systems/subspace/apps/controller/src/controllers/skillTemplateItem.ts index d5116e4c7..492b4ccda 100644 --- a/src/systems/subspace/apps/controller/src/controllers/skillTemplateItem.ts +++ b/src/systems/subspace/apps/controller/src/controllers/skillTemplateItem.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { skillTemplateItemService } from '@metorial-subspace/module-skills'; import { skillTemplateItemPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/solution.ts b/src/systems/subspace/apps/controller/src/controllers/solution.ts index a308b214f..5602d4ec8 100644 --- a/src/systems/subspace/apps/controller/src/controllers/solution.ts +++ b/src/systems/subspace/apps/controller/src/controllers/solution.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { solutionService } from '@metorial-subspace/module-tenant'; import { solutionPresenter } from '@metorial-subspace/presenters'; import { app, appWithoutSolution } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/tenant.ts b/src/systems/subspace/apps/controller/src/controllers/tenant.ts index 2f3662b84..990e91e08 100644 --- a/src/systems/subspace/apps/controller/src/controllers/tenant.ts +++ b/src/systems/subspace/apps/controller/src/controllers/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { tenantService } from '@metorial-subspace/module-tenant'; import { tenantPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/controllers/toolCall.ts b/src/systems/subspace/apps/controller/src/controllers/toolCall.ts index f8311a65f..69fc78cc0 100644 --- a/src/systems/subspace/apps/controller/src/controllers/toolCall.ts +++ b/src/systems/subspace/apps/controller/src/controllers/toolCall.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { sessionService, toolCallService } from '@metorial-subspace/module-session'; import { toolCallPresenter } from '@metorial-subspace/presenters'; import { app } from './_app'; diff --git a/src/systems/subspace/apps/controller/src/endpoints.ts b/src/systems/subspace/apps/controller/src/endpoints.ts index afe1c92f2..4d9728e37 100644 --- a/src/systems/subspace/apps/controller/src/endpoints.ts +++ b/src/systems/subspace/apps/controller/src/endpoints.ts @@ -1,4 +1,4 @@ -import { withTracingSuppressed } from '@lowerdeck/telemetry'; +import { withTracingSuppressed } from '@mtsrc/telemetry'; import { db } from '@metorial-subspace/db'; import { RedisClient } from 'bun'; import { subspaceControllerApi } from './controllers'; diff --git a/src/systems/subspace/apps/controller/src/env.ts b/src/systems/subspace/apps/controller/src/env.ts index 81eaf4e5e..747f46aab 100644 --- a/src/systems/subspace/apps/controller/src/env.ts +++ b/src/systems/subspace/apps/controller/src/env.ts @@ -1,3 +1,3 @@ -import { createValidatedEnv } from '@lowerdeck/env'; +import { createValidatedEnv } from '@mtsrc/env'; export let env = createValidatedEnv({}); diff --git a/src/systems/subspace/apps/controller/src/instrument.ts b/src/systems/subspace/apps/controller/src/instrument.ts index 182af2894..42a3c36bc 100644 --- a/src/systems/subspace/apps/controller/src/instrument.ts +++ b/src/systems/subspace/apps/controller/src/instrument.ts @@ -1,5 +1,5 @@ -import { setSentry } from '@lowerdeck/sentry'; -import { initTelemetry } from '@lowerdeck/telemetry'; +import { setSentry } from '@mtsrc/sentry'; +import { initTelemetry } from '@mtsrc/telemetry'; import * as Sentry from '@sentry/bun'; import { shouldIgnoreSentryHttpError, diff --git a/src/systems/subspace/apps/controller/src/test/client.ts b/src/systems/subspace/apps/controller/src/test/client.ts index bfb540c6f..7bd6675e6 100644 --- a/src/systems/subspace/apps/controller/src/test/client.ts +++ b/src/systems/subspace/apps/controller/src/test/client.ts @@ -1,6 +1,6 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { createServer, type InferClient, rpcMux } from '@lowerdeck/rpc-server'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { createServer, type InferClient, rpcMux } from '@mtsrc/rpc-server'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { appWithoutSolution } from '../controllers/_app'; import { type SubspaceControllerRoot, subspaceControllerRPC } from '../controllers'; import { solutionController } from '../controllers/solution'; diff --git a/src/systems/subspace/apps/controller/src/test/fixtures/environmentFixtures.ts b/src/systems/subspace/apps/controller/src/test/fixtures/environmentFixtures.ts index b0cf93ba6..6aa186b81 100644 --- a/src/systems/subspace/apps/controller/src/test/fixtures/environmentFixtures.ts +++ b/src/systems/subspace/apps/controller/src/test/fixtures/environmentFixtures.ts @@ -1,5 +1,5 @@ import { randomBytes } from 'crypto'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { getId, type Environment, diff --git a/src/systems/subspace/apps/controller/src/test/fixtures/remoteMcpProviderFixtures.ts b/src/systems/subspace/apps/controller/src/test/fixtures/remoteMcpProviderFixtures.ts index cf3c80aef..b7d7e9488 100644 --- a/src/systems/subspace/apps/controller/src/test/fixtures/remoteMcpProviderFixtures.ts +++ b/src/systems/subspace/apps/controller/src/test/fixtures/remoteMcpProviderFixtures.ts @@ -1,5 +1,5 @@ -import { generateCode } from '@lowerdeck/id'; -import { slugify } from '@lowerdeck/slugify'; +import { generateCode } from '@mtsrc/id'; +import { slugify } from '@mtsrc/slugify'; import { createShuttleClient } from '@metorial-platform-systems/shuttle-client'; import { withTimeout } from '@metorial-subspace/connection-utils/src/withTimeout'; import { diff --git a/src/systems/subspace/apps/controller/src/test/fixtures/solutionFixtures.ts b/src/systems/subspace/apps/controller/src/test/fixtures/solutionFixtures.ts index 01e45c6ba..f5b9b3d33 100644 --- a/src/systems/subspace/apps/controller/src/test/fixtures/solutionFixtures.ts +++ b/src/systems/subspace/apps/controller/src/test/fixtures/solutionFixtures.ts @@ -1,5 +1,5 @@ import { randomBytes } from 'crypto'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { get4ByteIntId, getId, type PrismaClient, type Solution } from '@metorial-subspace/db'; export const SolutionFixtures = (db: PrismaClient) => { diff --git a/src/systems/subspace/apps/controller/src/test/fixtures/tenantFixtures.ts b/src/systems/subspace/apps/controller/src/test/fixtures/tenantFixtures.ts index cd9d3f443..b43f1641e 100644 --- a/src/systems/subspace/apps/controller/src/test/fixtures/tenantFixtures.ts +++ b/src/systems/subspace/apps/controller/src/test/fixtures/tenantFixtures.ts @@ -1,5 +1,5 @@ import { randomBytes } from 'crypto'; -import { defineFactory } from '@lowerdeck/testing-tools'; +import { defineFactory } from '@mtsrc/testing-tools'; import { getId, type PrismaClient, type Tenant } from '@metorial-subspace/db'; export const TenantFixtures = (db: PrismaClient) => { diff --git a/src/systems/subspace/apps/controller/src/test/helpers/voyagerStub.ts b/src/systems/subspace/apps/controller/src/test/helpers/voyagerStub.ts index 46d64f56d..6394acd1c 100644 --- a/src/systems/subspace/apps/controller/src/test/helpers/voyagerStub.ts +++ b/src/systems/subspace/apps/controller/src/test/helpers/voyagerStub.ts @@ -1,5 +1,5 @@ -import { createFetchRouter } from '@lowerdeck/testing-tools'; -import { serialize } from '@lowerdeck/serialize'; +import { createFetchRouter } from '@mtsrc/testing-tools'; +import { serialize } from '@mtsrc/serialize'; type StubState = { counter: number }; type RpcCall = { id: string; name: string; payload: any }; diff --git a/src/systems/subspace/apps/controller/src/test/setup.ts b/src/systems/subspace/apps/controller/src/test/setup.ts index 9debea3c1..871566841 100644 --- a/src/systems/subspace/apps/controller/src/test/setup.ts +++ b/src/systems/subspace/apps/controller/src/test/setup.ts @@ -1,4 +1,4 @@ -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '@metorial-subspace/db'; import { sessionMessageBucketRecord } from '@metorial-subspace/connection-utils'; diff --git a/src/systems/subspace/apps/controller/tsconfig.json b/src/systems/subspace/apps/controller/tsconfig.json index 6f0696e1c..324dc1e13 100644 --- a/src/systems/subspace/apps/controller/tsconfig.json +++ b/src/systems/subspace/apps/controller/tsconfig.json @@ -1,29 +1,18 @@ { "compilerOptions": { - // Environment setup & latest features "lib": ["ESNext"], "target": "ESNext", - "module": "Preserve", + "module": "ESNext", "moduleDetection": "force", "jsx": "react-jsx", "allowJs": true, - - // Bundler mode - "moduleResolution": "bundler", + "moduleResolution": "node", "allowImportingTsExtensions": false, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, + "noEmit": false, "skipLibCheck": true, - "noFallthroughCasesInSwitch": false, - "noUncheckedIndexedAccess": false, - "noImplicitOverride": false, - - // Some stricter flags (disabled by default) - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false - } + "strict": false, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "files": ["src/server.ts"] } diff --git a/src/systems/subspace/apps/controller/vitest.config.ts b/src/systems/subspace/apps/controller/vitest.config.ts index 8187d87b2..770c4c94a 100644 --- a/src/systems/subspace/apps/controller/vitest.config.ts +++ b/src/systems/subspace/apps/controller/vitest.config.ts @@ -1,4 +1,4 @@ -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; import { defineConfig } from 'vitest/config'; export default defineConfig(({ mode }: any): any => { diff --git a/src/systems/subspace/apps/dev/package.json b/src/systems/subspace/apps/dev/package.json index 30e67866d..07d42286f 100644 --- a/src/systems/subspace/apps/dev/package.json +++ b/src/systems/subspace/apps/dev/package.json @@ -9,8 +9,6 @@ "frontend:build": "mkdir -p frontend/dist && cd ../public && bun frontend:build && cp -r ./frontend/dist ../dev/frontend" }, "devDependencies": { - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/testing-tools": "^1.0.1", "@metorial-platform-systems/shuttle-client": "^1.0.0", "@metorial-subspace/connection-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", @@ -18,25 +16,15 @@ "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", "express": "^5.2.1", - "vitest": "4.0.17" + "vitest": "4.0.17", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" }, "dependencies": { "@hono/zod-validator": "^0.7.6", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/rpc-client": "^1.1.4", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/module-auth": "^1.0.0", "@metorial-subspace/module-catalog": "^1.0.0", @@ -52,6 +40,18 @@ "hono": "^4.11.3", "zod": "^4.3.6", "@vercel/ncc": "^0.38.3", - "@sentry/cli": "^3.2.0" + "@sentry/cli": "^3.2.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index 0a0e993a2..750dd89e4 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -38,7 +38,7 @@ WORKDIR /app/src/systems/subspace/apps/public CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/subspace/apps/public/frontend/src/pages/_error/serviceError.tsx b/src/systems/subspace/apps/public/frontend/src/pages/_error/serviceError.tsx index 78628777a..8515015ed 100644 --- a/src/systems/subspace/apps/public/frontend/src/pages/_error/serviceError.tsx +++ b/src/systems/subspace/apps/public/frontend/src/pages/_error/serviceError.tsx @@ -1,4 +1,4 @@ -import { ServiceError } from '@lowerdeck/error'; +import { ServiceError } from '@mtsrc/error'; import { ErrorPage, NotFound } from '@metorial-io/pages'; export let ServiceErrorPage = ({ error }: { error: ServiceError }) => { diff --git a/src/systems/subspace/apps/public/frontend/src/state/client.ts b/src/systems/subspace/apps/public/frontend/src/state/client.ts index 1e610716b..53867e02c 100644 --- a/src/systems/subspace/apps/public/frontend/src/state/client.ts +++ b/src/systems/subspace/apps/public/frontend/src/state/client.ts @@ -1,4 +1,4 @@ -import { createClient } from '@lowerdeck/rpc-client'; +import { createClient } from '@mtsrc/rpc-client'; import type { SubspaceFrontendClient } from '../../../src/api/internal'; export let client = createClient({ diff --git a/src/systems/subspace/apps/public/frontend/src/state/setupSession.ts b/src/systems/subspace/apps/public/frontend/src/state/setupSession.ts index 77d5c957e..7ab8b0895 100644 --- a/src/systems/subspace/apps/public/frontend/src/state/setupSession.ts +++ b/src/systems/subspace/apps/public/frontend/src/state/setupSession.ts @@ -1,4 +1,4 @@ -import { type ErrorData, ServiceError } from '@lowerdeck/error'; +import { type ErrorData, ServiceError } from '@mtsrc/error'; import { createLoader } from '@metorial/data-hooks'; import { useEffect, useRef, useState } from 'react'; import { htmlDecode } from '../../../src/lib/htmlEncode'; diff --git a/src/systems/subspace/apps/public/package.json b/src/systems/subspace/apps/public/package.json index 55d267221..4be5fc4aa 100644 --- a/src/systems/subspace/apps/public/package.json +++ b/src/systems/subspace/apps/public/package.json @@ -12,7 +12,7 @@ "start": "bun ./src/server.ts", "build": "vite build ./frontend", "frontend:build": "vite build ./frontend", - "server:build": "ncc build ./src/server.ts -o ./dist --source-map --external bun:sqlite --external bun && bun run sentry:sourcemaps:if-token", + "server:build": "ncc build ./src/server.ts -o ./dist --source-map --transpile-only --external bun:sqlite --external bun && bun run sentry:sourcemaps:if-token", "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-subspace-frontend ./dist && sentry-cli sourcemaps upload --org metorial --project mte-subspace-frontend ./dist", "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", "test": "bun run test:unit && bun run test:e2e", @@ -20,9 +20,9 @@ "test:e2e": "bunx vitest run --config vitest.e2e.config.ts" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", - "vitest": "^4.0.17" + "vitest": "^4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -33,18 +33,11 @@ "@aws-sdk/client-lambda": "^3.958.0", "@hono/zod-validator": "^0.7.6", "@hookform/resolvers": "^5.2.2", - "@lowerdeck/api-key": "^1.0.3", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/validation": "^1.0.10", "@metorial-io/data-hooks": "^1.0.1", "@metorial-io/pages": "^1.0.0", "@metorial-subspace/app-controller": "workspace:*", "@metorial-subspace/module-auth": "^1.0.0", "@metorial-subspace/module-integration": "^1.0.0", - "@lowerdeck/telemetry": "^1.1.1", "@metorial-subspace/module-tenant": "^1.0.0", "@metorial-subspace/presenters": "^1.0.0", "@metorial-subspace/provider-native": "^1.0.0", @@ -63,6 +56,13 @@ "unzipper": "^0.12.3", "vite": "^5.4.1", "yaml": "^2.8.2", - "yup": "^1.7.1" + "yup": "^1.7.1", + "@mtsrc/api-key": "1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@mtsrc/telemetry": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/apps/public/src/api/internal/_app.ts b/src/systems/subspace/apps/public/src/api/internal/_app.ts index 0fc2ddfda..cbe6a08a4 100644 --- a/src/systems/subspace/apps/public/src/api/internal/_app.ts +++ b/src/systems/subspace/apps/public/src/api/internal/_app.ts @@ -1,4 +1,4 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group().use(async ctx => { return { diff --git a/src/systems/subspace/apps/public/src/api/internal/index.ts b/src/systems/subspace/apps/public/src/api/internal/index.ts index 7b8df8375..69851779f 100644 --- a/src/systems/subspace/apps/public/src/api/internal/index.ts +++ b/src/systems/subspace/apps/public/src/api/internal/index.ts @@ -1,4 +1,4 @@ -import { createServer, type InferClient } from '@lowerdeck/rpc-server'; +import { createServer, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { integrationSetupSessionController } from './integrationSetupSession'; import { setupSessionController } from './setupSession'; diff --git a/src/systems/subspace/apps/public/src/api/internal/integrationSetupSession.ts b/src/systems/subspace/apps/public/src/api/internal/integrationSetupSession.ts index 4de078ffb..c63ed5756 100644 --- a/src/systems/subspace/apps/public/src/api/internal/integrationSetupSession.ts +++ b/src/systems/subspace/apps/public/src/api/internal/integrationSetupSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { integrationSetupSessionService } from '@metorial-subspace/module-integration'; import { brandService } from '@metorial-subspace/module-tenant'; import { integrationSetupSessionPresenter } from '@metorial-subspace/presenters'; diff --git a/src/systems/subspace/apps/public/src/api/internal/presenters/setupSession.ts b/src/systems/subspace/apps/public/src/api/internal/presenters/setupSession.ts index 5be948922..e47922be1 100644 --- a/src/systems/subspace/apps/public/src/api/internal/presenters/setupSession.ts +++ b/src/systems/subspace/apps/public/src/api/internal/presenters/setupSession.ts @@ -1,4 +1,4 @@ -import { shadowId } from '@lowerdeck/shadow-id'; +import { shadowId } from '@mtsrc/shadow-id'; import type { Identity, IdentityCredential, diff --git a/src/systems/subspace/apps/public/src/api/internal/setupSession.ts b/src/systems/subspace/apps/public/src/api/internal/setupSession.ts index c377b5eba..35c566952 100644 --- a/src/systems/subspace/apps/public/src/api/internal/setupSession.ts +++ b/src/systems/subspace/apps/public/src/api/internal/setupSession.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import type { ProviderSetupSession } from '@metorial-subspace/db'; import { providerSetupSessionUiService } from '@metorial-subspace/module-auth'; import { integrationSetupSessionService } from '@metorial-subspace/module-integration'; diff --git a/src/systems/subspace/apps/public/src/api/public/integrationSetupSession.ts b/src/systems/subspace/apps/public/src/api/public/integrationSetupSession.ts index 765c63399..bc1b7b1cd 100644 --- a/src/systems/subspace/apps/public/src/api/public/integrationSetupSession.ts +++ b/src/systems/subspace/apps/public/src/api/public/integrationSetupSession.ts @@ -1,5 +1,5 @@ -import { badRequestError, internalServerError, isServiceError } from '@lowerdeck/error'; -import { createHono, useRequestContext } from '@lowerdeck/hono'; +import { badRequestError, internalServerError, isServiceError } from '@mtsrc/error'; +import { createHono, useRequestContext } from '@mtsrc/hono'; import { integrationSetupSessionService } from '@metorial-subspace/module-integration'; import { providerSetupSessionPresenter } from '@metorial-subspace/presenters'; import { getFullIntegrationSetupSession } from '../internal/integrationSetupSession'; diff --git a/src/systems/subspace/apps/public/src/api/public/oauthCallback.ts b/src/systems/subspace/apps/public/src/api/public/oauthCallback.ts index f6c12c35b..3fe65438d 100644 --- a/src/systems/subspace/apps/public/src/api/public/oauthCallback.ts +++ b/src/systems/subspace/apps/public/src/api/public/oauthCallback.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; import { parseTenantOAuthCallbackSlug } from '@metorial-subspace/db'; export let oauthCallbackApp = createHono() diff --git a/src/systems/subspace/apps/public/src/api/public/oauthSetup.ts b/src/systems/subspace/apps/public/src/api/public/oauthSetup.ts index 05878a77e..b01070bcd 100644 --- a/src/systems/subspace/apps/public/src/api/public/oauthSetup.ts +++ b/src/systems/subspace/apps/public/src/api/public/oauthSetup.ts @@ -1,4 +1,4 @@ -import { createHono, useRequestContext } from '@lowerdeck/hono'; +import { createHono, useRequestContext } from '@mtsrc/hono'; import { providerOAuthSetupInternalService } from '@metorial-subspace/module-auth'; import { integrationSetupSessionService } from '@metorial-subspace/module-integration'; import { integrationSetupSessionPresenter } from '@metorial-subspace/presenters'; diff --git a/src/systems/subspace/apps/public/src/api/public/pingApp.ts b/src/systems/subspace/apps/public/src/api/public/pingApp.ts index a63df78b1..2cf90e8ba 100644 --- a/src/systems/subspace/apps/public/src/api/public/pingApp.ts +++ b/src/systems/subspace/apps/public/src/api/public/pingApp.ts @@ -1,4 +1,4 @@ -import { createHono } from '@lowerdeck/hono'; +import { createHono } from '@mtsrc/hono'; export let pingApp = createHono() .options('*', c => c.text('')) diff --git a/src/systems/subspace/apps/public/src/api/public/setupSession.ts b/src/systems/subspace/apps/public/src/api/public/setupSession.ts index 73bb0301c..5162f710e 100644 --- a/src/systems/subspace/apps/public/src/api/public/setupSession.ts +++ b/src/systems/subspace/apps/public/src/api/public/setupSession.ts @@ -1,5 +1,5 @@ -import { badRequestError, internalServerError, isServiceError } from '@lowerdeck/error'; -import { createHono } from '@lowerdeck/hono'; +import { badRequestError, internalServerError, isServiceError } from '@mtsrc/error'; +import { createHono } from '@mtsrc/hono'; import { join } from 'path'; import { htmlEncode } from '../../lib/htmlEncode'; import { getFullSession } from '../internal/setupSession'; diff --git a/src/systems/subspace/apps/public/src/api/public/toolCallArtifact.ts b/src/systems/subspace/apps/public/src/api/public/toolCallArtifact.ts index 4a24b4716..1cb99f555 100644 --- a/src/systems/subspace/apps/public/src/api/public/toolCallArtifact.ts +++ b/src/systems/subspace/apps/public/src/api/public/toolCallArtifact.ts @@ -1,5 +1,5 @@ -import { base62 } from '@lowerdeck/base62'; -import { createHono } from '@lowerdeck/hono'; +import { base62 } from '@mtsrc/base62'; +import { createHono } from '@mtsrc/hono'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/apps/public/src/endpoints.ts b/src/systems/subspace/apps/public/src/endpoints.ts index c63e9f110..e09acda6c 100644 --- a/src/systems/subspace/apps/public/src/endpoints.ts +++ b/src/systems/subspace/apps/public/src/endpoints.ts @@ -1,7 +1,7 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { rpcMux } from '@lowerdeck/rpc-server'; -import { getSentry } from '@lowerdeck/sentry'; -import { withTracingSuppressed } from '@lowerdeck/telemetry'; +import { apiMux } from '@mtsrc/api-mux'; +import { rpcMux } from '@mtsrc/rpc-server'; +import { getSentry } from '@mtsrc/sentry'; +import { withTracingSuppressed } from '@mtsrc/telemetry'; import { db } from '@metorial-subspace/db'; import { RedisClient } from 'bun'; import { subspaceFrontendRPC } from './api/internal'; diff --git a/src/systems/subspace/apps/public/src/env.ts b/src/systems/subspace/apps/public/src/env.ts index e4fdd8c9a..05b551aa0 100644 --- a/src/systems/subspace/apps/public/src/env.ts +++ b/src/systems/subspace/apps/public/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ files: { diff --git a/src/systems/subspace/apps/public/src/instrument.ts b/src/systems/subspace/apps/public/src/instrument.ts index 20c8826c4..1c559bc92 100644 --- a/src/systems/subspace/apps/public/src/instrument.ts +++ b/src/systems/subspace/apps/public/src/instrument.ts @@ -1,5 +1,5 @@ -import { setSentry } from '@lowerdeck/sentry'; -import { initTelemetry } from '@lowerdeck/telemetry'; +import { setSentry } from '@mtsrc/sentry'; +import { initTelemetry } from '@mtsrc/telemetry'; import * as Sentry from '@sentry/bun'; import { shouldIgnoreSentryHttpError, shuttleUnreachableErrorPattern } from './sentryFilters'; diff --git a/src/systems/subspace/apps/public/src/test/setup.ts b/src/systems/subspace/apps/public/src/test/setup.ts index c538e811c..90cdd1fc4 100644 --- a/src/systems/subspace/apps/public/src/test/setup.ts +++ b/src/systems/subspace/apps/public/src/test/setup.ts @@ -1,4 +1,4 @@ -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '@metorial-subspace/db'; import { afterAll } from 'vitest'; diff --git a/src/systems/subspace/apps/public/tsconfig.build.json b/src/systems/subspace/apps/public/tsconfig.build.json index ad4bf2ce0..1f668d5c6 100644 --- a/src/systems/subspace/apps/public/tsconfig.build.json +++ b/src/systems/subspace/apps/public/tsconfig.build.json @@ -15,6 +15,7 @@ "resolveJsonModule": true }, "exclude": [ + "src/test/**/*", "vitest.config.ts", "vitest.*.config.ts", "**/*.test.ts", diff --git a/src/systems/subspace/apps/public/vitest.e2e.config.ts b/src/systems/subspace/apps/public/vitest.e2e.config.ts index c5f68cdbc..7d9703773 100644 --- a/src/systems/subspace/apps/public/vitest.e2e.config.ts +++ b/src/systems/subspace/apps/public/vitest.e2e.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index 293ec3fca..a78c01ade 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -34,7 +34,7 @@ WORKDIR /app/src/systems/subspace/apps/worker CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/subspace/apps/worker/package.json b/src/systems/subspace/apps/worker/package.json index da1864044..27bbc0b5b 100644 --- a/src/systems/subspace/apps/worker/package.json +++ b/src/systems/subspace/apps/worker/package.json @@ -14,15 +14,14 @@ "test:e2e": "bunx vitest run --config vitest.e2e.config.ts" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", - "vitest": "^4.0.17" + "vitest": "^4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" }, "dependencies": { - "@lowerdeck/queue": "^1.0.11", "@metorial-subspace/app-controller": "workspace:*", "@metorial-subspace/module-auth": "^1.0.0", "@metorial-subspace/module-catalog": "^1.0.0", @@ -31,13 +30,14 @@ "@metorial-subspace/module-integration": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/module-skills": "^1.0.0", - "@lowerdeck/telemetry": "^1.1.1", "@metorial-subspace/module-tenant": "^1.0.0", "@metorial-subspace/provider-native": "^1.0.0", "@metorial-subspace/provider-slates": "^1.0.0", "@sentry/bun": "^10.34.0", "@vercel/ncc": "^0.38.3", "@sentry/cli": "^3.2.0", - "@metorial-subspace/module-callback": "^1.0.0" + "@metorial-subspace/module-callback": "^1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/telemetry": "1.0.0" } } diff --git a/src/systems/subspace/apps/worker/src/env.ts b/src/systems/subspace/apps/worker/src/env.ts index 81eaf4e5e..747f46aab 100644 --- a/src/systems/subspace/apps/worker/src/env.ts +++ b/src/systems/subspace/apps/worker/src/env.ts @@ -1,3 +1,3 @@ -import { createValidatedEnv } from '@lowerdeck/env'; +import { createValidatedEnv } from '@mtsrc/env'; export let env = createValidatedEnv({}); diff --git a/src/systems/subspace/apps/worker/src/health.ts b/src/systems/subspace/apps/worker/src/health.ts index c165cab7a..e2a927657 100644 --- a/src/systems/subspace/apps/worker/src/health.ts +++ b/src/systems/subspace/apps/worker/src/health.ts @@ -1,4 +1,4 @@ -import { withTracingSuppressed } from '@lowerdeck/telemetry'; +import { withTracingSuppressed } from '@mtsrc/telemetry'; import { db } from '@metorial-subspace/db'; import { RedisClient } from 'bun'; diff --git a/src/systems/subspace/apps/worker/src/instrument.ts b/src/systems/subspace/apps/worker/src/instrument.ts index aaa75e31e..a73b4a406 100644 --- a/src/systems/subspace/apps/worker/src/instrument.ts +++ b/src/systems/subspace/apps/worker/src/instrument.ts @@ -1,5 +1,5 @@ -import { setSentry } from '@lowerdeck/sentry'; -import { initTelemetry } from '@lowerdeck/telemetry'; +import { setSentry } from '@mtsrc/sentry'; +import { initTelemetry } from '@mtsrc/telemetry'; import * as Sentry from '@sentry/bun'; import { shouldIgnoreSentryHttpError, shuttleUnreachableErrorPattern } from './sentryFilters'; diff --git a/src/systems/subspace/apps/worker/src/test/setup.ts b/src/systems/subspace/apps/worker/src/test/setup.ts index c538e811c..90cdd1fc4 100644 --- a/src/systems/subspace/apps/worker/src/test/setup.ts +++ b/src/systems/subspace/apps/worker/src/test/setup.ts @@ -1,4 +1,4 @@ -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '@metorial-subspace/db'; import { afterAll } from 'vitest'; diff --git a/src/systems/subspace/apps/worker/src/worker.ts b/src/systems/subspace/apps/worker/src/worker.ts index 43583d52c..425f9fb94 100644 --- a/src/systems/subspace/apps/worker/src/worker.ts +++ b/src/systems/subspace/apps/worker/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { agentQueueProcessor } from '@metorial-subspace/module-agent/src/queues'; import { authQueueProcessor, diff --git a/src/systems/subspace/apps/worker/tsconfig.build.json b/src/systems/subspace/apps/worker/tsconfig.build.json index f050572d3..be05c148a 100644 --- a/src/systems/subspace/apps/worker/tsconfig.build.json +++ b/src/systems/subspace/apps/worker/tsconfig.build.json @@ -15,6 +15,7 @@ "resolveJsonModule": true }, "exclude": [ + "src/test/**/*", "vitest.config.ts", "vitest.*.config.ts", "**/*.test.ts", diff --git a/src/systems/subspace/apps/worker/vitest.e2e.config.ts b/src/systems/subspace/apps/worker/vitest.e2e.config.ts index c5f68cdbc..7d9703773 100644 --- a/src/systems/subspace/apps/worker/vitest.e2e.config.ts +++ b/src/systems/subspace/apps/worker/vitest.e2e.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/subspace/db/package.json b/src/systems/subspace/db/package.json index ff01ce47d..7f198653d 100644 --- a/src/systems/subspace/db/package.json +++ b/src/systems/subspace/db/package.json @@ -17,13 +17,6 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/tsconfig": "^1.0.0", "@modelcontextprotocol/sdk": "^1.25.2", "@prisma/adapter-pg": "^7.2.0", @@ -32,6 +25,13 @@ "dotenv": "^17.2.3", "p-queue": "^9.1.0", "prisma": "^7.2.0", - "prisma-json-types-generator": "^4.0.1" + "prisma-json-types-generator": "^4.0.1", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/db/src/db.ts b/src/systems/subspace/db/src/db.ts index 0e8084a35..db777681c 100644 --- a/src/systems/subspace/db/src/db.ts +++ b/src/systems/subspace/db/src/db.ts @@ -1,5 +1,5 @@ -import type { ErrorData } from '@lowerdeck/error'; -import { withExecutionContextTraceFallback } from '@lowerdeck/telemetry'; +import type { ErrorData } from '@mtsrc/error'; +import { withExecutionContextTraceFallback } from '@mtsrc/telemetry'; import type { Specification, SpecificationAuthMethod, diff --git a/src/systems/subspace/db/src/env.ts b/src/systems/subspace/db/src/env.ts index 5523d8c46..3e61f4295 100644 --- a/src/systems/subspace/db/src/env.ts +++ b/src/systems/subspace/db/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/db/src/id.ts b/src/systems/subspace/db/src/id.ts index fa64740e6..33de26852 100644 --- a/src/systems/subspace/db/src/id.ts +++ b/src/systems/subspace/db/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ tenant: idType.sorted('ktn'), diff --git a/src/systems/subspace/db/src/transaction.ts b/src/systems/subspace/db/src/transaction.ts index 60e321178..5766f4361 100644 --- a/src/systems/subspace/db/src/transaction.ts +++ b/src/systems/subspace/db/src/transaction.ts @@ -1,7 +1,7 @@ import { provideExecutionContext, withExecutionContextOptional -} from '@lowerdeck/execution-context'; +} from '@mtsrc/execution-context'; import { AsyncLocalStorage } from 'async_hooks'; import PQueue from 'p-queue'; import { db } from './db'; diff --git a/src/systems/subspace/modules/agent/package.json b/src/systems/subspace/modules/agent/package.json index 209ca6117..fc5625de9 100644 --- a/src/systems/subspace/modules/agent/package.json +++ b/src/systems/subspace/modules/agent/package.json @@ -9,16 +9,6 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/list-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", @@ -26,7 +16,17 @@ "@metorial-subspace/module-tenant": "^1.0.0", "@metorial-subspace/module-identity": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0" + "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/agent/src/env.ts b/src/systems/subspace/modules/agent/src/env.ts index a9c453a24..04d02ebf2 100644 --- a/src/systems/subspace/modules/agent/src/env.ts +++ b/src/systems/subspace/modules/agent/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/agent/src/queues.ts b/src/systems/subspace/modules/agent/src/queues.ts index 58c19d8ce..21c823eb4 100644 --- a/src/systems/subspace/modules/agent/src/queues.ts +++ b/src/systems/subspace/modules/agent/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { lifecycleQueues } from './queues/lifecycle'; import { searchQueues } from './queues/search'; diff --git a/src/systems/subspace/modules/agent/src/queues/lifecycle/index.ts b/src/systems/subspace/modules/agent/src/queues/lifecycle/index.ts index da4d67d52..5f5f7dd39 100644 --- a/src/systems/subspace/modules/agent/src/queues/lifecycle/index.ts +++ b/src/systems/subspace/modules/agent/src/queues/lifecycle/index.ts @@ -1,3 +1,3 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; export let lifecycleQueues = combineQueueProcessors([]); diff --git a/src/systems/subspace/modules/agent/src/queues/search/agentClient.ts b/src/systems/subspace/modules/agent/src/queues/search/agentClient.ts index 99333fcc8..83f00178d 100644 --- a/src/systems/subspace/modules/agent/src/queues/search/agentClient.ts +++ b/src/systems/subspace/modules/agent/src/queues/search/agentClient.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/agent/src/queues/search/index.ts b/src/systems/subspace/modules/agent/src/queues/search/index.ts index 4c16a00f4..22b7661e1 100644 --- a/src/systems/subspace/modules/agent/src/queues/search/index.ts +++ b/src/systems/subspace/modules/agent/src/queues/search/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { indexAgentClientQueueProcessor } from './agentClient'; export let searchQueues = combineQueueProcessors([indexAgentClientQueueProcessor]); diff --git a/src/systems/subspace/modules/agent/src/services/agent.ts b/src/systems/subspace/modules/agent/src/services/agent.ts index 7c11675ed..ccc96c857 100644 --- a/src/systems/subspace/modules/agent/src/services/agent.ts +++ b/src/systems/subspace/modules/agent/src/services/agent.ts @@ -1,9 +1,9 @@ -import { Hash } from '@lowerdeck/hash'; -import { generatePlainId } from '@lowerdeck/id'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { Hash } from '@mtsrc/hash'; +import { generatePlainId } from '@mtsrc/id'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { type Agent, AgentStatus, diff --git a/src/systems/subspace/modules/agent/src/services/agentClient.ts b/src/systems/subspace/modules/agent/src/services/agentClient.ts index 06a6baf2d..22b38d9d9 100644 --- a/src/systems/subspace/modules/agent/src/services/agentClient.ts +++ b/src/systems/subspace/modules/agent/src/services/agentClient.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, type AgentClientType, diff --git a/src/systems/subspace/modules/agent/src/services/agentInstance.ts b/src/systems/subspace/modules/agent/src/services/agentInstance.ts index 282a809a7..68ee8d40e 100644 --- a/src/systems/subspace/modules/agent/src/services/agentInstance.ts +++ b/src/systems/subspace/modules/agent/src/services/agentInstance.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type Agent, type AgentClient, diff --git a/src/systems/subspace/modules/auth/package.json b/src/systems/subspace/modules/auth/package.json index c7949f0c3..a00892ddc 100644 --- a/src/systems/subspace/modules/auth/package.json +++ b/src/systems/subspace/modules/auth/package.json @@ -9,14 +9,6 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/list-utils": "^1.0.0", "@metorial-subspace/module-deployment": "^1.0.0", @@ -25,7 +17,15 @@ "@metorial-subspace/module-tenant": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", "@metorial-subspace/provider-utils": "^1.0.0", - "date-fns": "^4.1.0" + "date-fns": "^4.1.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/auth/src/env.ts b/src/systems/subspace/modules/auth/src/env.ts index 254026607..7ef044eb0 100644 --- a/src/systems/subspace/modules/auth/src/env.ts +++ b/src/systems/subspace/modules/auth/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/auth/src/lib/checkManagedCredentialsBlocked.ts b/src/systems/subspace/modules/auth/src/lib/checkManagedCredentialsBlocked.ts index 40af89e00..52ea5b488 100644 --- a/src/systems/subspace/modules/auth/src/lib/checkManagedCredentialsBlocked.ts +++ b/src/systems/subspace/modules/auth/src/lib/checkManagedCredentialsBlocked.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { db, type ProviderAuthConfig } from '@metorial-subspace/db'; export let checkManagedCredentialsBlocked = async (authConfig: ProviderAuthConfig) => { diff --git a/src/systems/subspace/modules/auth/src/lib/managedProviderAuthCredentialsBacking.ts b/src/systems/subspace/modules/auth/src/lib/managedProviderAuthCredentialsBacking.ts index 17bd1d7e7..e799c0d55 100644 --- a/src/systems/subspace/modules/auth/src/lib/managedProviderAuthCredentialsBacking.ts +++ b/src/systems/subspace/modules/auth/src/lib/managedProviderAuthCredentialsBacking.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/auth/src/queues.ts b/src/systems/subspace/modules/auth/src/queues.ts index 49d770a58..83ebabd61 100644 --- a/src/systems/subspace/modules/auth/src/queues.ts +++ b/src/systems/subspace/modules/auth/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { cronQueues } from './queues/cron'; import { deleteQueues } from './queues/delete'; import { lifecycleQueues } from './queues/lifecycle'; diff --git a/src/systems/subspace/modules/auth/src/queues/cron/expireOAuthSetup.ts b/src/systems/subspace/modules/auth/src/queues/cron/expireOAuthSetup.ts index 8a9a0681d..dcabf1628 100644 --- a/src/systems/subspace/modules/auth/src/queues/cron/expireOAuthSetup.ts +++ b/src/systems/subspace/modules/auth/src/queues/cron/expireOAuthSetup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/auth/src/queues/cron/index.ts b/src/systems/subspace/modules/auth/src/queues/cron/index.ts index 95ebea075..a661ffd7b 100644 --- a/src/systems/subspace/modules/auth/src/queues/cron/index.ts +++ b/src/systems/subspace/modules/auth/src/queues/cron/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { expireOAuthSetupCron } from './expireOAuthSetup'; import { reconcileProviderAuthConfigScopesCron, diff --git a/src/systems/subspace/modules/auth/src/queues/cron/reconcileScopes.ts b/src/systems/subspace/modules/auth/src/queues/cron/reconcileScopes.ts index 2330414c5..a280d0dfc 100644 --- a/src/systems/subspace/modules/auth/src/queues/cron/reconcileScopes.ts +++ b/src/systems/subspace/modules/auth/src/queues/cron/reconcileScopes.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { providerAuthConfigInternalService } from '../../services/providerAuthConfigInternal'; diff --git a/src/systems/subspace/modules/auth/src/queues/delete/index.ts b/src/systems/subspace/modules/auth/src/queues/delete/index.ts index a74c468c2..3e3da975e 100644 --- a/src/systems/subspace/modules/auth/src/queues/delete/index.ts +++ b/src/systems/subspace/modules/auth/src/queues/delete/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { providerAuthConfigArchivedCleanupCron, providerAuthConfigBackendDeleteQueueProcessor, diff --git a/src/systems/subspace/modules/auth/src/queues/delete/providerAuthConfig.ts b/src/systems/subspace/modules/auth/src/queues/delete/providerAuthConfig.ts index 9c1f0b8f7..daba8a1b9 100644 --- a/src/systems/subspace/modules/auth/src/queues/delete/providerAuthConfig.ts +++ b/src/systems/subspace/modules/auth/src/queues/delete/providerAuthConfig.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { getBackend } from '@metorial-subspace/provider'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/auth/src/queues/delete/providerAuthCredentials.ts b/src/systems/subspace/modules/auth/src/queues/delete/providerAuthCredentials.ts index 6c3ee7d32..2787e169e 100644 --- a/src/systems/subspace/modules/auth/src/queues/delete/providerAuthCredentials.ts +++ b/src/systems/subspace/modules/auth/src/queues/delete/providerAuthCredentials.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { getBackend } from '@metorial-subspace/provider'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/auth/src/queues/lifecycle/index.ts b/src/systems/subspace/modules/auth/src/queues/lifecycle/index.ts index 5bf3e93d4..9ee160f60 100644 --- a/src/systems/subspace/modules/auth/src/queues/lifecycle/index.ts +++ b/src/systems/subspace/modules/auth/src/queues/lifecycle/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { providerAuthConfigArchivedQueueProcessor, providerAuthConfigCreatedQueueProcessor, diff --git a/src/systems/subspace/modules/auth/src/queues/lifecycle/providerAuthConfig.ts b/src/systems/subspace/modules/auth/src/queues/lifecycle/providerAuthConfig.ts index a167a9036..9a64586a2 100644 --- a/src/systems/subspace/modules/auth/src/queues/lifecycle/providerAuthConfig.ts +++ b/src/systems/subspace/modules/auth/src/queues/lifecycle/providerAuthConfig.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { integrationInstanceProviderCredentialSyncQueue } from '@metorial-subspace/module-identity/src/queues/lifecycle/integrationInstanceProviderCredential'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/auth/src/queues/lifecycle/providerAuthCredentials.ts b/src/systems/subspace/modules/auth/src/queues/lifecycle/providerAuthCredentials.ts index a22d52e74..17e6fe2f5 100644 --- a/src/systems/subspace/modules/auth/src/queues/lifecycle/providerAuthCredentials.ts +++ b/src/systems/subspace/modules/auth/src/queues/lifecycle/providerAuthCredentials.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { env } from '../../env'; import { indexProviderAuthCredentialsQueue } from '../search/providerAuthCredentials'; diff --git a/src/systems/subspace/modules/auth/src/queues/lifecycle/providerOAuthSetup.ts b/src/systems/subspace/modules/auth/src/queues/lifecycle/providerOAuthSetup.ts index ac440fe6c..c3ca91e9b 100644 --- a/src/systems/subspace/modules/auth/src/queues/lifecycle/providerOAuthSetup.ts +++ b/src/systems/subspace/modules/auth/src/queues/lifecycle/providerOAuthSetup.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; export let providerOAuthSetupCreatedQueue = createQueue<{ diff --git a/src/systems/subspace/modules/auth/src/queues/lifecycle/providerSetupSession.ts b/src/systems/subspace/modules/auth/src/queues/lifecycle/providerSetupSession.ts index 62bd17fa6..06341f309 100644 --- a/src/systems/subspace/modules/auth/src/queues/lifecycle/providerSetupSession.ts +++ b/src/systems/subspace/modules/auth/src/queues/lifecycle/providerSetupSession.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; export let providerSetupSessionCreatedQueue = createQueue<{ diff --git a/src/systems/subspace/modules/auth/src/queues/reconcile/index.ts b/src/systems/subspace/modules/auth/src/queues/reconcile/index.ts index 67f1d260a..bbd1de106 100644 --- a/src/systems/subspace/modules/auth/src/queues/reconcile/index.ts +++ b/src/systems/subspace/modules/auth/src/queues/reconcile/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { reconcileManagedCredentialProviderManyQueueProcessor, reconcileManagedCredentialProviderSingleQueueProcessor diff --git a/src/systems/subspace/modules/auth/src/queues/reconcile/managedCredentialProvider.ts b/src/systems/subspace/modules/auth/src/queues/reconcile/managedCredentialProvider.ts index 2a4467821..33b128949 100644 --- a/src/systems/subspace/modules/auth/src/queues/reconcile/managedCredentialProvider.ts +++ b/src/systems/subspace/modules/auth/src/queues/reconcile/managedCredentialProvider.ts @@ -1,4 +1,4 @@ -import { QueueRetryError, createQueue } from '@lowerdeck/queue'; +import { QueueRetryError, createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { reconcileAllTenantsManagedBackingsQueue } from './tenantManagedBackings'; diff --git a/src/systems/subspace/modules/auth/src/queues/reconcile/tenantManagedBackings.ts b/src/systems/subspace/modules/auth/src/queues/reconcile/tenantManagedBackings.ts index 4fcf2666f..7f4fdfb4d 100644 --- a/src/systems/subspace/modules/auth/src/queues/reconcile/tenantManagedBackings.ts +++ b/src/systems/subspace/modules/auth/src/queues/reconcile/tenantManagedBackings.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/auth/src/queues/search/index.ts b/src/systems/subspace/modules/auth/src/queues/search/index.ts index 007538340..c689b6ff3 100644 --- a/src/systems/subspace/modules/auth/src/queues/search/index.ts +++ b/src/systems/subspace/modules/auth/src/queues/search/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { indexProviderAuthConfigQueueProcessor } from './providerAuthConfig'; import { indexProviderAuthCredentialsQueueProcessor } from './providerAuthCredentials'; diff --git a/src/systems/subspace/modules/auth/src/queues/search/providerAuthConfig.ts b/src/systems/subspace/modules/auth/src/queues/search/providerAuthConfig.ts index 2acddd48f..ee7cc7d2b 100644 --- a/src/systems/subspace/modules/auth/src/queues/search/providerAuthConfig.ts +++ b/src/systems/subspace/modules/auth/src/queues/search/providerAuthConfig.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/auth/src/queues/search/providerAuthCredentials.ts b/src/systems/subspace/modules/auth/src/queues/search/providerAuthCredentials.ts index fb7cf0f51..dacae49c9 100644 --- a/src/systems/subspace/modules/auth/src/queues/search/providerAuthCredentials.ts +++ b/src/systems/subspace/modules/auth/src/queues/search/providerAuthCredentials.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/auth/src/services/authConfigError.ts b/src/systems/subspace/modules/auth/src/services/authConfigError.ts index 9eeb3b681..8b453a0cd 100644 --- a/src/systems/subspace/modules/auth/src/services/authConfigError.ts +++ b/src/systems/subspace/modules/auth/src/services/authConfigError.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, diff --git a/src/systems/subspace/modules/auth/src/services/authConfigErrorGlobal.ts b/src/systems/subspace/modules/auth/src/services/authConfigErrorGlobal.ts index 7013669d4..ac5b1442a 100644 --- a/src/systems/subspace/modules/auth/src/services/authConfigErrorGlobal.ts +++ b/src/systems/subspace/modules/auth/src/services/authConfigErrorGlobal.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, diff --git a/src/systems/subspace/modules/auth/src/services/authConfigEvent.ts b/src/systems/subspace/modules/auth/src/services/authConfigEvent.ts index 0f16a6037..d621141af 100644 --- a/src/systems/subspace/modules/auth/src/services/authConfigEvent.ts +++ b/src/systems/subspace/modules/auth/src/services/authConfigEvent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, diff --git a/src/systems/subspace/modules/auth/src/services/managedProviderAuthCredentials.ts b/src/systems/subspace/modules/auth/src/services/managedProviderAuthCredentials.ts index 507d19500..53b54b1f2 100644 --- a/src/systems/subspace/modules/auth/src/services/managedProviderAuthCredentials.ts +++ b/src/systems/subspace/modules/auth/src/services/managedProviderAuthCredentials.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/auth/src/services/providerAuthConfig.ts b/src/systems/subspace/modules/auth/src/services/providerAuthConfig.ts index 4d730a3d7..3f5e35a0e 100644 --- a/src/systems/subspace/modules/auth/src/services/providerAuthConfig.ts +++ b/src/systems/subspace/modules/auth/src/services/providerAuthConfig.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/auth/src/services/providerAuthConfigInternal.ts b/src/systems/subspace/modules/auth/src/services/providerAuthConfigInternal.ts index 5b4d8b69f..64ac6d3ef 100644 --- a/src/systems/subspace/modules/auth/src/services/providerAuthConfigInternal.ts +++ b/src/systems/subspace/modules/auth/src/services/providerAuthConfigInternal.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, type Backend, diff --git a/src/systems/subspace/modules/auth/src/services/providerAuthCredentials.ts b/src/systems/subspace/modules/auth/src/services/providerAuthCredentials.ts index 5f733b2aa..611664a9e 100644 --- a/src/systems/subspace/modules/auth/src/services/providerAuthCredentials.ts +++ b/src/systems/subspace/modules/auth/src/services/providerAuthCredentials.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/auth/src/services/providerAuthExport.ts b/src/systems/subspace/modules/auth/src/services/providerAuthExport.ts index bae66db87..d65996eae 100644 --- a/src/systems/subspace/modules/auth/src/services/providerAuthExport.ts +++ b/src/systems/subspace/modules/auth/src/services/providerAuthExport.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/auth/src/services/providerAuthImport.ts b/src/systems/subspace/modules/auth/src/services/providerAuthImport.ts index 1004847d5..31bde6e71 100644 --- a/src/systems/subspace/modules/auth/src/services/providerAuthImport.ts +++ b/src/systems/subspace/modules/auth/src/services/providerAuthImport.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError, badRequestError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError, badRequestError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/auth/src/services/providerOAuthSetup.ts b/src/systems/subspace/modules/auth/src/services/providerOAuthSetup.ts index 6dcbbd589..f010299ec 100644 --- a/src/systems/subspace/modules/auth/src/services/providerOAuthSetup.ts +++ b/src/systems/subspace/modules/auth/src/services/providerOAuthSetup.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/auth/src/services/providerOAuthSetupInternal.ts b/src/systems/subspace/modules/auth/src/services/providerOAuthSetupInternal.ts index 18f58721e..5fa025201 100644 --- a/src/systems/subspace/modules/auth/src/services/providerOAuthSetupInternal.ts +++ b/src/systems/subspace/modules/auth/src/services/providerOAuthSetupInternal.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/auth/src/services/providerSetupSession.ts b/src/systems/subspace/modules/auth/src/services/providerSetupSession.ts index 882c6a708..f619484c2 100644 --- a/src/systems/subspace/modules/auth/src/services/providerSetupSession.ts +++ b/src/systems/subspace/modules/auth/src/services/providerSetupSession.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, type Brand, diff --git a/src/systems/subspace/modules/auth/src/services/providerSetupSessionInternal.ts b/src/systems/subspace/modules/auth/src/services/providerSetupSessionInternal.ts index a2b9056fb..b779a3f6f 100644 --- a/src/systems/subspace/modules/auth/src/services/providerSetupSessionInternal.ts +++ b/src/systems/subspace/modules/auth/src/services/providerSetupSessionInternal.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, type Environment, diff --git a/src/systems/subspace/modules/auth/src/services/providerSetupSessionUi.ts b/src/systems/subspace/modules/auth/src/services/providerSetupSessionUi.ts index a563341fd..8326d9b97 100644 --- a/src/systems/subspace/modules/auth/src/services/providerSetupSessionUi.ts +++ b/src/systems/subspace/modules/auth/src/services/providerSetupSessionUi.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/callback/package.json b/src/systems/subspace/modules/callback/package.json index 5f0553085..70543787e 100644 --- a/src/systems/subspace/modules/callback/package.json +++ b/src/systems/subspace/modules/callback/package.json @@ -9,17 +9,17 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/provider-slates": "^1.0.0", - "@lowerdeck/validation": "^1.0.10" + "@mtsrc/cache": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/callback/src/env.ts b/src/systems/subspace/modules/callback/src/env.ts index a9c453a24..04d02ebf2 100644 --- a/src/systems/subspace/modules/callback/src/env.ts +++ b/src/systems/subspace/modules/callback/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/callback/src/queues.ts b/src/systems/subspace/modules/callback/src/queues.ts index 50938373a..35a152644 100644 --- a/src/systems/subspace/modules/callback/src/queues.ts +++ b/src/systems/subspace/modules/callback/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { deleteQueues } from './queues/delete'; import { reconcilerQueueProcessor } from './reconciler'; diff --git a/src/systems/subspace/modules/callback/src/queues/delete/callback.ts b/src/systems/subspace/modules/callback/src/queues/delete/callback.ts index 8082502e0..1d4e0f1f1 100644 --- a/src/systems/subspace/modules/callback/src/queues/delete/callback.ts +++ b/src/systems/subspace/modules/callback/src/queues/delete/callback.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db, withTransaction } from '@metorial-subspace/db'; import { env } from '../../env'; import { getCutoffDate } from './_config'; diff --git a/src/systems/subspace/modules/callback/src/queues/delete/index.ts b/src/systems/subspace/modules/callback/src/queues/delete/index.ts index d7ad402fb..7bfa07ee2 100644 --- a/src/systems/subspace/modules/callback/src/queues/delete/index.ts +++ b/src/systems/subspace/modules/callback/src/queues/delete/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { callbackArchivedCleanupCron, callbackDeleteManyQueueProcessor, diff --git a/src/systems/subspace/modules/callback/src/reconciler/index.ts b/src/systems/subspace/modules/callback/src/reconciler/index.ts index ee4d577f9..26aabd90d 100644 --- a/src/systems/subspace/modules/callback/src/reconciler/index.ts +++ b/src/systems/subspace/modules/callback/src/reconciler/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { callbackReconcileInstanceQueueProcessor, callbackReconcileInstancesPageQueueProcessor, diff --git a/src/systems/subspace/modules/callback/src/reconciler/lib/state.ts b/src/systems/subspace/modules/callback/src/reconciler/lib/state.ts index c320a2a43..6b5edd285 100644 --- a/src/systems/subspace/modules/callback/src/reconciler/lib/state.ts +++ b/src/systems/subspace/modules/callback/src/reconciler/lib/state.ts @@ -1,4 +1,4 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; import { db } from '@metorial-subspace/db'; import { getTenantForSlates } from '@metorial-subspace/provider-slates/src/client'; diff --git a/src/systems/subspace/modules/callback/src/reconciler/queues/definitions.ts b/src/systems/subspace/modules/callback/src/reconciler/queues/definitions.ts index 4840151b8..033b98f72 100644 --- a/src/systems/subspace/modules/callback/src/reconciler/queues/definitions.ts +++ b/src/systems/subspace/modules/callback/src/reconciler/queues/definitions.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; export let callbackReconcileInstanceQueue = createQueue<{ diff --git a/src/systems/subspace/modules/callback/src/services/callback.ts b/src/systems/subspace/modules/callback/src/services/callback.ts index a9ea73545..131558f70 100644 --- a/src/systems/subspace/modules/callback/src/services/callback.ts +++ b/src/systems/subspace/modules/callback/src/services/callback.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type Callback, CallbackDestinationStatus, diff --git a/src/systems/subspace/modules/callback/src/services/callbackDelivery.ts b/src/systems/subspace/modules/callback/src/services/callbackDelivery.ts index aae07ccab..61485721d 100644 --- a/src/systems/subspace/modules/callback/src/services/callbackDelivery.ts +++ b/src/systems/subspace/modules/callback/src/services/callbackDelivery.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { getTenantForSlates, slates } from '@metorial-subspace/provider-slates/src/client'; diff --git a/src/systems/subspace/modules/callback/src/services/callbackDestination.ts b/src/systems/subspace/modules/callback/src/services/callbackDestination.ts index 9ab0e027f..6bb06320e 100644 --- a/src/systems/subspace/modules/callback/src/services/callbackDestination.ts +++ b/src/systems/subspace/modules/callback/src/services/callbackDestination.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type CallbackDestination, CallbackDestinationStatus, diff --git a/src/systems/subspace/modules/callback/src/services/callbackEvent.ts b/src/systems/subspace/modules/callback/src/services/callbackEvent.ts index d39649e7a..1eab7e97e 100644 --- a/src/systems/subspace/modules/callback/src/services/callbackEvent.ts +++ b/src/systems/subspace/modules/callback/src/services/callbackEvent.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { CallbackReceiverRegistrationStatus, CallbackStatus, diff --git a/src/systems/subspace/modules/callback/src/services/callbackInstance.ts b/src/systems/subspace/modules/callback/src/services/callbackInstance.ts index e7ef43e50..5e0c4bd27 100644 --- a/src/systems/subspace/modules/callback/src/services/callbackInstance.ts +++ b/src/systems/subspace/modules/callback/src/services/callbackInstance.ts @@ -1,6 +1,6 @@ -import { internalServerError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { internalServerError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { CallbackReceiverRegistrationStatus, db, diff --git a/src/systems/subspace/modules/callback/src/services/callbackRegistration.ts b/src/systems/subspace/modules/callback/src/services/callbackRegistration.ts index 12de77d28..6cd671e69 100644 --- a/src/systems/subspace/modules/callback/src/services/callbackRegistration.ts +++ b/src/systems/subspace/modules/callback/src/services/callbackRegistration.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { callbackRegistrationReconcileQueue } from '@metorial-subspace/module-provider-internal/src/queues/lifecycle/deploymentConfigPair'; class callbackRegistrationServiceImpl { diff --git a/src/systems/subspace/modules/catalog/package.json b/src/systems/subspace/modules/catalog/package.json index 3d93ad302..ddcde5036 100644 --- a/src/systems/subspace/modules/catalog/package.json +++ b/src/systems/subspace/modules/catalog/package.json @@ -9,21 +9,21 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial-services/registry-client": "^1.0.0", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/list-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/module-search": "^1.0.0", - "date-fns": "^4.1.0" + "date-fns": "^4.1.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/catalog/src/cron/cleanup.ts b/src/systems/subspace/modules/catalog/src/cron/cleanup.ts index 4380697d1..ba31a3dba 100644 --- a/src/systems/subspace/modules/catalog/src/cron/cleanup.ts +++ b/src/systems/subspace/modules/catalog/src/cron/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subDays } from 'date-fns'; import { env } from '../env'; diff --git a/src/systems/subspace/modules/catalog/src/env.ts b/src/systems/subspace/modules/catalog/src/env.ts index 4390284b7..c76dfd72d 100644 --- a/src/systems/subspace/modules/catalog/src/env.ts +++ b/src/systems/subspace/modules/catalog/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/catalog/src/queues.ts b/src/systems/subspace/modules/catalog/src/queues.ts index 2448e1a6b..52ae9dbdb 100644 --- a/src/systems/subspace/modules/catalog/src/queues.ts +++ b/src/systems/subspace/modules/catalog/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { cleanupCron } from './cron/cleanup'; export let catalogQueueProcessor = combineQueueProcessors([cleanupCron]); diff --git a/src/systems/subspace/modules/catalog/src/services/provider.ts b/src/systems/subspace/modules/catalog/src/services/provider.ts index fe4fc3c77..5d5749995 100644 --- a/src/systems/subspace/modules/catalog/src/services/provider.ts +++ b/src/systems/subspace/modules/catalog/src/services/provider.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type EntityImage, diff --git a/src/systems/subspace/modules/catalog/src/services/providerAuthMethod.ts b/src/systems/subspace/modules/catalog/src/services/providerAuthMethod.ts index 889659f7e..da2de2dec 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerAuthMethod.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerAuthMethod.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/catalog/src/services/providerCategory.ts b/src/systems/subspace/modules/catalog/src/services/providerCategory.ts index 044cc31ad..611d7acd1 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerCategory.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerCategory.ts @@ -1,7 +1,7 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { db, type Environment, diff --git a/src/systems/subspace/modules/catalog/src/services/providerCollection.ts b/src/systems/subspace/modules/catalog/src/services/providerCollection.ts index 2637c0b7c..7dc96a4e2 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerCollection.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerCollection.ts @@ -1,7 +1,7 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { db, type Environment, diff --git a/src/systems/subspace/modules/catalog/src/services/providerGroup.ts b/src/systems/subspace/modules/catalog/src/services/providerGroup.ts index 0be9535c7..499201abc 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerGroup.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerGroup.ts @@ -1,8 +1,8 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { generateCode } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { generateCode } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { db, type Environment, diff --git a/src/systems/subspace/modules/catalog/src/services/providerListing.ts b/src/systems/subspace/modules/catalog/src/services/providerListing.ts index 8f5f9982b..019875760 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerListing.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerListing.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, diff --git a/src/systems/subspace/modules/catalog/src/services/providerSpecification.ts b/src/systems/subspace/modules/catalog/src/services/providerSpecification.ts index f5b4ead61..1195332d6 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerSpecification.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerSpecification.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, normalizeDateFilter, resolveProviders } from '@metorial-subspace/list-utils'; import { getProviderTenantFilter } from './provider'; diff --git a/src/systems/subspace/modules/catalog/src/services/providerTool.ts b/src/systems/subspace/modules/catalog/src/services/providerTool.ts index e37109062..50ea5f232 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerTool.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerTool.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/catalog/src/services/providerTrigger.ts b/src/systems/subspace/modules/catalog/src/services/providerTrigger.ts index 5fc06765d..cd3d1ff0a 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerTrigger.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerTrigger.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/catalog/src/services/providerVariant.ts b/src/systems/subspace/modules/catalog/src/services/providerVariant.ts index 8c6d7ad2b..7e947bc15 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerVariant.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerVariant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/catalog/src/services/providerVersion.ts b/src/systems/subspace/modules/catalog/src/services/providerVersion.ts index 5ecf1fafb..ae82baeca 100644 --- a/src/systems/subspace/modules/catalog/src/services/providerVersion.ts +++ b/src/systems/subspace/modules/catalog/src/services/providerVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, normalizeDateFilter, resolveProviders } from '@metorial-subspace/list-utils'; import { getProviderTenantFilter } from './provider'; diff --git a/src/systems/subspace/modules/catalog/src/services/publisher.ts b/src/systems/subspace/modules/catalog/src/services/publisher.ts index 641badf9e..60b72f0b9 100644 --- a/src/systems/subspace/modules/catalog/src/services/publisher.ts +++ b/src/systems/subspace/modules/catalog/src/services/publisher.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, normalizeDateFilter } from '@metorial-subspace/list-utils'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; diff --git a/src/systems/subspace/modules/connection/package.json b/src/systems/subspace/modules/connection/package.json index 0752ce155..e67ff2e4d 100644 --- a/src/systems/subspace/modules/connection/package.json +++ b/src/systems/subspace/modules/connection/package.json @@ -9,19 +9,6 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/case": "^1.0.9", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/serialize": "^1.0.4", - "@lowerdeck/unique": "^1.0.4", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/conduit": "^1.0.0", "@metorial-subspace/connection-utils": "^1.0.0", "@metorial-subspace/db": "^1.0.0", @@ -38,7 +25,20 @@ "lodash": "^4.17.23", "nats": "^2.29.3", "uuid": "^13.0.0", - "zod": "^4.3.5" + "zod": "^4.3.5", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/case": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/serialize": "1.0.0", + "@mtsrc/unique": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "typescript": "5.8.2", diff --git a/src/systems/subspace/modules/connection/src/controller/receiver.ts b/src/systems/subspace/modules/connection/src/controller/receiver.ts index c8fb67af7..a967f29fc 100644 --- a/src/systems/subspace/modules/connection/src/controller/receiver.ts +++ b/src/systems/subspace/modules/connection/src/controller/receiver.ts @@ -1,6 +1,6 @@ -import { internalServerError, isServiceError } from '@lowerdeck/error'; -import { getSentry } from '@lowerdeck/sentry'; -import { serialize } from '@lowerdeck/serialize'; +import { internalServerError, isServiceError } from '@mtsrc/error'; +import { getSentry } from '@mtsrc/sentry'; +import { serialize } from '@mtsrc/serialize'; import type { BroadcastMessage, ConduitInput, diff --git a/src/systems/subspace/modules/connection/src/cron/cleanup.ts b/src/systems/subspace/modules/connection/src/cron/cleanup.ts index 88ca08328..15235e069 100644 --- a/src/systems/subspace/modules/connection/src/cron/cleanup.ts +++ b/src/systems/subspace/modules/connection/src/cron/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db } from '@metorial-subspace/db'; import { subHours } from 'date-fns'; import { env } from '../env'; diff --git a/src/systems/subspace/modules/connection/src/env.ts b/src/systems/subspace/modules/connection/src/env.ts index dc3f9db8b..4ae3206f5 100644 --- a/src/systems/subspace/modules/connection/src/env.ts +++ b/src/systems/subspace/modules/connection/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/connection/src/mcp/connection.ts b/src/systems/subspace/modules/connection/src/mcp/connection.ts index ba9f42ccd..290dbd1ea 100644 --- a/src/systems/subspace/modules/connection/src/mcp/connection.ts +++ b/src/systems/subspace/modules/connection/src/mcp/connection.ts @@ -1,5 +1,5 @@ -import { generatePlainId } from '@lowerdeck/id'; -import { getSentry } from '@lowerdeck/sentry'; +import { generatePlainId } from '@mtsrc/id'; +import { getSentry } from '@mtsrc/sentry'; import type { SessionConnectionMcpConnectionTransport } from '@metorial-subspace/db'; import { interleave } from '@metorial-subspace/generator'; import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js'; diff --git a/src/systems/subspace/modules/connection/src/mcp/control.ts b/src/systems/subspace/modules/connection/src/mcp/control.ts index 9e904a4f7..b4779560a 100644 --- a/src/systems/subspace/modules/connection/src/mcp/control.ts +++ b/src/systems/subspace/modules/connection/src/mcp/control.ts @@ -1,4 +1,4 @@ -import { serialize } from '@lowerdeck/serialize'; +import { serialize } from '@mtsrc/serialize'; import type { ConduitResult } from '@metorial-subspace/connection-utils'; import { conduitResultToMcpMessage } from '@metorial-subspace/connection-utils'; import { broadcastNats } from '../lib/nats'; diff --git a/src/systems/subspace/modules/connection/src/mcp/sender.ts b/src/systems/subspace/modules/connection/src/mcp/sender.ts index cd53b2968..79f2ae3dd 100644 --- a/src/systems/subspace/modules/connection/src/mcp/sender.ts +++ b/src/systems/subspace/modules/connection/src/mcp/sender.ts @@ -1,12 +1,12 @@ -import { Cases } from '@lowerdeck/case'; +import { Cases } from '@mtsrc/case'; import { badRequestError, internalServerError, isServiceError, ServiceError -} from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { getSentry } from '@lowerdeck/sentry'; +} from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { getSentry } from '@mtsrc/sentry'; import { checkResourceAccessManager, conduitResultToMcpMessage, diff --git a/src/systems/subspace/modules/connection/src/queueProcessor.ts b/src/systems/subspace/modules/connection/src/queueProcessor.ts index b7d241f29..3340bd420 100644 --- a/src/systems/subspace/modules/connection/src/queueProcessor.ts +++ b/src/systems/subspace/modules/connection/src/queueProcessor.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { connectionCleanupCron } from './cron/cleanup'; import { queues } from './queues'; diff --git a/src/systems/subspace/modules/connection/src/queues/connectionCleanup/expireSessionConnections.ts b/src/systems/subspace/modules/connection/src/queues/connectionCleanup/expireSessionConnections.ts index 6ad96ccca..afd07325e 100644 --- a/src/systems/subspace/modules/connection/src/queues/connectionCleanup/expireSessionConnections.ts +++ b/src/systems/subspace/modules/connection/src/queues/connectionCleanup/expireSessionConnections.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { subMinutes } from 'date-fns'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/connection/src/queues/connectionCleanup/expireSessions.ts b/src/systems/subspace/modules/connection/src/queues/connectionCleanup/expireSessions.ts index 146b71bae..a528c60e3 100644 --- a/src/systems/subspace/modules/connection/src/queues/connectionCleanup/expireSessions.ts +++ b/src/systems/subspace/modules/connection/src/queues/connectionCleanup/expireSessions.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db } from '@metorial-subspace/db'; import { subMinutes } from 'date-fns'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/connection/src/queues/error/createError.ts b/src/systems/subspace/modules/connection/src/queues/error/createError.ts index 1752f8e76..42effe5e0 100644 --- a/src/systems/subspace/modules/connection/src/queues/error/createError.ts +++ b/src/systems/subspace/modules/connection/src/queues/error/createError.ts @@ -1,6 +1,6 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId, snowflake } from '@metorial-subspace/db'; import { endOfDay, startOfDay } from 'date-fns'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/connection/src/queues/error/createWarning.ts b/src/systems/subspace/modules/connection/src/queues/error/createWarning.ts index 4923dd890..1b1125aa2 100644 --- a/src/systems/subspace/modules/connection/src/queues/error/createWarning.ts +++ b/src/systems/subspace/modules/connection/src/queues/error/createWarning.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/connection/src/queues/index.ts b/src/systems/subspace/modules/connection/src/queues/index.ts index 42538d6d7..a5f15616d 100644 --- a/src/systems/subspace/modules/connection/src/queues/index.ts +++ b/src/systems/subspace/modules/connection/src/queues/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { expireSessionConnectionsQueues } from './connectionCleanup/expireSessionConnections'; import { expireSessionsCron } from './connectionCleanup/expireSessions'; import { createErrorQueueProcessor } from './error/createError'; diff --git a/src/systems/subspace/modules/connection/src/queues/message/finalizeMessage.ts b/src/systems/subspace/modules/connection/src/queues/message/finalizeMessage.ts index 81bfce753..2f7fe05ca 100644 --- a/src/systems/subspace/modules/connection/src/queues/message/finalizeMessage.ts +++ b/src/systems/subspace/modules/connection/src/queues/message/finalizeMessage.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { v7 } from 'uuid'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/connection/src/queues/message/messageCreated.ts b/src/systems/subspace/modules/connection/src/queues/message/messageCreated.ts index 48580dfc4..f083cd03e 100644 --- a/src/systems/subspace/modules/connection/src/queues/message/messageCreated.ts +++ b/src/systems/subspace/modules/connection/src/queues/message/messageCreated.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { finalizeMessageQueue } from './finalizeMessage'; diff --git a/src/systems/subspace/modules/connection/src/queues/message/messageTimeout.ts b/src/systems/subspace/modules/connection/src/queues/message/messageTimeout.ts index f4b3fdd66..aa0ea30e7 100644 --- a/src/systems/subspace/modules/connection/src/queues/message/messageTimeout.ts +++ b/src/systems/subspace/modules/connection/src/queues/message/messageTimeout.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { differenceInMinutes } from 'date-fns'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/connection/src/queues/message/offloadMessage.ts b/src/systems/subspace/modules/connection/src/queues/message/offloadMessage.ts index e3e090ee1..831515cbd 100644 --- a/src/systems/subspace/modules/connection/src/queues/message/offloadMessage.ts +++ b/src/systems/subspace/modules/connection/src/queues/message/offloadMessage.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { offload } from '@metorial-subspace/connection-utils'; import { db } from '@metorial-subspace/db'; import { subDays } from 'date-fns'; diff --git a/src/systems/subspace/modules/connection/src/queues/provderRun/providerRunStart.ts b/src/systems/subspace/modules/connection/src/queues/provderRun/providerRunStart.ts index 93b5a707c..cb787f610 100644 --- a/src/systems/subspace/modules/connection/src/queues/provderRun/providerRunStart.ts +++ b/src/systems/subspace/modules/connection/src/queues/provderRun/providerRunStart.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { v7 } from 'uuid'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/connection/src/queues/provderRun/stopProviderRuns.ts b/src/systems/subspace/modules/connection/src/queues/provderRun/stopProviderRuns.ts index 0d58f67d0..92dbf5fe5 100644 --- a/src/systems/subspace/modules/connection/src/queues/provderRun/stopProviderRuns.ts +++ b/src/systems/subspace/modules/connection/src/queues/provderRun/stopProviderRuns.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db } from '@metorial-subspace/db'; import { subMinutes } from 'date-fns'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/connection/src/sender/connection.ts b/src/systems/subspace/modules/connection/src/sender/connection.ts index 9cd240c7c..3625c8eb8 100644 --- a/src/systems/subspace/modules/connection/src/sender/connection.ts +++ b/src/systems/subspace/modules/connection/src/sender/connection.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { serialize } from '@lowerdeck/serialize'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { serialize } from '@mtsrc/serialize'; import type { BroadcastMessage, ConduitResult } from '@metorial-subspace/connection-utils'; import { db, type SessionMessage } from '@metorial-subspace/db'; import { broadcastNats } from '../lib/nats'; diff --git a/src/systems/subspace/modules/connection/src/sender/manager.ts b/src/systems/subspace/modules/connection/src/sender/manager.ts index 67b501632..00e5d91fe 100644 --- a/src/systems/subspace/modules/connection/src/sender/manager.ts +++ b/src/systems/subspace/modules/connection/src/sender/manager.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { badRequestError, goneError, @@ -6,9 +6,9 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { getSentry } from '@lowerdeck/sentry'; +} from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { getSentry } from '@mtsrc/sentry'; import type { ConduitInput, ConduitResult } from '@metorial-subspace/connection-utils'; import { type AgentInstance, diff --git a/src/systems/subspace/modules/connection/src/shared/completeMessage.ts b/src/systems/subspace/modules/connection/src/shared/completeMessage.ts index a560e4c89..6d76d7ef5 100644 --- a/src/systems/subspace/modules/connection/src/shared/completeMessage.ts +++ b/src/systems/subspace/modules/connection/src/shared/completeMessage.ts @@ -1,4 +1,4 @@ -import { generateCustomId } from '@lowerdeck/id'; +import { generateCustomId } from '@mtsrc/id'; import { db, getId, diff --git a/src/systems/subspace/modules/connection/src/shared/upsertParticipant.ts b/src/systems/subspace/modules/connection/src/shared/upsertParticipant.ts index cd4822174..c9985b1a1 100644 --- a/src/systems/subspace/modules/connection/src/shared/upsertParticipant.ts +++ b/src/systems/subspace/modules/connection/src/shared/upsertParticipant.ts @@ -1,5 +1,5 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; import { type AgentInstance, db, diff --git a/src/systems/subspace/modules/custom-provider/package.json b/src/systems/subspace/modules/custom-provider/package.json index 916bca412..1d942bda9 100644 --- a/src/systems/subspace/modules/custom-provider/package.json +++ b/src/systems/subspace/modules/custom-provider/package.json @@ -9,21 +9,21 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", "@metorial-platform-systems/origin-client": "^1.0.0", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/list-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/module-search": "^1.0.0", "@metorial-subspace/module-tenant": "^1.0.0", - "@metorial-subspace/provider": "^1.0.0" + "@metorial-subspace/provider": "^1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/custom-provider/src/env.ts b/src/systems/subspace/modules/custom-provider/src/env.ts index 9f48e807b..e41e7e455 100644 --- a/src/systems/subspace/modules/custom-provider/src/env.ts +++ b/src/systems/subspace/modules/custom-provider/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/custom-provider/src/internal/createVersion.ts b/src/systems/subspace/modules/custom-provider/src/internal/createVersion.ts index a753b59a3..4f38ecdb0 100644 --- a/src/systems/subspace/modules/custom-provider/src/internal/createVersion.ts +++ b/src/systems/subspace/modules/custom-provider/src/internal/createVersion.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; import { addAfterTransactionHook, type CustomProvider, diff --git a/src/systems/subspace/modules/custom-provider/src/origin.ts b/src/systems/subspace/modules/custom-provider/src/origin.ts index 289c89782..52b776648 100644 --- a/src/systems/subspace/modules/custom-provider/src/origin.ts +++ b/src/systems/subspace/modules/custom-provider/src/origin.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { createOriginClient } from '@metorial-platform-systems/origin-client'; import { db, type Tenant } from '@metorial-subspace/db'; import { env } from './env'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues.ts b/src/systems/subspace/modules/custom-provider/src/queues.ts index 09f5a70a8..1c6c52f62 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { commitQueues } from './queues/commit'; import { deploymentQueues } from './queues/deployment'; import { lifecycleQueues } from './queues/lifecycle'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/commit/apply.ts b/src/systems/subspace/modules/custom-provider/src/queues/commit/apply.ts index ebd2c4774..af8b91c6a 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/commit/apply.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/commit/apply.ts @@ -1,5 +1,5 @@ -import { createLock } from '@lowerdeck/lock'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createLock } from '@mtsrc/lock'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId, withTransaction } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/commit/index.ts b/src/systems/subspace/modules/custom-provider/src/queues/commit/index.ts index 4a4a9ef36..aa848dc73 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/commit/index.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/commit/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { commitApplyQueueProcessor } from './apply'; export let commitQueues = combineQueueProcessors([commitApplyQueueProcessor]); diff --git a/src/systems/subspace/modules/custom-provider/src/queues/deployment/failed.ts b/src/systems/subspace/modules/custom-provider/src/queues/deployment/failed.ts index 6a9a56cb3..f054ad274 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/deployment/failed.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/deployment/failed.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/deployment/index.ts b/src/systems/subspace/modules/custom-provider/src/queues/deployment/index.ts index 33a14ae25..2e9d904bf 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/deployment/index.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/deployment/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { customDeploymentFailedQueueProcessor } from './failed'; import { customDeploymentMonitorQueueProcessor } from './monitor'; import { customDeploymentPropagateToOtherEnvironmentsQueueProcessor } from './propagateToOtherEnvironments'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/deployment/monitor.ts b/src/systems/subspace/modules/custom-provider/src/queues/deployment/monitor.ts index bd4a4ffbd..6d6269969 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/deployment/monitor.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/deployment/monitor.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, snowflake } from '@metorial-subspace/db'; import { getTenantForShuttle, shuttle } from '@metorial-subspace/provider-shuttle/src/client'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/deployment/propagateToOtherEnvironments.ts b/src/systems/subspace/modules/custom-provider/src/queues/deployment/propagateToOtherEnvironments.ts index c2b3aca18..d61536281 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/deployment/propagateToOtherEnvironments.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/deployment/propagateToOtherEnvironments.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, withTransaction } from '@metorial-subspace/db'; import { actorService } from '@metorial-subspace/module-tenant'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/deployment/succeeded.ts b/src/systems/subspace/modules/custom-provider/src/queues/deployment/succeeded.ts index 9e213009f..284332502 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/deployment/succeeded.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/deployment/succeeded.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { addAfterTransactionHook, db, withTransaction } from '@metorial-subspace/db'; import { getTenantForShuttle, shuttle } from '@metorial-subspace/provider-shuttle/src/client'; import { upsertShuttleServerVersion } from '@metorial-subspace/provider-shuttle/src/lib/upsertShuttleVersion'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/customProvider.ts b/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/customProvider.ts index f69978023..149cfb99c 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/customProvider.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/customProvider.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; import { indexCustomProviderQueue } from '../search/customProvider'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/customProviderDeployment.ts b/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/customProviderDeployment.ts index e8720f624..512640f81 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/customProviderDeployment.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/customProviderDeployment.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { ensureEnvironments } from '../../internal/ensureEnvironments'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/index.ts b/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/index.ts index bf50e518a..c600c412e 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/index.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/lifecycle/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { customProviderCreatedQueueProcessor, customProviderUpdatedQueueProcessor diff --git a/src/systems/subspace/modules/custom-provider/src/queues/scm/cron.ts b/src/systems/subspace/modules/custom-provider/src/queues/scm/cron.ts index ef09e4831..dd6376425 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/scm/cron.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/scm/cron.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { env } from '../../env'; import { enqueueScmSyncMany } from './sync'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/scm/handlePush.ts b/src/systems/subspace/modules/custom-provider/src/queues/scm/handlePush.ts index 39b3eb618..d9742e682 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/scm/handlePush.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/scm/handlePush.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { addAfterTransactionHook, db, getId, withTransaction } from '@metorial-subspace/db'; import { actorService } from '@metorial-subspace/module-tenant'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/scm/index.ts b/src/systems/subspace/modules/custom-provider/src/queues/scm/index.ts index 7e293db80..919393d4c 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/scm/index.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/scm/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { scmSyncManyCron } from './cron'; import { handlePushQueueProcessor, processProviderPushQueueProcessor } from './handlePush'; import { scmSyncManyQueueProcessor } from './sync'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/scm/sync.ts b/src/systems/subspace/modules/custom-provider/src/queues/scm/sync.ts index 08d68e2c4..14650e3b4 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/scm/sync.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/scm/sync.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, snowflake } from '@metorial-subspace/db'; import { env } from '../../env'; import { origin } from '../../origin'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/search/customProvider.ts b/src/systems/subspace/modules/custom-provider/src/queues/search/customProvider.ts index b93742c31..70c394cf4 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/search/customProvider.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/search/customProvider.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/custom-provider/src/queues/search/index.ts b/src/systems/subspace/modules/custom-provider/src/queues/search/index.ts index 5da2a9a45..258661cd0 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/search/index.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/search/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { indexCustomProviderQueueProcessor } from './customProvider'; export let searchQueues = combineQueueProcessors([indexCustomProviderQueueProcessor]); diff --git a/src/systems/subspace/modules/custom-provider/src/queues/upcoming/handle.ts b/src/systems/subspace/modules/custom-provider/src/queues/upcoming/handle.ts index ea7ac4163..e55ac36de 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/upcoming/handle.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/upcoming/handle.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { addAfterTransactionHook, type CustomProvider, diff --git a/src/systems/subspace/modules/custom-provider/src/queues/upcoming/index.ts b/src/systems/subspace/modules/custom-provider/src/queues/upcoming/index.ts index 32466d599..772bd6758 100644 --- a/src/systems/subspace/modules/custom-provider/src/queues/upcoming/index.ts +++ b/src/systems/subspace/modules/custom-provider/src/queues/upcoming/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { handleUpcomingCustomProviderQueueProcessor } from './handle'; export let upcomingQueues = combineQueueProcessors([ diff --git a/src/systems/subspace/modules/custom-provider/src/services/bucket.ts b/src/systems/subspace/modules/custom-provider/src/services/bucket.ts index 6b01141ef..1f7eaf630 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/bucket.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/bucket.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type CodeBucket, db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, diff --git a/src/systems/subspace/modules/custom-provider/src/services/customProvider.ts b/src/systems/subspace/modules/custom-provider/src/services/customProvider.ts index e0f72ead3..47e62c58f 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/customProvider.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/customProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { CustomProviderConfig, CustomProviderFrom, diff --git a/src/systems/subspace/modules/custom-provider/src/services/customProviderCommit.ts b/src/systems/subspace/modules/custom-provider/src/services/customProviderCommit.ts index 38fad211f..50610104a 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/customProviderCommit.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/customProviderCommit.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type CustomProviderCommit, type CustomProviderCommitTrigger, diff --git a/src/systems/subspace/modules/custom-provider/src/services/customProviderDeployment.ts b/src/systems/subspace/modules/custom-provider/src/services/customProviderDeployment.ts index 0f1fd4d28..7ca3919d0 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/customProviderDeployment.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/customProviderDeployment.ts @@ -1,7 +1,7 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { shadowId } from '@lowerdeck/shadow-id'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { shadowId } from '@mtsrc/shadow-id'; import { type CustomProviderDeployment, type CustomProviderDeploymentStatus, diff --git a/src/systems/subspace/modules/custom-provider/src/services/customProviderEnvironment.ts b/src/systems/subspace/modules/custom-provider/src/services/customProviderEnvironment.ts index 450ac1afa..f0ce511d6 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/customProviderEnvironment.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/customProviderEnvironment.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, diff --git a/src/systems/subspace/modules/custom-provider/src/services/customProviderVersion.ts b/src/systems/subspace/modules/custom-provider/src/services/customProviderVersion.ts index 29d140b9d..1b4f288ae 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/customProviderVersion.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/customProviderVersion.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { CustomProviderConfig, CustomProviderFrom, diff --git a/src/systems/subspace/modules/custom-provider/src/services/scmConnection.ts b/src/systems/subspace/modules/custom-provider/src/services/scmConnection.ts index 66ceef8b8..7f91afdca 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/scmConnection.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/scmConnection.ts @@ -1,5 +1,5 @@ -import type { PaginatorInput } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import type { PaginatorInput } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant, TenantActor } from '@metorial-subspace/db'; import { getTenantForOrigin, origin } from '../origin'; diff --git a/src/systems/subspace/modules/custom-provider/src/services/scmConnectionSetupSession.ts b/src/systems/subspace/modules/custom-provider/src/services/scmConnectionSetupSession.ts index 2cf4d1b98..36e14dfa2 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/scmConnectionSetupSession.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/scmConnectionSetupSession.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import type { Tenant, TenantActor } from '@metorial-subspace/db'; import { getTenantForOrigin, origin } from '../origin'; diff --git a/src/systems/subspace/modules/custom-provider/src/services/scmProvider.ts b/src/systems/subspace/modules/custom-provider/src/services/scmProvider.ts index d4d381e5d..3395081ae 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/scmProvider.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/scmProvider.ts @@ -1,5 +1,5 @@ -import type { PaginatorInput } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import type { PaginatorInput } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '@metorial-subspace/db'; import { getTenantForOrigin, origin } from '../origin'; diff --git a/src/systems/subspace/modules/custom-provider/src/services/scmProviderSetupSession.ts b/src/systems/subspace/modules/custom-provider/src/services/scmProviderSetupSession.ts index 6c07d8242..f4fad4b8e 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/scmProviderSetupSession.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/scmProviderSetupSession.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '@metorial-subspace/db'; import { getTenantForOrigin, origin } from '../origin'; diff --git a/src/systems/subspace/modules/custom-provider/src/services/scmPush.ts b/src/systems/subspace/modules/custom-provider/src/services/scmPush.ts index 49acc7497..0df5ab2a8 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/scmPush.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/scmPush.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, normalizeDateFilter, resolveScmRepos } from '@metorial-subspace/list-utils'; diff --git a/src/systems/subspace/modules/custom-provider/src/services/scmRepository.ts b/src/systems/subspace/modules/custom-provider/src/services/scmRepository.ts index 322566d44..db4c68873 100644 --- a/src/systems/subspace/modules/custom-provider/src/services/scmRepository.ts +++ b/src/systems/subspace/modules/custom-provider/src/services/scmRepository.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, normalizeDateFilter, resolveCustomProviders } from '@metorial-subspace/list-utils'; import { ensureScmRepoForOrigin } from '../internal/linkRepo'; diff --git a/src/systems/subspace/modules/deployment/package.json b/src/systems/subspace/modules/deployment/package.json index 177aa423e..b2f96a3c1 100644 --- a/src/systems/subspace/modules/deployment/package.json +++ b/src/systems/subspace/modules/deployment/package.json @@ -9,20 +9,20 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/list-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/module-search": "^1.0.0", "@metorial-subspace/module-tenant": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", - "@metorial-subspace/provider-utils": "^1.0.0" + "@metorial-subspace/provider-utils": "^1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/deployment/src/env.ts b/src/systems/subspace/modules/deployment/src/env.ts index a9c453a24..04d02ebf2 100644 --- a/src/systems/subspace/modules/deployment/src/env.ts +++ b/src/systems/subspace/modules/deployment/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/deployment/src/queues.ts b/src/systems/subspace/modules/deployment/src/queues.ts index b0bec93db..5c526d5af 100644 --- a/src/systems/subspace/modules/deployment/src/queues.ts +++ b/src/systems/subspace/modules/deployment/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { deleteQueues } from './queues/delete'; import { lifecycleQueues } from './queues/lifecycle'; import { searchQueues } from './queues/search'; diff --git a/src/systems/subspace/modules/deployment/src/queues/delete/index.ts b/src/systems/subspace/modules/deployment/src/queues/delete/index.ts index e7d6e8d3c..55a4a1121 100644 --- a/src/systems/subspace/modules/deployment/src/queues/delete/index.ts +++ b/src/systems/subspace/modules/deployment/src/queues/delete/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { providerConfigArchivedCleanupCron, providerConfigBackendDeleteQueueProcessor, diff --git a/src/systems/subspace/modules/deployment/src/queues/delete/providerConfig.ts b/src/systems/subspace/modules/deployment/src/queues/delete/providerConfig.ts index dd06b7c51..c4bfd803e 100644 --- a/src/systems/subspace/modules/deployment/src/queues/delete/providerConfig.ts +++ b/src/systems/subspace/modules/deployment/src/queues/delete/providerConfig.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { getBackend } from '@metorial-subspace/provider'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/deployment/src/queues/delete/providerConfigVault.ts b/src/systems/subspace/modules/deployment/src/queues/delete/providerConfigVault.ts index e5eadf269..859daf9bf 100644 --- a/src/systems/subspace/modules/deployment/src/queues/delete/providerConfigVault.ts +++ b/src/systems/subspace/modules/deployment/src/queues/delete/providerConfigVault.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { providerConfigVaultDeletedQueue } from '../lifecycle/providerConfigVault'; diff --git a/src/systems/subspace/modules/deployment/src/queues/delete/providerDeployment.ts b/src/systems/subspace/modules/deployment/src/queues/delete/providerDeployment.ts index 43f6da379..062d2d124 100644 --- a/src/systems/subspace/modules/deployment/src/queues/delete/providerDeployment.ts +++ b/src/systems/subspace/modules/deployment/src/queues/delete/providerDeployment.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { getBackend } from '@metorial-subspace/provider'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/deployment/src/queues/lifecycle/index.ts b/src/systems/subspace/modules/deployment/src/queues/lifecycle/index.ts index b1082f508..bf93dcb51 100644 --- a/src/systems/subspace/modules/deployment/src/queues/lifecycle/index.ts +++ b/src/systems/subspace/modules/deployment/src/queues/lifecycle/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { providerConfigArchivedQueueProcessor, providerConfigCreatedQueueProcessor, diff --git a/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerConfig.ts b/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerConfig.ts index e89754adf..0fde55752 100644 --- a/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerConfig.ts +++ b/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerConfig.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { integrationInstanceProviderCredentialSyncQueue } from '@metorial-subspace/module-identity/src/queues/lifecycle/integrationInstanceProviderCredential'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerConfigVault.ts b/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerConfigVault.ts index 82f955eb8..64e8922ee 100644 --- a/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerConfigVault.ts +++ b/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerConfigVault.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { indexProviderConfigVaultQueue } from '../search/providerConfigVault'; diff --git a/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerDeployment.ts b/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerDeployment.ts index cfdca2ec5..a28847d00 100644 --- a/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerDeployment.ts +++ b/src/systems/subspace/modules/deployment/src/queues/lifecycle/providerDeployment.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { providerAuthConfigArchivedQueue } from '../../../../auth/src/queues/lifecycle/providerAuthConfig'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/deployment/src/queues/search/index.ts b/src/systems/subspace/modules/deployment/src/queues/search/index.ts index 436b6f0e2..481b252c7 100644 --- a/src/systems/subspace/modules/deployment/src/queues/search/index.ts +++ b/src/systems/subspace/modules/deployment/src/queues/search/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { indexProviderConfigQueueProcessor } from './providerConfig'; import { indexProviderConfigVaultQueueProcessor } from './providerConfigVault'; import { indexProviderDeploymentQueueProcessor } from './providerDeployment'; diff --git a/src/systems/subspace/modules/deployment/src/queues/search/providerConfig.ts b/src/systems/subspace/modules/deployment/src/queues/search/providerConfig.ts index 6a9eaf096..589920d41 100644 --- a/src/systems/subspace/modules/deployment/src/queues/search/providerConfig.ts +++ b/src/systems/subspace/modules/deployment/src/queues/search/providerConfig.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/deployment/src/queues/search/providerConfigVault.ts b/src/systems/subspace/modules/deployment/src/queues/search/providerConfigVault.ts index 270aba6ca..74a079623 100644 --- a/src/systems/subspace/modules/deployment/src/queues/search/providerConfigVault.ts +++ b/src/systems/subspace/modules/deployment/src/queues/search/providerConfigVault.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/deployment/src/queues/search/providerDeployment.ts b/src/systems/subspace/modules/deployment/src/queues/search/providerDeployment.ts index 29a92a661..1748edbc9 100644 --- a/src/systems/subspace/modules/deployment/src/queues/search/providerDeployment.ts +++ b/src/systems/subspace/modules/deployment/src/queues/search/providerDeployment.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/deployment/src/services/providerConfig.ts b/src/systems/subspace/modules/deployment/src/services/providerConfig.ts index a7232c7ce..f88bd3c7f 100644 --- a/src/systems/subspace/modules/deployment/src/services/providerConfig.ts +++ b/src/systems/subspace/modules/deployment/src/services/providerConfig.ts @@ -3,10 +3,10 @@ import { notFoundError, preconditionFailedError, ServiceError -} from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +} from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/deployment/src/services/providerConfigVault.ts b/src/systems/subspace/modules/deployment/src/services/providerConfigVault.ts index 30c694dec..9421a8ab1 100644 --- a/src/systems/subspace/modules/deployment/src/services/providerConfigVault.ts +++ b/src/systems/subspace/modules/deployment/src/services/providerConfigVault.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/deployment/src/services/providerDeployment.ts b/src/systems/subspace/modules/deployment/src/services/providerDeployment.ts index 4e0e999aa..923110932 100644 --- a/src/systems/subspace/modules/deployment/src/services/providerDeployment.ts +++ b/src/systems/subspace/modules/deployment/src/services/providerDeployment.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/identity/package.json b/src/systems/subspace/modules/identity/package.json index 867a46492..9e32d4baf 100644 --- a/src/systems/subspace/modules/identity/package.json +++ b/src/systems/subspace/modules/identity/package.json @@ -9,17 +9,6 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/list-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", @@ -27,7 +16,18 @@ "@metorial-subspace/module-tenant": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", "@metorial-subspace/provider-utils": "^1.0.0", - "date-fns": "^4.1.0" + "date-fns": "^4.1.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/identity/src/env.ts b/src/systems/subspace/modules/identity/src/env.ts index a9c453a24..04d02ebf2 100644 --- a/src/systems/subspace/modules/identity/src/env.ts +++ b/src/systems/subspace/modules/identity/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/identity/src/lib/delegationChecker.ts b/src/systems/subspace/modules/identity/src/lib/delegationChecker.ts index 79637f93b..4dd81cbb6 100644 --- a/src/systems/subspace/modules/identity/src/lib/delegationChecker.ts +++ b/src/systems/subspace/modules/identity/src/lib/delegationChecker.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { delay } from '@mtsrc/delay'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { db, type DelegatedIdentity, diff --git a/src/systems/subspace/modules/identity/src/queues.ts b/src/systems/subspace/modules/identity/src/queues.ts index 173a74ad1..70262bf03 100644 --- a/src/systems/subspace/modules/identity/src/queues.ts +++ b/src/systems/subspace/modules/identity/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { archiveQueues } from './queues/archive'; import { deleteQueues } from './queues/delete'; import { expireQueues } from './queues/expire'; diff --git a/src/systems/subspace/modules/identity/src/queues/archive/identity.ts b/src/systems/subspace/modules/identity/src/queues/archive/identity.ts index a7efe4aec..09440fe46 100644 --- a/src/systems/subspace/modules/identity/src/queues/archive/identity.ts +++ b/src/systems/subspace/modules/identity/src/queues/archive/identity.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { identityDeletedQueue } from '../lifecycle/identity'; diff --git a/src/systems/subspace/modules/identity/src/queues/archive/index.ts b/src/systems/subspace/modules/identity/src/queues/archive/index.ts index 01dc6cfa1..649f6271e 100644 --- a/src/systems/subspace/modules/identity/src/queues/archive/index.ts +++ b/src/systems/subspace/modules/identity/src/queues/archive/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { deleteIdentitiesForActorManyQueueProcessor, deleteIdentitiesForActorSingleQueueProcessor diff --git a/src/systems/subspace/modules/identity/src/queues/delete/actor.ts b/src/systems/subspace/modules/identity/src/queues/delete/actor.ts index 24bfddb19..70b5fcbaf 100644 --- a/src/systems/subspace/modules/identity/src/queues/delete/actor.ts +++ b/src/systems/subspace/modules/identity/src/queues/delete/actor.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { getCutoffDate } from './_config'; diff --git a/src/systems/subspace/modules/identity/src/queues/delete/agent.ts b/src/systems/subspace/modules/identity/src/queues/delete/agent.ts index 165715a62..9f409ac97 100644 --- a/src/systems/subspace/modules/identity/src/queues/delete/agent.ts +++ b/src/systems/subspace/modules/identity/src/queues/delete/agent.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { getCutoffDate } from './_config'; diff --git a/src/systems/subspace/modules/identity/src/queues/delete/identity.ts b/src/systems/subspace/modules/identity/src/queues/delete/identity.ts index ea721b963..f859c9393 100644 --- a/src/systems/subspace/modules/identity/src/queues/delete/identity.ts +++ b/src/systems/subspace/modules/identity/src/queues/delete/identity.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { getCutoffDate } from './_config'; diff --git a/src/systems/subspace/modules/identity/src/queues/delete/index.ts b/src/systems/subspace/modules/identity/src/queues/delete/index.ts index fa76e02d9..0609966ee 100644 --- a/src/systems/subspace/modules/identity/src/queues/delete/index.ts +++ b/src/systems/subspace/modules/identity/src/queues/delete/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { identityActorArchivedCleanupCron } from './actor'; import { agentArchivedCleanupCron } from './agent'; import { identityArchivedCleanupCron } from './identity'; diff --git a/src/systems/subspace/modules/identity/src/queues/expire/delegation.ts b/src/systems/subspace/modules/identity/src/queues/expire/delegation.ts index 7b1ded81d..ef81d2faa 100644 --- a/src/systems/subspace/modules/identity/src/queues/expire/delegation.ts +++ b/src/systems/subspace/modules/identity/src/queues/expire/delegation.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { reconcileQueue } from '../reconciler/reconcile'; diff --git a/src/systems/subspace/modules/identity/src/queues/expire/delegationCredential.ts b/src/systems/subspace/modules/identity/src/queues/expire/delegationCredential.ts index 84cc4f460..8dd6bc995 100644 --- a/src/systems/subspace/modules/identity/src/queues/expire/delegationCredential.ts +++ b/src/systems/subspace/modules/identity/src/queues/expire/delegationCredential.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { reconcileQueue } from '../reconciler/reconcile'; diff --git a/src/systems/subspace/modules/identity/src/queues/expire/index.ts b/src/systems/subspace/modules/identity/src/queues/expire/index.ts index 508bdbe32..19d9b6566 100644 --- a/src/systems/subspace/modules/identity/src/queues/expire/index.ts +++ b/src/systems/subspace/modules/identity/src/queues/expire/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { expireIdentityDelegationsCron, expireIdentityDelegationsManyQueueProcessor diff --git a/src/systems/subspace/modules/identity/src/queues/lifecycle/actor.ts b/src/systems/subspace/modules/identity/src/queues/lifecycle/actor.ts index 3b5e472ec..4fbed88af 100644 --- a/src/systems/subspace/modules/identity/src/queues/lifecycle/actor.ts +++ b/src/systems/subspace/modules/identity/src/queues/lifecycle/actor.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; import { indexIdentityActorQueue } from '../search/actor'; import { lcOpts } from './_opts'; diff --git a/src/systems/subspace/modules/identity/src/queues/lifecycle/agent.ts b/src/systems/subspace/modules/identity/src/queues/lifecycle/agent.ts index 7e4ab66c5..67259d645 100644 --- a/src/systems/subspace/modules/identity/src/queues/lifecycle/agent.ts +++ b/src/systems/subspace/modules/identity/src/queues/lifecycle/agent.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../../../agent/src/env'; import { indexAgentQueue } from '../search/agent'; import { lcOpts } from './_opts'; diff --git a/src/systems/subspace/modules/identity/src/queues/lifecycle/delegation.ts b/src/systems/subspace/modules/identity/src/queues/lifecycle/delegation.ts index 0a9ab0aca..cadcff65f 100644 --- a/src/systems/subspace/modules/identity/src/queues/lifecycle/delegation.ts +++ b/src/systems/subspace/modules/identity/src/queues/lifecycle/delegation.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { reconcileQueue } from '../reconciler/reconcile'; diff --git a/src/systems/subspace/modules/identity/src/queues/lifecycle/identity.ts b/src/systems/subspace/modules/identity/src/queues/lifecycle/identity.ts index ec2322714..2b4cf41fc 100644 --- a/src/systems/subspace/modules/identity/src/queues/lifecycle/identity.ts +++ b/src/systems/subspace/modules/identity/src/queues/lifecycle/identity.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { reconcileQueue } from '../reconciler/reconcile'; diff --git a/src/systems/subspace/modules/identity/src/queues/lifecycle/identityCredential.ts b/src/systems/subspace/modules/identity/src/queues/lifecycle/identityCredential.ts index 117e8a62e..6b99f6308 100644 --- a/src/systems/subspace/modules/identity/src/queues/lifecycle/identityCredential.ts +++ b/src/systems/subspace/modules/identity/src/queues/lifecycle/identityCredential.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { reconcileQueue } from '../reconciler/reconcile'; diff --git a/src/systems/subspace/modules/identity/src/queues/lifecycle/identityDelegationConfig.ts b/src/systems/subspace/modules/identity/src/queues/lifecycle/identityDelegationConfig.ts index 238d8209e..bc7179e8d 100644 --- a/src/systems/subspace/modules/identity/src/queues/lifecycle/identityDelegationConfig.ts +++ b/src/systems/subspace/modules/identity/src/queues/lifecycle/identityDelegationConfig.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; import { indexIdentityDelegationConfigQueue } from '../search/identityDelegationConfig'; import { lcOpts } from './_opts'; diff --git a/src/systems/subspace/modules/identity/src/queues/lifecycle/index.ts b/src/systems/subspace/modules/identity/src/queues/lifecycle/index.ts index 5632f0f7b..09bb9edca 100644 --- a/src/systems/subspace/modules/identity/src/queues/lifecycle/index.ts +++ b/src/systems/subspace/modules/identity/src/queues/lifecycle/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { identityActorCreatedQueueProcessor, identityActorDeletedQueueProcessor, diff --git a/src/systems/subspace/modules/identity/src/queues/lifecycle/integrationInstanceProviderCredential.ts b/src/systems/subspace/modules/identity/src/queues/lifecycle/integrationInstanceProviderCredential.ts index 65123e58c..56ba36b16 100644 --- a/src/systems/subspace/modules/identity/src/queues/lifecycle/integrationInstanceProviderCredential.ts +++ b/src/systems/subspace/modules/identity/src/queues/lifecycle/integrationInstanceProviderCredential.ts @@ -1,5 +1,5 @@ -import { createLock } from '@lowerdeck/lock'; -import { createQueue } from '@lowerdeck/queue'; +import { createLock } from '@mtsrc/lock'; +import { createQueue } from '@mtsrc/queue'; import { addAfterTransactionHook, db, getId, withTransaction } from '@metorial-subspace/db'; import { env } from '../../env'; import { reconcileQueue } from '../reconciler/reconcile'; diff --git a/src/systems/subspace/modules/identity/src/queues/reconciler/index.ts b/src/systems/subspace/modules/identity/src/queues/reconciler/index.ts index c4e2b5deb..8cd6673bc 100644 --- a/src/systems/subspace/modules/identity/src/queues/reconciler/index.ts +++ b/src/systems/subspace/modules/identity/src/queues/reconciler/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { reconcileQueueProcessor } from './reconcile'; export let reconcileQueues = combineQueueProcessors([reconcileQueueProcessor]); diff --git a/src/systems/subspace/modules/identity/src/queues/reconciler/reconcile.ts b/src/systems/subspace/modules/identity/src/queues/reconciler/reconcile.ts index f62bf62c1..849d46fb2 100644 --- a/src/systems/subspace/modules/identity/src/queues/reconciler/reconcile.ts +++ b/src/systems/subspace/modules/identity/src/queues/reconciler/reconcile.ts @@ -1,5 +1,5 @@ -import { createLock } from '@lowerdeck/lock'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createLock } from '@mtsrc/lock'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, type DelegatedIdentity, diff --git a/src/systems/subspace/modules/identity/src/queues/search/actor.ts b/src/systems/subspace/modules/identity/src/queues/search/actor.ts index ddf04c4e1..db0118bf2 100644 --- a/src/systems/subspace/modules/identity/src/queues/search/actor.ts +++ b/src/systems/subspace/modules/identity/src/queues/search/actor.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/identity/src/queues/search/agent.ts b/src/systems/subspace/modules/identity/src/queues/search/agent.ts index 2e85d9a7c..726cb4374 100644 --- a/src/systems/subspace/modules/identity/src/queues/search/agent.ts +++ b/src/systems/subspace/modules/identity/src/queues/search/agent.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../../../agent/src/env'; diff --git a/src/systems/subspace/modules/identity/src/queues/search/identity.ts b/src/systems/subspace/modules/identity/src/queues/search/identity.ts index befa68d84..5e5d1c594 100644 --- a/src/systems/subspace/modules/identity/src/queues/search/identity.ts +++ b/src/systems/subspace/modules/identity/src/queues/search/identity.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/identity/src/queues/search/identityDelegationConfig.ts b/src/systems/subspace/modules/identity/src/queues/search/identityDelegationConfig.ts index c2050f0f3..e9a5ab007 100644 --- a/src/systems/subspace/modules/identity/src/queues/search/identityDelegationConfig.ts +++ b/src/systems/subspace/modules/identity/src/queues/search/identityDelegationConfig.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/identity/src/queues/search/index.ts b/src/systems/subspace/modules/identity/src/queues/search/index.ts index 41480dbe7..64b5b5482 100644 --- a/src/systems/subspace/modules/identity/src/queues/search/index.ts +++ b/src/systems/subspace/modules/identity/src/queues/search/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { indexIdentityActorQueueProcessor } from './actor'; import { indexAgentQueueProcessor } from './agent'; import { indexIdentityQueueProcessor } from './identity'; diff --git a/src/systems/subspace/modules/identity/src/services/actor.ts b/src/systems/subspace/modules/identity/src/services/actor.ts index 5f6e27ed9..90f7b3936 100644 --- a/src/systems/subspace/modules/identity/src/services/actor.ts +++ b/src/systems/subspace/modules/identity/src/services/actor.ts @@ -1,8 +1,8 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { generateCode } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { createSlugGenerator } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { generateCode } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { createSlugGenerator } from '@mtsrc/slugify'; import { addAfterTransactionHook, type AgentType, diff --git a/src/systems/subspace/modules/identity/src/services/identity.ts b/src/systems/subspace/modules/identity/src/services/identity.ts index 493082b4e..9fe678386 100644 --- a/src/systems/subspace/modules/identity/src/services/identity.ts +++ b/src/systems/subspace/modules/identity/src/services/identity.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/identity/src/services/identityCredential.ts b/src/systems/subspace/modules/identity/src/services/identityCredential.ts index a2f62dfab..38d741986 100644 --- a/src/systems/subspace/modules/identity/src/services/identityCredential.ts +++ b/src/systems/subspace/modules/identity/src/services/identityCredential.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/identity/src/services/identityDelegation.ts b/src/systems/subspace/modules/identity/src/services/identityDelegation.ts index 9fd88a3a2..dfc2e7faf 100644 --- a/src/systems/subspace/modules/identity/src/services/identityDelegation.ts +++ b/src/systems/subspace/modules/identity/src/services/identityDelegation.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/identity/src/services/identityDelegationConfig.ts b/src/systems/subspace/modules/identity/src/services/identityDelegationConfig.ts index f34d87d83..2df0cc7ea 100644 --- a/src/systems/subspace/modules/identity/src/services/identityDelegationConfig.ts +++ b/src/systems/subspace/modules/identity/src/services/identityDelegationConfig.ts @@ -1,7 +1,7 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/identity/src/services/identityDelegationInternal.ts b/src/systems/subspace/modules/identity/src/services/identityDelegationInternal.ts index 989a357a3..e21a9cc17 100644 --- a/src/systems/subspace/modules/identity/src/services/identityDelegationInternal.ts +++ b/src/systems/subspace/modules/identity/src/services/identityDelegationInternal.ts @@ -1,5 +1,5 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/identity/src/services/identityDelegationRequest.ts b/src/systems/subspace/modules/identity/src/services/identityDelegationRequest.ts index de1b04c6a..99a3c5a0f 100644 --- a/src/systems/subspace/modules/identity/src/services/identityDelegationRequest.ts +++ b/src/systems/subspace/modules/identity/src/services/identityDelegationRequest.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type IdentityActor, diff --git a/src/systems/subspace/modules/identity/src/services/identityInternal.ts b/src/systems/subspace/modules/identity/src/services/identityInternal.ts index 471fd8417..b77363dfc 100644 --- a/src/systems/subspace/modules/identity/src/services/identityInternal.ts +++ b/src/systems/subspace/modules/identity/src/services/identityInternal.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/integration/package.json b/src/systems/subspace/modules/integration/package.json index f685243ac..0db73b833 100644 --- a/src/systems/subspace/modules/integration/package.json +++ b/src/systems/subspace/modules/integration/package.json @@ -9,16 +9,6 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/list-utils": "^1.0.0", "@metorial-subspace/module-auth": "^1.0.0", @@ -29,7 +19,17 @@ "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/module-search": "^1.0.0", "@metorial-subspace/module-tenant": "^1.0.0", - "date-fns": "^4.1.0" + "date-fns": "^4.1.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/integration/src/env.ts b/src/systems/subspace/modules/integration/src/env.ts index a9c453a24..04d02ebf2 100644 --- a/src/systems/subspace/modules/integration/src/env.ts +++ b/src/systems/subspace/modules/integration/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/integration/src/lib/material.ts b/src/systems/subspace/modules/integration/src/lib/material.ts index 3fd12d6d4..460561bba 100644 --- a/src/systems/subspace/modules/integration/src/lib/material.ts +++ b/src/systems/subspace/modules/integration/src/lib/material.ts @@ -1,4 +1,4 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; +import { canonicalize } from '@mtsrc/canonicalize'; let sameObject = (a: unknown, b: unknown) => canonicalize(a ?? null) === canonicalize(b ?? null); diff --git a/src/systems/subspace/modules/integration/src/queues.ts b/src/systems/subspace/modules/integration/src/queues.ts index 041fe3b9b..d42a2da7b 100644 --- a/src/systems/subspace/modules/integration/src/queues.ts +++ b/src/systems/subspace/modules/integration/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { deleteQueues } from './queues/delete'; import { lifecycleQueues } from './queues/lifecycle'; import { searchQueues } from './queues/search'; diff --git a/src/systems/subspace/modules/integration/src/queues/delete/index.ts b/src/systems/subspace/modules/integration/src/queues/delete/index.ts index 1d6e0140b..71447d203 100644 --- a/src/systems/subspace/modules/integration/src/queues/delete/index.ts +++ b/src/systems/subspace/modules/integration/src/queues/delete/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { integrationArchivedCleanupCron, integrationDeleteManyQueueProcessor, diff --git a/src/systems/subspace/modules/integration/src/queues/delete/integration.ts b/src/systems/subspace/modules/integration/src/queues/delete/integration.ts index 70814ef81..80e0e9084 100644 --- a/src/systems/subspace/modules/integration/src/queues/delete/integration.ts +++ b/src/systems/subspace/modules/integration/src/queues/delete/integration.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { integrationDeletedQueue } from '../lifecycle/integration'; diff --git a/src/systems/subspace/modules/integration/src/queues/delete/integrationInstance.ts b/src/systems/subspace/modules/integration/src/queues/delete/integrationInstance.ts index dd57bae56..810de14aa 100644 --- a/src/systems/subspace/modules/integration/src/queues/delete/integrationInstance.ts +++ b/src/systems/subspace/modules/integration/src/queues/delete/integrationInstance.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { integrationInstanceDeletedQueue } from '../lifecycle/integrationInstance'; diff --git a/src/systems/subspace/modules/integration/src/queues/lifecycle/archiveIntegrationInstance.ts b/src/systems/subspace/modules/integration/src/queues/lifecycle/archiveIntegrationInstance.ts index cd0fce588..7a427e1d4 100644 --- a/src/systems/subspace/modules/integration/src/queues/lifecycle/archiveIntegrationInstance.ts +++ b/src/systems/subspace/modules/integration/src/queues/lifecycle/archiveIntegrationInstance.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { runIntegrationInstanceArchivedEffects } from './integrationInstance'; diff --git a/src/systems/subspace/modules/integration/src/queues/lifecycle/index.ts b/src/systems/subspace/modules/integration/src/queues/lifecycle/index.ts index c21ef86df..767469eec 100644 --- a/src/systems/subspace/modules/integration/src/queues/lifecycle/index.ts +++ b/src/systems/subspace/modules/integration/src/queues/lifecycle/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { archiveIntegrationInstanceQueueProcessor } from './archiveIntegrationInstance'; import { integrationInstanceGroupArchiveProvidersManyQueueProcessor, diff --git a/src/systems/subspace/modules/integration/src/queues/lifecycle/integration.ts b/src/systems/subspace/modules/integration/src/queues/lifecycle/integration.ts index bd128ae4d..b8f32e7fb 100644 --- a/src/systems/subspace/modules/integration/src/queues/lifecycle/integration.ts +++ b/src/systems/subspace/modules/integration/src/queues/lifecycle/integration.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { identityInternalService } from '@metorial-subspace/module-identity'; import { reconcileSkillProviderLinksQueue } from '@metorial-subspace/module-skills/src/queues/reconciler/reconcileSkillProviderLink'; diff --git a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstance.ts b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstance.ts index 5fd486431..00c2b9660 100644 --- a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstance.ts +++ b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstance.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { identityInternalService } from '@metorial-subspace/module-identity'; import { identityDeletedQueue } from '@metorial-subspace/module-identity/src/queues/lifecycle/identity'; diff --git a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceGroup.ts b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceGroup.ts index ba93480aa..2c309c4cf 100644 --- a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceGroup.ts +++ b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceGroup.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { enqueueArchiveIntegrationInstanceGroupSessionTemplates, diff --git a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceGroupProvider.ts b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceGroupProvider.ts index 05f6e7373..5152f652f 100644 --- a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceGroupProvider.ts +++ b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceGroupProvider.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { queueJobId } from '@metorial-subspace/module-session/src/lib/sessionTemplateSync'; import { enqueueSyncIntegrationInstanceGroupSessionTemplates } from '@metorial-subspace/module-session/src/queues/lifecycle/linkedIntegrationInstanceGroupTemplate'; diff --git a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceProvider.ts b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceProvider.ts index 4edbe9f29..533eb72ee 100644 --- a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceProvider.ts +++ b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationInstanceProvider.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { providerAuthConfigService } from '@metorial-subspace/module-auth'; import { providerConfigService } from '@metorial-subspace/module-deployment'; diff --git a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationProvider.ts b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationProvider.ts index 8a165e341..fee90be4b 100644 --- a/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationProvider.ts +++ b/src/systems/subspace/modules/integration/src/queues/lifecycle/integrationProvider.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { identityInternalService } from '@metorial-subspace/module-identity'; import { enqueueSyncIntegrationInstanceGroupSessionTemplatesMany } from '@metorial-subspace/module-session/src/queues/lifecycle/linkedIntegrationInstanceGroupTemplate'; diff --git a/src/systems/subspace/modules/integration/src/queues/lifecycle/magicMcpBackingReconcile.ts b/src/systems/subspace/modules/integration/src/queues/lifecycle/magicMcpBackingReconcile.ts index 302adb9c5..23a860a63 100644 --- a/src/systems/subspace/modules/integration/src/queues/lifecycle/magicMcpBackingReconcile.ts +++ b/src/systems/subspace/modules/integration/src/queues/lifecycle/magicMcpBackingReconcile.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, type Environment, diff --git a/src/systems/subspace/modules/integration/src/queues/search/index.ts b/src/systems/subspace/modules/integration/src/queues/search/index.ts index c0d58a11a..b8b49b444 100644 --- a/src/systems/subspace/modules/integration/src/queues/search/index.ts +++ b/src/systems/subspace/modules/integration/src/queues/search/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { indexIntegrationQueueProcessor } from './integration'; import { indexIntegrationInstanceQueueProcessor } from './integrationInstance'; diff --git a/src/systems/subspace/modules/integration/src/queues/search/integration.ts b/src/systems/subspace/modules/integration/src/queues/search/integration.ts index b3d717fda..8c755ffcd 100644 --- a/src/systems/subspace/modules/integration/src/queues/search/integration.ts +++ b/src/systems/subspace/modules/integration/src/queues/search/integration.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/integration/src/queues/search/integrationInstance.ts b/src/systems/subspace/modules/integration/src/queues/search/integrationInstance.ts index 326d441c7..c6473c622 100644 --- a/src/systems/subspace/modules/integration/src/queues/search/integrationInstance.ts +++ b/src/systems/subspace/modules/integration/src/queues/search/integrationInstance.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/integration/src/services/integration.ts b/src/systems/subspace/modules/integration/src/services/integration.ts index 23be61f36..146599f72 100644 --- a/src/systems/subspace/modules/integration/src/services/integration.ts +++ b/src/systems/subspace/modules/integration/src/services/integration.ts @@ -1,8 +1,8 @@ -import { badRequestError, conflictError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { badRequestError, conflictError, notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/integration/src/services/integrationInstance.ts b/src/systems/subspace/modules/integration/src/services/integrationInstance.ts index a51328dd7..247af9bdb 100644 --- a/src/systems/subspace/modules/integration/src/services/integrationInstance.ts +++ b/src/systems/subspace/modules/integration/src/services/integrationInstance.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/integration/src/services/integrationInstanceGroup.ts b/src/systems/subspace/modules/integration/src/services/integrationInstanceGroup.ts index b72752e72..66b70ce03 100644 --- a/src/systems/subspace/modules/integration/src/services/integrationInstanceGroup.ts +++ b/src/systems/subspace/modules/integration/src/services/integrationInstanceGroup.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/integration/src/services/integrationInstanceGroupProvider.ts b/src/systems/subspace/modules/integration/src/services/integrationInstanceGroupProvider.ts index b9b978a87..be2da1f14 100644 --- a/src/systems/subspace/modules/integration/src/services/integrationInstanceGroupProvider.ts +++ b/src/systems/subspace/modules/integration/src/services/integrationInstanceGroupProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/integration/src/services/integrationInstanceProvider.ts b/src/systems/subspace/modules/integration/src/services/integrationInstanceProvider.ts index 832de1197..7349d17f1 100644 --- a/src/systems/subspace/modules/integration/src/services/integrationInstanceProvider.ts +++ b/src/systems/subspace/modules/integration/src/services/integrationInstanceProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/integration/src/services/integrationProvider.ts b/src/systems/subspace/modules/integration/src/services/integrationProvider.ts index 11233c31c..c7b09443e 100644 --- a/src/systems/subspace/modules/integration/src/services/integrationProvider.ts +++ b/src/systems/subspace/modules/integration/src/services/integrationProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/integration/src/services/integrationSetupSession.ts b/src/systems/subspace/modules/integration/src/services/integrationSetupSession.ts index 73b3eb54a..897d9103f 100644 --- a/src/systems/subspace/modules/integration/src/services/integrationSetupSession.ts +++ b/src/systems/subspace/modules/integration/src/services/integrationSetupSession.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { type Brand, db, diff --git a/src/systems/subspace/modules/integration/src/services/integrationVersion.ts b/src/systems/subspace/modules/integration/src/services/integrationVersion.ts index f0754b324..a664287df 100644 --- a/src/systems/subspace/modules/integration/src/services/integrationVersion.ts +++ b/src/systems/subspace/modules/integration/src/services/integrationVersion.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { type DateFilter, diff --git a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/endpoint.ts b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/endpoint.ts index 3bd556720..0ee77adbb 100644 --- a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/endpoint.ts +++ b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/endpoint.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/providerTemplate.ts b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/providerTemplate.ts index eceff878d..e0945af8e 100644 --- a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/providerTemplate.ts +++ b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/providerTemplate.ts @@ -1,7 +1,7 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { db, type Environment, diff --git a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/server.ts b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/server.ts index 58deaf41d..848a5e695 100644 --- a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/server.ts +++ b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/server.ts @@ -1,5 +1,5 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/serverProvider.ts b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/serverProvider.ts index 80c48388c..7614758ec 100644 --- a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/serverProvider.ts +++ b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/serverProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/shared.ts b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/shared.ts index f286dd869..31aafacbe 100644 --- a/src/systems/subspace/modules/integration/src/services/magicMcpBacking/shared.ts +++ b/src/systems/subspace/modules/integration/src/services/magicMcpBacking/shared.ts @@ -1,4 +1,4 @@ -import { createLock } from '@lowerdeck/lock'; +import { createLock } from '@mtsrc/lock'; import { type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { identityActorService, identityService } from '@metorial-subspace/module-identity'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/integration/test/defaultSessionTemplateLifecycle.test.ts b/src/systems/subspace/modules/integration/test/defaultSessionTemplateLifecycle.test.ts index 4b0fd4bca..f7226b188 100644 --- a/src/systems/subspace/modules/integration/test/defaultSessionTemplateLifecycle.test.ts +++ b/src/systems/subspace/modules/integration/test/defaultSessionTemplateLifecycle.test.ts @@ -45,7 +45,7 @@ let { }; }); -vi.mock('@lowerdeck/queue', () => ({ +vi.mock('@mtsrc/queue', () => ({ createQueue: createQueueMock })); diff --git a/src/systems/subspace/modules/integration/test/integrationInstanceProviderQueue.test.ts b/src/systems/subspace/modules/integration/test/integrationInstanceProviderQueue.test.ts index dafb8e719..f8c7c1ab5 100644 --- a/src/systems/subspace/modules/integration/test/integrationInstanceProviderQueue.test.ts +++ b/src/systems/subspace/modules/integration/test/integrationInstanceProviderQueue.test.ts @@ -45,7 +45,7 @@ let { }; }); -vi.mock('@lowerdeck/queue', () => ({ +vi.mock('@mtsrc/queue', () => ({ createQueue: createQueueMock })); diff --git a/src/systems/subspace/modules/integration/test/sharedSessionTemplate.test.ts b/src/systems/subspace/modules/integration/test/sharedSessionTemplate.test.ts index 70b5d362c..7df67027c 100644 --- a/src/systems/subspace/modules/integration/test/sharedSessionTemplate.test.ts +++ b/src/systems/subspace/modules/integration/test/sharedSessionTemplate.test.ts @@ -57,7 +57,7 @@ vi.mock('@metorial-subspace/db', () => ({ withTransaction: withTransactionMock })); -vi.mock('@lowerdeck/service', () => ({ +vi.mock('@mtsrc/service', () => ({ Service: { create: vi.fn((_: string, factory: () => unknown) => ({ build: () => factory() @@ -65,7 +65,7 @@ vi.mock('@lowerdeck/service', () => ({ } })); -vi.mock('@lowerdeck/pagination', () => ({ +vi.mock('@mtsrc/pagination', () => ({ Paginator: { create: vi.fn() } diff --git a/src/systems/subspace/modules/provider-internal/package.json b/src/systems/subspace/modules/provider-internal/package.json index e73764aa6..621c8ce63 100644 --- a/src/systems/subspace/modules/provider-internal/package.json +++ b/src/systems/subspace/modules/provider-internal/package.json @@ -9,22 +9,22 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/module-search": "^1.0.0", "@metorial-subspace/provider-utils": "^1.0.0", "safe-regex2": "^5.0.0", - "date-fns": "^4.1.0" + "date-fns": "^4.1.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/provider-internal/src/cron/cleanup.ts b/src/systems/subspace/modules/provider-internal/src/cron/cleanup.ts index 6c8e94439..9598cb939 100644 --- a/src/systems/subspace/modules/provider-internal/src/cron/cleanup.ts +++ b/src/systems/subspace/modules/provider-internal/src/cron/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { db } from '@metorial-subspace/db'; import { subDays } from 'date-fns'; import { env } from '../env'; diff --git a/src/systems/subspace/modules/provider-internal/src/env.ts b/src/systems/subspace/modules/provider-internal/src/env.ts index a9c453a24..04d02ebf2 100644 --- a/src/systems/subspace/modules/provider-internal/src/env.ts +++ b/src/systems/subspace/modules/provider-internal/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/provider-internal/src/lib/checkProviderMatch.ts b/src/systems/subspace/modules/provider-internal/src/lib/checkProviderMatch.ts index f91e61eff..c02a7028b 100644 --- a/src/systems/subspace/modules/provider-internal/src/lib/checkProviderMatch.ts +++ b/src/systems/subspace/modules/provider-internal/src/lib/checkProviderMatch.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import type { Provider } from '@metorial-subspace/db'; export let checkProviderMatch = ( diff --git a/src/systems/subspace/modules/provider-internal/src/lib/createTag.ts b/src/systems/subspace/modules/provider-internal/src/lib/createTag.ts index fb7e5c2cb..6370373db 100644 --- a/src/systems/subspace/modules/provider-internal/src/lib/createTag.ts +++ b/src/systems/subspace/modules/provider-internal/src/lib/createTag.ts @@ -1,4 +1,4 @@ -import { createShortIdGenerator } from '@lowerdeck/slugify'; +import { createShortIdGenerator } from '@mtsrc/slugify'; import { db, getId, withTransaction } from '@metorial-subspace/db'; let gen = createShortIdGenerator( diff --git a/src/systems/subspace/modules/provider-internal/src/queues.ts b/src/systems/subspace/modules/provider-internal/src/queues.ts index 466a80b05..e2e5d0d6a 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { cleanupCron } from './cron/cleanup'; import { deploymentConfigPairQueues } from './queues/deploymentConfigPair'; import { lifecycleQueues } from './queues/lifecycle'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/index.ts b/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/index.ts index b43da128a..778751191 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/index.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { providerDeploymentConfigPairSetSpecificationQueueProcessor } from './setSpec'; import { providerDeploymentConfigPairSyncSpecificationQueueProcessor } from './syncSpec'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/setSpec.ts b/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/setSpec.ts index 59c11d1e5..3050d78b0 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/setSpec.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/setSpec.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId, diff --git a/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/syncSpec.ts b/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/syncSpec.ts index 0cac0fe6b..d7fd55d7a 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/syncSpec.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/deploymentConfigPair/syncSpec.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { getBackend } from '@metorial-subspace/provider'; import type { ProviderSpecificationGetRes } from '@metorial-subspace/provider-utils'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/deploymentConfigPair.ts b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/deploymentConfigPair.ts index 87ca5c123..368374a3f 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/deploymentConfigPair.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/deploymentConfigPair.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { providerDeploymentConfigPairSyncSpecificationQueue } from '../deploymentConfigPair/syncSpec'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/index.ts b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/index.ts index 609aa1f28..83aea25ab 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/index.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { providerDeploymentConfigPairCreatedQueueProcessor, providerDeploymentConfigPairVersionCreatedQueueProcessor diff --git a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/listing.ts b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/listing.ts index f18d24a07..806618dce 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/listing.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/listing.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; import { processSingleRankQueue } from '../listing/rank'; import { indexProviderListingQueue } from '../search/providerListing'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/provider.ts b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/provider.ts index 99549ec5c..946548ee4 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/provider.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/provider.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; export let providerCreatedQueue = createQueue<{ providerId: string }>({ diff --git a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/providerVersion.ts b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/providerVersion.ts index 0546e21b6..e0178d968 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/providerVersion.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/providerVersion.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; import { providerVersionSyncSpecificationQueue } from '../version/syncSpec'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/publisher.ts b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/publisher.ts index dfebf2f1e..d95a6f709 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/publisher.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/publisher.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { env } from '../../env'; import { indexPublisherQueue } from '../search/publisher'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/specification.ts b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/specification.ts index 5774d5d93..8b95976ef 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/specification.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/lifecycle/specification.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/listing/index.ts b/src/systems/subspace/modules/provider-internal/src/queues/listing/index.ts index 7c7febb87..b13fdb984 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/listing/index.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/listing/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { rankProcessors } from './rank'; import { indexProviderListingQueueProcessor } from './search'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/listing/rank.ts b/src/systems/subspace/modules/provider-internal/src/queues/listing/rank.ts index 5b793adcb..08f058559 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/listing/rank.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/listing/rank.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { combineQueueProcessors, createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { combineQueueProcessors, createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/listing/search.ts b/src/systems/subspace/modules/provider-internal/src/queues/listing/search.ts index 2121f7415..6db25cfcf 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/listing/search.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/listing/search.ts @@ -1,5 +1,5 @@ // import { searchService } from '@metorial-subspace/module-search'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/reconciler/deprecateProvider.ts b/src/systems/subspace/modules/provider-internal/src/queues/reconciler/deprecateProvider.ts index e1c3a0fd8..f92c2fcd3 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/reconciler/deprecateProvider.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/reconciler/deprecateProvider.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { providerInternalService } from '../../services/provider'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/reconciler/index.ts b/src/systems/subspace/modules/provider-internal/src/queues/reconciler/index.ts index cb4f86564..a40ce4e74 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/reconciler/index.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/reconciler/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { deprecateDockerProviderManyQueueProcessor, deprecateDockerProviderReconcilerCron, diff --git a/src/systems/subspace/modules/provider-internal/src/queues/search/index.ts b/src/systems/subspace/modules/provider-internal/src/queues/search/index.ts index be45372ef..b6ae2da40 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/search/index.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/search/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { indexProviderListingQueueProcessor } from './providerListing'; import { indexPublisherQueueProcessor } from './publisher'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/search/providerListing.ts b/src/systems/subspace/modules/provider-internal/src/queues/search/providerListing.ts index 0362ac9cc..a783245b5 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/search/providerListing.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/search/providerListing.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/search/publisher.ts b/src/systems/subspace/modules/provider-internal/src/queues/search/publisher.ts index aa1117c04..3801c1d59 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/search/publisher.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/search/publisher.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/version/cron.ts b/src/systems/subspace/modules/provider-internal/src/queues/version/cron.ts index 2b34b5f1c..d221366ac 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/version/cron.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/version/cron.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { providerVersionSyncSpecificationQueue } from './syncSpec'; diff --git a/src/systems/subspace/modules/provider-internal/src/queues/version/index.ts b/src/systems/subspace/modules/provider-internal/src/queues/version/index.ts index efa48cd25..899ae9a74 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/version/index.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/version/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { syncVersionCron, syncVersionManyCronProcessor, diff --git a/src/systems/subspace/modules/provider-internal/src/queues/version/setSpec.ts b/src/systems/subspace/modules/provider-internal/src/queues/version/setSpec.ts index 8b94c116c..27a2b7c20 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/version/setSpec.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/version/setSpec.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId, diff --git a/src/systems/subspace/modules/provider-internal/src/queues/version/syncSpec.ts b/src/systems/subspace/modules/provider-internal/src/queues/version/syncSpec.ts index fb205a726..2f6d9a406 100644 --- a/src/systems/subspace/modules/provider-internal/src/queues/version/syncSpec.ts +++ b/src/systems/subspace/modules/provider-internal/src/queues/version/syncSpec.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { getBackend } from '@metorial-subspace/provider'; import type { ProviderSpecificationGetRes } from '@metorial-subspace/provider-utils'; diff --git a/src/systems/subspace/modules/provider-internal/src/services/provider.ts b/src/systems/subspace/modules/provider-internal/src/services/provider.ts index 196f6ae79..94836ca10 100644 --- a/src/systems/subspace/modules/provider-internal/src/services/provider.ts +++ b/src/systems/subspace/modules/provider-internal/src/services/provider.ts @@ -1,5 +1,5 @@ -import { generateCode } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; +import { generateCode } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, type Backend, diff --git a/src/systems/subspace/modules/provider-internal/src/services/providerCombination.ts b/src/systems/subspace/modules/provider-internal/src/services/providerCombination.ts index b37be136a..e08a4dea6 100644 --- a/src/systems/subspace/modules/provider-internal/src/services/providerCombination.ts +++ b/src/systems/subspace/modules/provider-internal/src/services/providerCombination.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { type Environment, type Provider, diff --git a/src/systems/subspace/modules/provider-internal/src/services/providerDeployment.ts b/src/systems/subspace/modules/provider-internal/src/services/providerDeployment.ts index 5198a3d89..d2b3f3804 100644 --- a/src/systems/subspace/modules/provider-internal/src/services/providerDeployment.ts +++ b/src/systems/subspace/modules/provider-internal/src/services/providerDeployment.ts @@ -1,6 +1,6 @@ -import { delay } from '@lowerdeck/delay'; -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { delay } from '@mtsrc/delay'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { withTransaction, type Environment, diff --git a/src/systems/subspace/modules/provider-internal/src/services/providerDeploymentConfigPair.ts b/src/systems/subspace/modules/provider-internal/src/services/providerDeploymentConfigPair.ts index 9039e237f..defe0bbc8 100644 --- a/src/systems/subspace/modules/provider-internal/src/services/providerDeploymentConfigPair.ts +++ b/src/systems/subspace/modules/provider-internal/src/services/providerDeploymentConfigPair.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { Service } from '@lowerdeck/service'; +import { delay } from '@mtsrc/delay'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/provider-internal/src/services/providerSpecification.ts b/src/systems/subspace/modules/provider-internal/src/services/providerSpecification.ts index a8b85a817..78fa66938 100644 --- a/src/systems/subspace/modules/provider-internal/src/services/providerSpecification.ts +++ b/src/systems/subspace/modules/provider-internal/src/services/providerSpecification.ts @@ -1,7 +1,7 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; -import { createLock } from '@lowerdeck/lock'; -import { Service } from '@lowerdeck/service'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; +import { createLock } from '@mtsrc/lock'; +import { Service } from '@mtsrc/service'; import { db, getId, diff --git a/src/systems/subspace/modules/provider-internal/src/services/providerVersion.ts b/src/systems/subspace/modules/provider-internal/src/services/providerVersion.ts index 84f42af79..d3c050aaf 100644 --- a/src/systems/subspace/modules/provider-internal/src/services/providerVersion.ts +++ b/src/systems/subspace/modules/provider-internal/src/services/providerVersion.ts @@ -1,5 +1,5 @@ -import { createLock } from '@lowerdeck/lock'; -import { Service } from '@lowerdeck/service'; +import { createLock } from '@mtsrc/lock'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, type Backend, diff --git a/src/systems/subspace/modules/provider-internal/src/services/publisher.ts b/src/systems/subspace/modules/provider-internal/src/services/publisher.ts index 3af545592..504460dab 100644 --- a/src/systems/subspace/modules/provider-internal/src/services/publisher.ts +++ b/src/systems/subspace/modules/provider-internal/src/services/publisher.ts @@ -1,5 +1,5 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Service } from '@lowerdeck/service'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/search/package.json b/src/systems/subspace/modules/search/package.json index da8bdd0ce..bf5451779 100644 --- a/src/systems/subspace/modules/search/package.json +++ b/src/systems/subspace/modules/search/package.json @@ -13,10 +13,10 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", - "@metorial-platform-systems/voyager-client": "workspace:*" + "@metorial-platform-systems/voyager-client": "workspace:*", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/validation": "1.0.0" } } diff --git a/src/systems/subspace/modules/search/src/env.ts b/src/systems/subspace/modules/search/src/env.ts index 02a12eb07..eb63ac287 100644 --- a/src/systems/subspace/modules/search/src/env.ts +++ b/src/systems/subspace/modules/search/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/search/src/index.ts b/src/systems/subspace/modules/search/src/index.ts index 9992059b5..0042ef6e5 100644 --- a/src/systems/subspace/modules/search/src/index.ts +++ b/src/systems/subspace/modules/search/src/index.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { delay } from '@mtsrc/delay'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { createVoyagerClient } from '@metorial-platform-systems/voyager-client'; import { env } from './env'; diff --git a/src/systems/subspace/modules/session/package.json b/src/systems/subspace/modules/session/package.json index fe9799be3..3b851acf1 100644 --- a/src/systems/subspace/modules/session/package.json +++ b/src/systems/subspace/modules/session/package.json @@ -9,13 +9,6 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", "@metorial-subspace/list-utils": "^1.0.0", @@ -24,7 +17,14 @@ "@metorial-subspace/module-deployment": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/module-tenant": "^1.0.0", - "p-queue": "^8.0.1" + "p-queue": "^8.0.1", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/session/src/env.ts b/src/systems/subspace/modules/session/src/env.ts index a9c453a24..04d02ebf2 100644 --- a/src/systems/subspace/modules/session/src/env.ts +++ b/src/systems/subspace/modules/session/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/session/src/lib/sessionTemplateSync.ts b/src/systems/subspace/modules/session/src/lib/sessionTemplateSync.ts index 569c81b19..1d80d1ef2 100644 --- a/src/systems/subspace/modules/session/src/lib/sessionTemplateSync.ts +++ b/src/systems/subspace/modules/session/src/lib/sessionTemplateSync.ts @@ -1,4 +1,4 @@ -import { createLock } from '@lowerdeck/lock'; +import { createLock } from '@mtsrc/lock'; import { env } from '../env'; let sessionTemplateSyncLock = createLock({ diff --git a/src/systems/subspace/modules/session/src/queues.ts b/src/systems/subspace/modules/session/src/queues.ts index c2fc24cd1..8afc6f54a 100644 --- a/src/systems/subspace/modules/session/src/queues.ts +++ b/src/systems/subspace/modules/session/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { deleteQueues } from './queues/delete'; import { lifecycleQueues } from './queues/lifecycle'; diff --git a/src/systems/subspace/modules/session/src/queues/delete/index.ts b/src/systems/subspace/modules/session/src/queues/delete/index.ts index 3af87b670..92cc1d798 100644 --- a/src/systems/subspace/modules/session/src/queues/delete/index.ts +++ b/src/systems/subspace/modules/session/src/queues/delete/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { sessionDeleteManyQueueProcessor, sessionDeleteQueueProcessor, diff --git a/src/systems/subspace/modules/session/src/queues/delete/session.ts b/src/systems/subspace/modules/session/src/queues/delete/session.ts index 3fb64aeba..ce75ac8e9 100644 --- a/src/systems/subspace/modules/session/src/queues/delete/session.ts +++ b/src/systems/subspace/modules/session/src/queues/delete/session.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { getRetentionCutoffDate } from '@metorial-subspace/list-utils'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/session/src/queues/delete/sessionTemplate.ts b/src/systems/subspace/modules/session/src/queues/delete/sessionTemplate.ts index 0d2d78f45..9306c618d 100644 --- a/src/systems/subspace/modules/session/src/queues/delete/sessionTemplate.ts +++ b/src/systems/subspace/modules/session/src/queues/delete/sessionTemplate.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { sessionTemplateDeletedQueue } from '../lifecycle/sessionTemplate'; diff --git a/src/systems/subspace/modules/session/src/queues/lifecycle/index.ts b/src/systems/subspace/modules/session/src/queues/lifecycle/index.ts index 25594a7e7..af9cca8a2 100644 --- a/src/systems/subspace/modules/session/src/queues/lifecycle/index.ts +++ b/src/systems/subspace/modules/session/src/queues/lifecycle/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { archiveIntegrationInstanceGroupSessionTemplateQueueProcessor, archiveIntegrationInstanceGroupSessionTemplatesQueueProcessor, diff --git a/src/systems/subspace/modules/session/src/queues/lifecycle/linkedIntegrationInstanceGroupTemplate.ts b/src/systems/subspace/modules/session/src/queues/lifecycle/linkedIntegrationInstanceGroupTemplate.ts index 4ecef9f1c..d919752f5 100644 --- a/src/systems/subspace/modules/session/src/queues/lifecycle/linkedIntegrationInstanceGroupTemplate.ts +++ b/src/systems/subspace/modules/session/src/queues/lifecycle/linkedIntegrationInstanceGroupTemplate.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, getId, withTransaction } from '@metorial-subspace/db'; import { buildIntegrationProviderToolFilterChain } from '@metorial-subspace/module-provider-internal'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/session/src/queues/lifecycle/linkedSessionTemplate.ts b/src/systems/subspace/modules/session/src/queues/lifecycle/linkedSessionTemplate.ts index d780abbc3..fce94e5ad 100644 --- a/src/systems/subspace/modules/session/src/queues/lifecycle/linkedSessionTemplate.ts +++ b/src/systems/subspace/modules/session/src/queues/lifecycle/linkedSessionTemplate.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, getId, withTransaction } from '@metorial-subspace/db'; import { buildIntegrationProviderToolFilterChain } from '@metorial-subspace/module-provider-internal'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/session/src/queues/lifecycle/session.ts b/src/systems/subspace/modules/session/src/queues/lifecycle/session.ts index e3faaa796..c669cbff3 100644 --- a/src/systems/subspace/modules/session/src/queues/lifecycle/session.ts +++ b/src/systems/subspace/modules/session/src/queues/lifecycle/session.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/session/src/queues/lifecycle/sessionProvider.ts b/src/systems/subspace/modules/session/src/queues/lifecycle/sessionProvider.ts index 39451d4b8..8955754c3 100644 --- a/src/systems/subspace/modules/session/src/queues/lifecycle/sessionProvider.ts +++ b/src/systems/subspace/modules/session/src/queues/lifecycle/sessionProvider.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/session/src/queues/lifecycle/sessionTemplate.ts b/src/systems/subspace/modules/session/src/queues/lifecycle/sessionTemplate.ts index fe0be51eb..343f05300 100644 --- a/src/systems/subspace/modules/session/src/queues/lifecycle/sessionTemplate.ts +++ b/src/systems/subspace/modules/session/src/queues/lifecycle/sessionTemplate.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { sessionArchivedQueue } from './session'; diff --git a/src/systems/subspace/modules/session/src/queues/lifecycle/sessionTemplateProvider.ts b/src/systems/subspace/modules/session/src/queues/lifecycle/sessionTemplateProvider.ts index b6eda392b..432512881 100644 --- a/src/systems/subspace/modules/session/src/queues/lifecycle/sessionTemplateProvider.ts +++ b/src/systems/subspace/modules/session/src/queues/lifecycle/sessionTemplateProvider.ts @@ -1,6 +1,6 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; -import { createQueue } from '@lowerdeck/queue'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; +import { createQueue } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { env } from '../../env'; import { queueJobId, withSessionTemplateSyncLock } from '../../lib/sessionTemplateSync'; diff --git a/src/systems/subspace/modules/session/src/services/ephemeralManagedSession.ts b/src/systems/subspace/modules/session/src/services/ephemeralManagedSession.ts index 33545239a..c07caf655 100644 --- a/src/systems/subspace/modules/session/src/services/ephemeralManagedSession.ts +++ b/src/systems/subspace/modules/session/src/services/ephemeralManagedSession.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/session/src/services/providerInvocation.ts b/src/systems/subspace/modules/session/src/services/providerInvocation.ts index 6419a91fa..f4268f1ae 100644 --- a/src/systems/subspace/modules/session/src/services/providerInvocation.ts +++ b/src/systems/subspace/modules/session/src/services/providerInvocation.ts @@ -1,4 +1,4 @@ -import { Service } from '@lowerdeck/service'; +import { Service } from '@mtsrc/service'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; import { getBackend } from '@metorial-subspace/provider'; import { diff --git a/src/systems/subspace/modules/session/src/services/providerRun.ts b/src/systems/subspace/modules/session/src/services/providerRun.ts index bfdb76fe0..406803ea8 100644 --- a/src/systems/subspace/modules/session/src/services/providerRun.ts +++ b/src/systems/subspace/modules/session/src/services/providerRun.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/providerRunLogs.ts b/src/systems/subspace/modules/session/src/services/providerRunLogs.ts index 428946b77..6e9e56b6a 100644 --- a/src/systems/subspace/modules/session/src/services/providerRunLogs.ts +++ b/src/systems/subspace/modules/session/src/services/providerRunLogs.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/providerRunUsageRecord.ts b/src/systems/subspace/modules/session/src/services/providerRunUsageRecord.ts index 73b26c689..2e57f0142 100644 --- a/src/systems/subspace/modules/session/src/services/providerRunUsageRecord.ts +++ b/src/systems/subspace/modules/session/src/services/providerRunUsageRecord.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Solution, type Tenant } from '@metorial-subspace/db'; import { mergeRetentionWithDateFilter } from '@metorial-subspace/list-utils'; diff --git a/src/systems/subspace/modules/session/src/services/session.ts b/src/systems/subspace/modules/session/src/services/session.ts index 418937724..61bc4a503 100644 --- a/src/systems/subspace/modules/session/src/services/session.ts +++ b/src/systems/subspace/modules/session/src/services/session.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/session/src/services/sessionConnection.ts b/src/systems/subspace/modules/session/src/services/sessionConnection.ts index 5edcb789c..3d4e10569 100644 --- a/src/systems/subspace/modules/session/src/services/sessionConnection.ts +++ b/src/systems/subspace/modules/session/src/services/sessionConnection.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/sessionError.ts b/src/systems/subspace/modules/session/src/services/sessionError.ts index 6df9b6fd6..854589209 100644 --- a/src/systems/subspace/modules/session/src/services/sessionError.ts +++ b/src/systems/subspace/modules/session/src/services/sessionError.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/sessionErrorGroup.ts b/src/systems/subspace/modules/session/src/services/sessionErrorGroup.ts index 3605ab38b..dba497af8 100644 --- a/src/systems/subspace/modules/session/src/services/sessionErrorGroup.ts +++ b/src/systems/subspace/modules/session/src/services/sessionErrorGroup.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/sessionEvent.ts b/src/systems/subspace/modules/session/src/services/sessionEvent.ts index 5f5748446..0b30cb980 100644 --- a/src/systems/subspace/modules/session/src/services/sessionEvent.ts +++ b/src/systems/subspace/modules/session/src/services/sessionEvent.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/sessionMessage.ts b/src/systems/subspace/modules/session/src/services/sessionMessage.ts index 400bb2837..8c413f055 100644 --- a/src/systems/subspace/modules/session/src/services/sessionMessage.ts +++ b/src/systems/subspace/modules/session/src/services/sessionMessage.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/sessionParticipant.ts b/src/systems/subspace/modules/session/src/services/sessionParticipant.ts index 5fa7955ee..a212e3db0 100644 --- a/src/systems/subspace/modules/session/src/services/sessionParticipant.ts +++ b/src/systems/subspace/modules/session/src/services/sessionParticipant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/sessionProvider.ts b/src/systems/subspace/modules/session/src/services/sessionProvider.ts index 7467a56a4..6c300feed 100644 --- a/src/systems/subspace/modules/session/src/services/sessionProvider.ts +++ b/src/systems/subspace/modules/session/src/services/sessionProvider.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/sessionProviderInput.ts b/src/systems/subspace/modules/session/src/services/sessionProviderInput.ts index d80857599..9fe2b3d28 100644 --- a/src/systems/subspace/modules/session/src/services/sessionProviderInput.ts +++ b/src/systems/subspace/modules/session/src/services/sessionProviderInput.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, type Environment, diff --git a/src/systems/subspace/modules/session/src/services/sessionProviderNameTemplate.ts b/src/systems/subspace/modules/session/src/services/sessionProviderNameTemplate.ts index d63ef2836..1fe31ac4c 100644 --- a/src/systems/subspace/modules/session/src/services/sessionProviderNameTemplate.ts +++ b/src/systems/subspace/modules/session/src/services/sessionProviderNameTemplate.ts @@ -1,5 +1,5 @@ -import { generatePlainId } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; +import { generatePlainId } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; import { db, type Provider, type SessionProvider } from '@metorial-subspace/db'; import { buildBaseSessionProviderNameTemplate, diff --git a/src/systems/subspace/modules/session/src/services/sessionTemplate.ts b/src/systems/subspace/modules/session/src/services/sessionTemplate.ts index 48273ce1f..236d27c23 100644 --- a/src/systems/subspace/modules/session/src/services/sessionTemplate.ts +++ b/src/systems/subspace/modules/session/src/services/sessionTemplate.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/session/src/services/sessionTemplateProvider.ts b/src/systems/subspace/modules/session/src/services/sessionTemplateProvider.ts index 22d7725ef..7cb4657a5 100644 --- a/src/systems/subspace/modules/session/src/services/sessionTemplateProvider.ts +++ b/src/systems/subspace/modules/session/src/services/sessionTemplateProvider.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/session/src/services/sessionUsageRecord.ts b/src/systems/subspace/modules/session/src/services/sessionUsageRecord.ts index 5390b5cb4..74cfa802b 100644 --- a/src/systems/subspace/modules/session/src/services/sessionUsageRecord.ts +++ b/src/systems/subspace/modules/session/src/services/sessionUsageRecord.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Solution, type Tenant } from '@metorial-subspace/db'; import { mergeRetentionWithDateFilter } from '@metorial-subspace/list-utils'; diff --git a/src/systems/subspace/modules/session/src/services/toolCall.ts b/src/systems/subspace/modules/session/src/services/toolCall.ts index 10d2259f4..64b4ade15 100644 --- a/src/systems/subspace/modules/session/src/services/toolCall.ts +++ b/src/systems/subspace/modules/session/src/services/toolCall.ts @@ -1,7 +1,7 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { createLock } from '@lowerdeck/lock'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { createLock } from '@mtsrc/lock'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { db, type Environment, diff --git a/src/systems/subspace/modules/skills/package.json b/src/systems/subspace/modules/skills/package.json index d22eff1df..2a88762aa 100644 --- a/src/systems/subspace/modules/skills/package.json +++ b/src/systems/subspace/modules/skills/package.json @@ -9,13 +9,6 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/list-utils": "^1.0.0", "@metorial-subspace/module-catalog": "^1.0.0", @@ -23,7 +16,14 @@ "@metorial-subspace/module-search": "^1.0.0", "@metorial-subspace/module-tenant": "^1.0.0", "@metorial-platform-systems/cargo-client": "^1.0.0", - "@lowerdeck/validation": "^1.0.10" + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/skills/src/env.ts b/src/systems/subspace/modules/skills/src/env.ts index 63c97a11e..541d942f1 100644 --- a/src/systems/subspace/modules/skills/src/env.ts +++ b/src/systems/subspace/modules/skills/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/skills/src/lib/clientMetadata.ts b/src/systems/subspace/modules/skills/src/lib/clientMetadata.ts index 18dbff37c..93613f417 100644 --- a/src/systems/subspace/modules/skills/src/lib/clientMetadata.ts +++ b/src/systems/subspace/modules/skills/src/lib/clientMetadata.ts @@ -1,4 +1,4 @@ -import { slugify } from '@lowerdeck/slugify'; +import { slugify } from '@mtsrc/slugify'; import type { Skill } from '@metorial-subspace/db'; export type SkillClientMetadataInput = { diff --git a/src/systems/subspace/modules/skills/src/queues.ts b/src/systems/subspace/modules/skills/src/queues.ts index 34f407214..ef7691765 100644 --- a/src/systems/subspace/modules/skills/src/queues.ts +++ b/src/systems/subspace/modules/skills/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { lifecycleQueues } from './queues/lifecycle'; import { reconcilerQueues } from './queues/reconciler'; import { searchQueues } from './queues/search'; diff --git a/src/systems/subspace/modules/skills/src/queues/lifecycle/index.ts b/src/systems/subspace/modules/skills/src/queues/lifecycle/index.ts index 6f92b255e..22245ddd6 100644 --- a/src/systems/subspace/modules/skills/src/queues/lifecycle/index.ts +++ b/src/systems/subspace/modules/skills/src/queues/lifecycle/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { skillArchivedQueueProcessor, skillCreatedQueueProcessor, diff --git a/src/systems/subspace/modules/skills/src/queues/lifecycle/skill.ts b/src/systems/subspace/modules/skills/src/queues/lifecycle/skill.ts index 7f1ddedd9..3671ad965 100644 --- a/src/systems/subspace/modules/skills/src/queues/lifecycle/skill.ts +++ b/src/systems/subspace/modules/skills/src/queues/lifecycle/skill.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { cargo, ensureCargoScope } from '../../cargo'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/skills/src/queues/lifecycle/skillGroup.ts b/src/systems/subspace/modules/skills/src/queues/lifecycle/skillGroup.ts index 73d948f1d..4b46f78fe 100644 --- a/src/systems/subspace/modules/skills/src/queues/lifecycle/skillGroup.ts +++ b/src/systems/subspace/modules/skills/src/queues/lifecycle/skillGroup.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { indexSkillGroupQueue } from '../search/skillGroup'; diff --git a/src/systems/subspace/modules/skills/src/queues/lifecycle/skillItem.ts b/src/systems/subspace/modules/skills/src/queues/lifecycle/skillItem.ts index 1113434cc..ee6c321f2 100644 --- a/src/systems/subspace/modules/skills/src/queues/lifecycle/skillItem.ts +++ b/src/systems/subspace/modules/skills/src/queues/lifecycle/skillItem.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { reconcileSkillProviderLinksQueue } from '../reconciler/reconcileSkillProviderLink'; diff --git a/src/systems/subspace/modules/skills/src/queues/lifecycle/skillTemplate.ts b/src/systems/subspace/modules/skills/src/queues/lifecycle/skillTemplate.ts index 22fda244c..ba203551b 100644 --- a/src/systems/subspace/modules/skills/src/queues/lifecycle/skillTemplate.ts +++ b/src/systems/subspace/modules/skills/src/queues/lifecycle/skillTemplate.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { indexSkillTemplateQueue } from '../search/skillTemplate'; diff --git a/src/systems/subspace/modules/skills/src/queues/reconciler/index.ts b/src/systems/subspace/modules/skills/src/queues/reconciler/index.ts index 782048420..db20ac564 100644 --- a/src/systems/subspace/modules/skills/src/queues/reconciler/index.ts +++ b/src/systems/subspace/modules/skills/src/queues/reconciler/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { reconcileSkillProviderLinksForIntegrationProviderQueueProcessor, reconcileSkillProviderLinksQueueProcessor diff --git a/src/systems/subspace/modules/skills/src/queues/reconciler/reconcileSkillProviderLink.ts b/src/systems/subspace/modules/skills/src/queues/reconciler/reconcileSkillProviderLink.ts index 85685cf0e..8b3b13a30 100644 --- a/src/systems/subspace/modules/skills/src/queues/reconciler/reconcileSkillProviderLink.ts +++ b/src/systems/subspace/modules/skills/src/queues/reconciler/reconcileSkillProviderLink.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId, withTransaction } from '@metorial-subspace/db'; import { env } from '../../env'; import { indexSkillQueue } from '../search/skill'; diff --git a/src/systems/subspace/modules/skills/src/queues/search/index.ts b/src/systems/subspace/modules/skills/src/queues/search/index.ts index d0e52870a..29f5bb911 100644 --- a/src/systems/subspace/modules/skills/src/queues/search/index.ts +++ b/src/systems/subspace/modules/skills/src/queues/search/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { indexSkillGroupQueueProcessor } from './skillGroup'; import { indexSkillQueueProcessor } from './skill'; import { indexSkillTemplateQueueProcessor } from './skillTemplate'; diff --git a/src/systems/subspace/modules/skills/src/queues/search/skill.ts b/src/systems/subspace/modules/skills/src/queues/search/skill.ts index 50ca3b5c7..4451c78c9 100644 --- a/src/systems/subspace/modules/skills/src/queues/search/skill.ts +++ b/src/systems/subspace/modules/skills/src/queues/search/skill.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/skills/src/queues/search/skillGroup.ts b/src/systems/subspace/modules/skills/src/queues/search/skillGroup.ts index 9f950e517..cd929e972 100644 --- a/src/systems/subspace/modules/skills/src/queues/search/skillGroup.ts +++ b/src/systems/subspace/modules/skills/src/queues/search/skillGroup.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/skills/src/queues/search/skillTemplate.ts b/src/systems/subspace/modules/skills/src/queues/search/skillTemplate.ts index d494daba7..a682e88c5 100644 --- a/src/systems/subspace/modules/skills/src/queues/search/skillTemplate.ts +++ b/src/systems/subspace/modules/skills/src/queues/search/skillTemplate.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { voyager, voyagerIndex, voyagerSource } from '@metorial-subspace/module-search'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/skills/src/services/skill.ts b/src/systems/subspace/modules/skills/src/services/skill.ts index ab470a2a3..8b2cb58f7 100644 --- a/src/systems/subspace/modules/skills/src/services/skill.ts +++ b/src/systems/subspace/modules/skills/src/services/skill.ts @@ -1,8 +1,8 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/skills/src/services/skillGroup.ts b/src/systems/subspace/modules/skills/src/services/skillGroup.ts index 7717e48f1..6c56fd605 100644 --- a/src/systems/subspace/modules/skills/src/services/skillGroup.ts +++ b/src/systems/subspace/modules/skills/src/services/skillGroup.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/skills/src/services/skillGroupItem.ts b/src/systems/subspace/modules/skills/src/services/skillGroupItem.ts index 12511e858..1885b0897 100644 --- a/src/systems/subspace/modules/skills/src/services/skillGroupItem.ts +++ b/src/systems/subspace/modules/skills/src/services/skillGroupItem.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/skills/src/services/skillItem.ts b/src/systems/subspace/modules/skills/src/services/skillItem.ts index 4578c8124..18b975539 100644 --- a/src/systems/subspace/modules/skills/src/services/skillItem.ts +++ b/src/systems/subspace/modules/skills/src/services/skillItem.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/skills/src/services/skillTemplate.ts b/src/systems/subspace/modules/skills/src/services/skillTemplate.ts index f7f8a9923..df61d319f 100644 --- a/src/systems/subspace/modules/skills/src/services/skillTemplate.ts +++ b/src/systems/subspace/modules/skills/src/services/skillTemplate.ts @@ -1,8 +1,8 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; -import { slugify } from '@lowerdeck/slugify'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; +import { slugify } from '@mtsrc/slugify'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/skills/src/services/skillTemplateItem.ts b/src/systems/subspace/modules/skills/src/services/skillTemplateItem.ts index b238205e9..ff81e078d 100644 --- a/src/systems/subspace/modules/skills/src/services/skillTemplateItem.ts +++ b/src/systems/subspace/modules/skills/src/services/skillTemplateItem.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { addAfterTransactionHook, db, diff --git a/src/systems/subspace/modules/tenant/package.json b/src/systems/subspace/modules/tenant/package.json index 2309181f9..a0d2c9900 100644 --- a/src/systems/subspace/modules/tenant/package.json +++ b/src/systems/subspace/modules/tenant/package.json @@ -9,17 +9,17 @@ "lint": "prettier src/**/*.ts --check" }, "dependencies": { - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/connection-utils": "^1.0.0", "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/list-utils": "^1.0.0" + "@metorial-subspace/list-utils": "^1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/validation": "1.0.0" }, "devDependencies": { "@metorial-subspace/tsconfig": "^1.0.0", diff --git a/src/systems/subspace/modules/tenant/src/env.ts b/src/systems/subspace/modules/tenant/src/env.ts index 5b5bb0dd1..a9e77a7ac 100644 --- a/src/systems/subspace/modules/tenant/src/env.ts +++ b/src/systems/subspace/modules/tenant/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/modules/tenant/src/queues.ts b/src/systems/subspace/modules/tenant/src/queues.ts index 7fde82d0f..91d5cb7b2 100644 --- a/src/systems/subspace/modules/tenant/src/queues.ts +++ b/src/systems/subspace/modules/tenant/src/queues.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { retentionQueues } from './queues/retention'; export let tenantQueueProcessors = combineQueueProcessors([retentionQueues]); diff --git a/src/systems/subspace/modules/tenant/src/queues/retention/cleanup.ts b/src/systems/subspace/modules/tenant/src/queues/retention/cleanup.ts index 4efb6a7f1..51c2e934f 100644 --- a/src/systems/subspace/modules/tenant/src/queues/retention/cleanup.ts +++ b/src/systems/subspace/modules/tenant/src/queues/retention/cleanup.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { sessionMessageBucketRecord, storage } from '@metorial-subspace/connection-utils'; import { db, withTransaction } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/modules/tenant/src/queues/retention/index.ts b/src/systems/subspace/modules/tenant/src/queues/retention/index.ts index a652b6bc3..bb219fe4b 100644 --- a/src/systems/subspace/modules/tenant/src/queues/retention/index.ts +++ b/src/systems/subspace/modules/tenant/src/queues/retention/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { tenantLogRetentionCleanupCron, tenantLogRetentionCleanupQueueProcessor, diff --git a/src/systems/subspace/modules/tenant/src/queues/retention/sync.ts b/src/systems/subspace/modules/tenant/src/queues/retention/sync.ts index 3e777375e..a89f3611b 100644 --- a/src/systems/subspace/modules/tenant/src/queues/retention/sync.ts +++ b/src/systems/subspace/modules/tenant/src/queues/retention/sync.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; import { RETENTION_BATCH_SIZE, retentionSyncWorkerOpts } from './_config'; diff --git a/src/systems/subspace/modules/tenant/src/services/actor.ts b/src/systems/subspace/modules/tenant/src/services/actor.ts index 457a4b516..5ae709227 100644 --- a/src/systems/subspace/modules/tenant/src/services/actor.ts +++ b/src/systems/subspace/modules/tenant/src/services/actor.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, getId, type Tenant, type TenantActorType } from '@metorial-subspace/db'; let include = {}; diff --git a/src/systems/subspace/modules/tenant/src/services/brand.ts b/src/systems/subspace/modules/tenant/src/services/brand.ts index eb24a46ab..c79ee720f 100644 --- a/src/systems/subspace/modules/tenant/src/services/brand.ts +++ b/src/systems/subspace/modules/tenant/src/services/brand.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, getId, Prisma, type EntityImage, type Tenant } from '@metorial-subspace/db'; let include = {}; diff --git a/src/systems/subspace/modules/tenant/src/services/environment.ts b/src/systems/subspace/modules/tenant/src/services/environment.ts index e141662a2..6b87df329 100644 --- a/src/systems/subspace/modules/tenant/src/services/environment.ts +++ b/src/systems/subspace/modules/tenant/src/services/environment.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, type EnvironmentType, getId, type Tenant } from '@metorial-subspace/db'; let include = {}; diff --git a/src/systems/subspace/modules/tenant/src/services/solution.ts b/src/systems/subspace/modules/tenant/src/services/solution.ts index c242b27d5..80fdb4e95 100644 --- a/src/systems/subspace/modules/tenant/src/services/solution.ts +++ b/src/systems/subspace/modules/tenant/src/services/solution.ts @@ -1,6 +1,6 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db, get4ByteIntId, ID } from '@metorial-subspace/db'; let include = {}; diff --git a/src/systems/subspace/modules/tenant/src/services/tenant.ts b/src/systems/subspace/modules/tenant/src/services/tenant.ts index e1ea2dc87..c50f27545 100644 --- a/src/systems/subspace/modules/tenant/src/services/tenant.ts +++ b/src/systems/subspace/modules/tenant/src/services/tenant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { generatePlainId } from '@lowerdeck/id'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { generatePlainId } from '@mtsrc/id'; +import { Service } from '@mtsrc/service'; import { db, type EnvironmentType, getId } from '@metorial-subspace/db'; import { reconcileTenantManagedBackingsQueue } from '@metorial-subspace/module-auth/src/queues/reconcile'; import { tenantLogRetentionSyncQueue } from '../queues/retention/sync'; diff --git a/src/systems/subspace/packages/conduit/package.json b/src/systems/subspace/packages/conduit/package.json index eb735cccc..f400af55a 100644 --- a/src/systems/subspace/packages/conduit/package.json +++ b/src/systems/subspace/packages/conduit/package.json @@ -20,8 +20,8 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/serialize": "^1.0.4", "ioredis": "^5.4.2", - "nats": "^2.28.2" + "nats": "^2.28.2", + "@mtsrc/serialize": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/packages/conduit/src/adapters/coordination/redisCoordination.ts b/src/systems/subspace/packages/conduit/src/adapters/coordination/redisCoordination.ts index 4a852dd3e..dc9f60ed3 100644 --- a/src/systems/subspace/packages/conduit/src/adapters/coordination/redisCoordination.ts +++ b/src/systems/subspace/packages/conduit/src/adapters/coordination/redisCoordination.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import Redis from 'ioredis'; import type { RedisConfig } from '../../types/config'; import type { ICoordinationAdapter } from './coordinationAdapter'; diff --git a/src/systems/subspace/packages/conduit/src/adapters/transport/memoryTransport.ts b/src/systems/subspace/packages/conduit/src/adapters/transport/memoryTransport.ts index aa80c1387..d01848b6f 100644 --- a/src/systems/subspace/packages/conduit/src/adapters/transport/memoryTransport.ts +++ b/src/systems/subspace/packages/conduit/src/adapters/transport/memoryTransport.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import type { ITransportAdapter, MessageHandler } from './transportAdapter'; let Sentry = getSentry(); diff --git a/src/systems/subspace/packages/conduit/src/adapters/transport/natsTransport.ts b/src/systems/subspace/packages/conduit/src/adapters/transport/natsTransport.ts index b310cee94..52cef0ceb 100644 --- a/src/systems/subspace/packages/conduit/src/adapters/transport/natsTransport.ts +++ b/src/systems/subspace/packages/conduit/src/adapters/transport/natsTransport.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import { connect, type NatsConnection, type Subscription } from 'nats'; import type { NatsConfig } from '../../types/config'; import type { ITransportAdapter, MessageHandler } from './transportAdapter'; diff --git a/src/systems/subspace/packages/conduit/src/core/ownershipManager.ts b/src/systems/subspace/packages/conduit/src/core/ownershipManager.ts index 594400af4..960095742 100644 --- a/src/systems/subspace/packages/conduit/src/core/ownershipManager.ts +++ b/src/systems/subspace/packages/conduit/src/core/ownershipManager.ts @@ -1,4 +1,4 @@ -import { getSentry } from '@lowerdeck/sentry'; +import { getSentry } from '@mtsrc/sentry'; import type { ICoordinationAdapter } from '../adapters/coordination/coordinationAdapter'; let Sentry = getSentry(); diff --git a/src/systems/subspace/packages/conduit/src/core/receiver.ts b/src/systems/subspace/packages/conduit/src/core/receiver.ts index 6c1d8a729..b4b6534f5 100644 --- a/src/systems/subspace/packages/conduit/src/core/receiver.ts +++ b/src/systems/subspace/packages/conduit/src/core/receiver.ts @@ -1,5 +1,5 @@ -import { getSentry } from '@lowerdeck/sentry'; -import { serialize } from '@lowerdeck/serialize'; +import { getSentry } from '@mtsrc/sentry'; +import { serialize } from '@mtsrc/serialize'; import type { ICoordinationAdapter } from '../adapters/coordination/coordinationAdapter'; import type { MemoryTransport } from '../adapters/transport/memoryTransport'; import type { ITransportAdapter } from '../adapters/transport/transportAdapter'; diff --git a/src/systems/subspace/packages/conduit/src/core/sender.ts b/src/systems/subspace/packages/conduit/src/core/sender.ts index 7d1feba3d..9bdf826fb 100644 --- a/src/systems/subspace/packages/conduit/src/core/sender.ts +++ b/src/systems/subspace/packages/conduit/src/core/sender.ts @@ -1,5 +1,5 @@ -import { getSentry } from '@lowerdeck/sentry'; -import { serialize } from '@lowerdeck/serialize'; +import { getSentry } from '@mtsrc/sentry'; +import { serialize } from '@mtsrc/serialize'; import type { ICoordinationAdapter } from '../adapters/coordination/coordinationAdapter'; import type { ITransportAdapter } from '../adapters/transport/transportAdapter'; import type { SenderConfig } from '../types/config'; diff --git a/src/systems/subspace/packages/connection-utils/package.json b/src/systems/subspace/packages/connection-utils/package.json index 854535495..9aa929dec 100644 --- a/src/systems/subspace/packages/connection-utils/package.json +++ b/src/systems/subspace/packages/connection-utils/package.json @@ -13,14 +13,14 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@modelcontextprotocol/sdk": "^1.25.2", "@metorial-platform-systems/object-storage-client": "workspace:*", - "zod": "^4.3.5" + "zod": "^4.3.5", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/validation": "1.0.0" } } diff --git a/src/systems/subspace/packages/connection-utils/src/env.ts b/src/systems/subspace/packages/connection-utils/src/env.ts index d52fb55db..05b87e254 100644 --- a/src/systems/subspace/packages/connection-utils/src/env.ts +++ b/src/systems/subspace/packages/connection-utils/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ storage: { diff --git a/src/systems/subspace/packages/connection-utils/src/serviceErrorToMcpError.ts b/src/systems/subspace/packages/connection-utils/src/serviceErrorToMcpError.ts index 8a8aaeed6..c2ec364c3 100644 --- a/src/systems/subspace/packages/connection-utils/src/serviceErrorToMcpError.ts +++ b/src/systems/subspace/packages/connection-utils/src/serviceErrorToMcpError.ts @@ -1,4 +1,4 @@ -import type { ServiceError } from '@lowerdeck/error'; +import type { ServiceError } from '@mtsrc/error'; import type { JSONRPCErrorResponse } from '@modelcontextprotocol/sdk/types.js'; export let serviceErrorToMcpError = ({ data: error }: ServiceError) => { diff --git a/src/systems/subspace/packages/connection-utils/src/storage.ts b/src/systems/subspace/packages/connection-utils/src/storage.ts index c5539e1ad..cf858b5d4 100644 --- a/src/systems/subspace/packages/connection-utils/src/storage.ts +++ b/src/systems/subspace/packages/connection-utils/src/storage.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { db } from '@metorial-subspace/db'; import { ObjectStorageClient } from '@metorial-platform-systems/object-storage-client'; import { env } from './env'; diff --git a/src/systems/subspace/packages/list-utils/package.json b/src/systems/subspace/packages/list-utils/package.json index 6da9b4859..8d2e46f73 100644 --- a/src/systems/subspace/packages/list-utils/package.json +++ b/src/systems/subspace/packages/list-utils/package.json @@ -16,8 +16,8 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/error": "^1.2.3", "@metorial-subspace/db": "^1.0.0", - "date-fns": "^4.1.0" + "date-fns": "^4.1.0", + "@mtsrc/error": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/packages/list-utils/src/deleteCheck.ts b/src/systems/subspace/packages/list-utils/src/deleteCheck.ts index b937c420c..7dfefcd75 100644 --- a/src/systems/subspace/packages/list-utils/src/deleteCheck.ts +++ b/src/systems/subspace/packages/list-utils/src/deleteCheck.ts @@ -1,4 +1,4 @@ -import { badRequestError, goneError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, goneError, ServiceError } from '@mtsrc/error'; let actionNameMap = { update: 'updated', diff --git a/src/systems/subspace/packages/list-utils/src/linkGuards.ts b/src/systems/subspace/packages/list-utils/src/linkGuards.ts index ce0d858dc..b3e0dbad2 100644 --- a/src/systems/subspace/packages/list-utils/src/linkGuards.ts +++ b/src/systems/subspace/packages/list-utils/src/linkGuards.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { db, type Environment, type Solution, type Tenant } from '@metorial-subspace/db'; type TenantScope = { diff --git a/src/systems/subspace/packages/presenters/package.json b/src/systems/subspace/packages/presenters/package.json index 4f847134c..10cfe5293 100644 --- a/src/systems/subspace/packages/presenters/package.json +++ b/src/systems/subspace/packages/presenters/package.json @@ -13,13 +13,13 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/shadow-id": "^1.0.7", - "@lowerdeck/validation": "^1.0.10", "@metorial-subspace/connection-utils": "^1.0.0", "@metorial-platform-systems/slates-client": "^1.0.0", "@metorial-subspace/db": "^1.0.0", - "@metorial-subspace/provider-shuttle": "^1.0.0" + "@metorial-subspace/provider-shuttle": "^1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/shadow-id": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/packages/presenters/src/authConfigError.ts b/src/systems/subspace/packages/presenters/src/authConfigError.ts index 61ab5630d..c15e7fd66 100644 --- a/src/systems/subspace/packages/presenters/src/authConfigError.ts +++ b/src/systems/subspace/packages/presenters/src/authConfigError.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { db, type Provider, diff --git a/src/systems/subspace/packages/presenters/src/env.ts b/src/systems/subspace/packages/presenters/src/env.ts index b5445d4c2..61f968e2d 100644 --- a/src/systems/subspace/packages/presenters/src/env.ts +++ b/src/systems/subspace/packages/presenters/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/packages/presenters/src/providerAuthMethod.ts b/src/systems/subspace/packages/presenters/src/providerAuthMethod.ts index d0aa5831d..a7ec9547a 100644 --- a/src/systems/subspace/packages/presenters/src/providerAuthMethod.ts +++ b/src/systems/subspace/packages/presenters/src/providerAuthMethod.ts @@ -1,4 +1,4 @@ -import { shadowId } from '@lowerdeck/shadow-id'; +import { shadowId } from '@mtsrc/shadow-id'; import type { Provider, ProviderAuthMethod, diff --git a/src/systems/subspace/packages/presenters/src/scmPush.ts b/src/systems/subspace/packages/presenters/src/scmPush.ts index 38215798c..5b7d48830 100644 --- a/src/systems/subspace/packages/presenters/src/scmPush.ts +++ b/src/systems/subspace/packages/presenters/src/scmPush.ts @@ -1,4 +1,4 @@ -import { shadowId } from '@lowerdeck/shadow-id'; +import { shadowId } from '@mtsrc/shadow-id'; import type { ScmRepo, ScmRepoPush } from '@metorial-subspace/db'; import { scmRepositoryPresenter } from './scmRepository'; diff --git a/src/systems/subspace/packages/presenters/src/sessionError.ts b/src/systems/subspace/packages/presenters/src/sessionError.ts index 84b313fe6..041ef3239 100644 --- a/src/systems/subspace/packages/presenters/src/sessionError.ts +++ b/src/systems/subspace/packages/presenters/src/sessionError.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { db, type ProviderRun, diff --git a/src/systems/subspace/packages/retry-utils/package.json b/src/systems/subspace/packages/retry-utils/package.json index 552d2c8d5..f7dab6d71 100644 --- a/src/systems/subspace/packages/retry-utils/package.json +++ b/src/systems/subspace/packages/retry-utils/package.json @@ -13,6 +13,6 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/delay": "^1.0.4" + "@mtsrc/delay": "1.0.0" } } diff --git a/src/systems/subspace/packages/retry-utils/src/index.ts b/src/systems/subspace/packages/retry-utils/src/index.ts index f643509c2..9e4da999c 100644 --- a/src/systems/subspace/packages/retry-utils/src/index.ts +++ b/src/systems/subspace/packages/retry-utils/src/index.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; type RetryReason = 'empty_result' | 'error'; diff --git a/src/systems/subspace/provider-backends/provider-manager/package.json b/src/systems/subspace/provider-backends/provider-manager/package.json index 214ae73cb..5ea25e400 100644 --- a/src/systems/subspace/provider-backends/provider-manager/package.json +++ b/src/systems/subspace/provider-backends/provider-manager/package.json @@ -16,7 +16,7 @@ "@metorial-subspace/provider-native": "^1.0.0", "@metorial-subspace/provider-slates": "^1.0.0", "@metorial-subspace/provider-shuttle": "^1.0.0", - "@lowerdeck/cache": "^1.0.2", - "@metorial-subspace/db": "^1.0.0" + "@metorial-subspace/db": "^1.0.0", + "@mtsrc/cache": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/provider-backends/provider-manager/src/index.ts b/src/systems/subspace/provider-backends/provider-manager/src/index.ts index c608296a9..bb7ca665b 100644 --- a/src/systems/subspace/provider-backends/provider-manager/src/index.ts +++ b/src/systems/subspace/provider-backends/provider-manager/src/index.ts @@ -1,4 +1,4 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; import { db } from '@metorial-subspace/db'; import { nativeProvider } from '@metorial-subspace/provider-native/src/impl'; import { shuttleProvider } from '@metorial-subspace/provider-shuttle/src/impl'; diff --git a/src/systems/subspace/provider-backends/provider-native/package.json b/src/systems/subspace/provider-backends/provider-native/package.json index 8d05e2e92..0b2653684 100644 --- a/src/systems/subspace/provider-backends/provider-native/package.json +++ b/src/systems/subspace/provider-backends/provider-native/package.json @@ -13,14 +13,14 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", "@metorial-services/scout-client": "^1.0.0", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/provider-utils": "^1.0.0", - "zod": "^4.3.6" + "zod": "^4.3.6", + "@mtsrc/error": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0" } } diff --git a/src/systems/subspace/provider-backends/provider-native/src/env.ts b/src/systems/subspace/provider-backends/provider-native/src/env.ts index 6b90b1df3..fca549230 100644 --- a/src/systems/subspace/provider-backends/provider-native/src/env.ts +++ b/src/systems/subspace/provider-backends/provider-native/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ scout: { diff --git a/src/systems/subspace/provider-backends/provider-native/src/impl/auth.ts b/src/systems/subspace/provider-backends/provider-native/src/impl/auth.ts index c1f25bb02..80d44fc9a 100644 --- a/src/systems/subspace/provider-backends/provider-native/src/impl/auth.ts +++ b/src/systems/subspace/provider-backends/provider-native/src/impl/auth.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { IProviderAuth, type GetDecryptedAuthConfigParam, diff --git a/src/systems/subspace/provider-backends/provider-native/src/impl/deployment.ts b/src/systems/subspace/provider-backends/provider-native/src/impl/deployment.ts index 76161be4e..f886e04ee 100644 --- a/src/systems/subspace/provider-backends/provider-native/src/impl/deployment.ts +++ b/src/systems/subspace/provider-backends/provider-native/src/impl/deployment.ts @@ -1,4 +1,4 @@ -import { ServiceError, badRequestError } from '@lowerdeck/error'; +import { ServiceError, badRequestError } from '@mtsrc/error'; import { IProviderDeployment, type ProviderConfigDeleteParam, diff --git a/src/systems/subspace/provider-backends/provider-native/src/impl/run.ts b/src/systems/subspace/provider-backends/provider-native/src/impl/run.ts index 1bed23851..1e39b9eaa 100644 --- a/src/systems/subspace/provider-backends/provider-native/src/impl/run.ts +++ b/src/systems/subspace/provider-backends/provider-native/src/impl/run.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { db, messageInputToToolCall } from '@metorial-subspace/db'; import { IProviderRun, diff --git a/src/systems/subspace/provider-backends/provider-native/src/index.ts b/src/systems/subspace/provider-backends/provider-native/src/index.ts index 6a266944a..ab3c7a482 100644 --- a/src/systems/subspace/provider-backends/provider-native/src/index.ts +++ b/src/systems/subspace/provider-backends/provider-native/src/index.ts @@ -1,6 +1,6 @@ import './integrations'; -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; export let nativeProviderQueues = combineQueueProcessors([]); diff --git a/src/systems/subspace/provider-backends/provider-native/src/sync.ts b/src/systems/subspace/provider-backends/provider-native/src/sync.ts index 2543021a9..2726409e7 100644 --- a/src/systems/subspace/provider-backends/provider-native/src/sync.ts +++ b/src/systems/subspace/provider-backends/provider-native/src/sync.ts @@ -1,6 +1,6 @@ -import { delay } from '@lowerdeck/delay'; -import { getSentry } from '@lowerdeck/sentry'; -import { slugify } from '@lowerdeck/slugify'; +import { delay } from '@mtsrc/delay'; +import { getSentry } from '@mtsrc/sentry'; +import { slugify } from '@mtsrc/slugify'; import { providerInternalService, providerVersionInternalService, diff --git a/src/systems/subspace/provider-backends/provider-shuttle/package.json b/src/systems/subspace/provider-backends/provider-shuttle/package.json index 32e07c80d..76511fac8 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/package.json +++ b/src/systems/subspace/provider-backends/provider-shuttle/package.json @@ -13,20 +13,6 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/programmable-promise": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial-services/registry-client": "^1.0.0", "@metorial-platform-systems/shuttle-client": "1.0.0", "@metorial-subspace/connection-utils": "^1.0.0", @@ -36,6 +22,20 @@ "@metorial-subspace/retry-utils": "^1.0.0", "@modelcontextprotocol/sdk": "^1.25.3", "p-queue": "^9.1.0", - "zod": "^4.3.6" + "zod": "^4.3.6", + "@mtsrc/cache": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/programmable-promise": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/client.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/client.ts index 2079eff45..f2b96ed07 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/client.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/client.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { createLiveConnectionClient, createShuttleClient diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/env.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/env.ts index 633db1c3e..925517e28 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/env.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/impl/auth.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/impl/auth.ts index dca0ec3f2..008277276 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/impl/auth.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/impl/auth.ts @@ -1,5 +1,5 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { db, snowflake } from '@metorial-subspace/db'; import type { GetDecryptedAuthConfigParam, diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/impl/capabilities.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/impl/capabilities.ts index 57b926d18..0f57e0b1e 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/impl/capabilities.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/impl/capabilities.ts @@ -1,5 +1,5 @@ -import { delay } from '@lowerdeck/delay'; -import { slugify } from '@lowerdeck/slugify'; +import { delay } from '@mtsrc/delay'; +import { slugify } from '@mtsrc/slugify'; import { db } from '@metorial-subspace/db'; import { IProviderCapabilities, diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/impl/deployment.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/impl/deployment.ts index 189bf4d4a..b15cf9b9c 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/impl/deployment.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/impl/deployment.ts @@ -1,4 +1,4 @@ -import { ServiceError, badRequestError } from '@lowerdeck/error'; +import { ServiceError, badRequestError } from '@mtsrc/error'; import { db, snowflake, withTransaction } from '@metorial-subspace/db'; import { IProviderDeployment, diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/impl/run.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/impl/run.ts index 743e86def..e1b532d67 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/impl/run.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/impl/run.ts @@ -1,4 +1,4 @@ -import { ProgrammablePromise } from '@lowerdeck/programmable-promise'; +import { ProgrammablePromise } from '@mtsrc/programmable-promise'; import { db, messageTranslator, diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/index.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/index.ts index 0168a1e8f..13cf1d652 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/index.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { shuttle } from './client'; import { registryQueues } from './queues/registry'; import { syncQueues } from './queues/sync'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/lib/upsertShuttleVersion.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/lib/upsertShuttleVersion.ts index 09ee01f59..fe62001a7 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/lib/upsertShuttleVersion.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/lib/upsertShuttleVersion.ts @@ -1,5 +1,5 @@ -import { generateCode, generatePlainId } from '@lowerdeck/id'; -import { slugify } from '@lowerdeck/slugify'; +import { generateCode, generatePlainId } from '@mtsrc/id'; +import { slugify } from '@mtsrc/slugify'; import { withTransaction, type Publisher, diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/index.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/index.ts index b1100603b..62ef37950 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/index.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { setReadmeForShuttleServerQueueProcessor } from './setReadme'; import { syncServersCron, diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/setReadme.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/setReadme.ts index 2ac38765a..9ca7452be 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/setReadme.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/setReadme.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { createMcpRegistryClient } from '@metorial-services/registry-client'; import { db } from '@metorial-subspace/db'; import { env } from '../../env'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/syncServers.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/syncServers.ts index 48e6ebdd9..f64d0ef50 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/syncServers.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/registry/syncServers.ts @@ -1,7 +1,7 @@ -import { createCron } from '@lowerdeck/cron'; -import { Hash } from '@lowerdeck/hash'; -import { createQueue } from '@lowerdeck/queue'; -import { slugify } from '@lowerdeck/slugify'; +import { createCron } from '@mtsrc/cron'; +import { Hash } from '@mtsrc/hash'; +import { createQueue } from '@mtsrc/queue'; +import { slugify } from '@mtsrc/slugify'; import { createMcpRegistryClient, createRootRegistryClient diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/authConfigEvents.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/authConfigEvents.ts index 2203721e0..b581116ef 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/authConfigEvents.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/authConfigEvents.ts @@ -1,7 +1,7 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; -import { createLock } from '@lowerdeck/lock'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; +import { createLock } from '@mtsrc/lock'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { createProviderInvocationId } from '@metorial-subspace/provider-utils'; import { backend as shuttleBackend } from '../../backend'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/changeNotifications.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/changeNotifications.ts index 009c877e5..9c873b9c6 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/changeNotifications.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/changeNotifications.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { backend as shuttleBackend } from '../../backend'; import { shuttle } from '../../client'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/cron.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/cron.ts index 57b43a125..9325cc7e7 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/cron.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/cron.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { backend as shuttleBackend } from '../../backend'; import { env } from '../../env'; import { syncAuthConfigEventsQueue } from './authConfigEvents'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/index.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/index.ts index 9541c4e5c..cdac1d510 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/index.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { syncAuthConfigEventQueueProcessor, syncAuthConfigEventsQueueProcessor diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/oauthSetups.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/oauthSetups.ts index 409fed7ca..d6d89c753 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/oauthSetups.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/oauthSetups.ts @@ -1,7 +1,7 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; -import { createLock } from '@lowerdeck/lock'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; +import { createLock } from '@mtsrc/lock'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { providerOAuthSetupInternalService } from '@metorial-subspace/module-auth'; import { createProviderInvocationId } from '@metorial-subspace/provider-utils'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/syncShuttleVersion.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/syncShuttleVersion.ts index ecbf3d64e..779da9eb4 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/syncShuttleVersion.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/queues/sync/syncShuttleVersion.ts @@ -1,4 +1,4 @@ -import { createQueue } from '@lowerdeck/queue'; +import { createQueue } from '@mtsrc/queue'; import { db, snowflake } from '@metorial-subspace/db'; import { syncVersionToCustomProvider } from '@metorial-subspace/module-custom-provider'; import { shuttle, shuttleDefaultReaderTenant } from '../../client'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerRegistry.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerRegistry.ts index b06215c15..cfbdd3eae 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerRegistry.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerRegistry.ts @@ -1,5 +1,5 @@ -import type { PaginatorInput } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import type { PaginatorInput } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '@metorial-subspace/db'; import { getTenantForShuttle, shuttle } from '../client'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerRepository.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerRepository.ts index 1a5439bb9..2325bd2ad 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerRepository.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerRepository.ts @@ -1,5 +1,5 @@ -import type { PaginatorInput } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import type { PaginatorInput } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '@metorial-subspace/db'; import { getTenantForShuttle, shuttle } from '../client'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerTag.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerTag.ts index ef3182b8b..fd98a9cb9 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerTag.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerTag.ts @@ -1,5 +1,5 @@ -import type { PaginatorInput } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import type { PaginatorInput } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '@metorial-subspace/db'; import { getTenantForShuttle, shuttle } from '../client'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerVersion.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerVersion.ts index 8ebe37726..afefbd405 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerVersion.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/services/containerVersion.ts @@ -1,5 +1,5 @@ -import type { PaginatorInput } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import type { PaginatorInput } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '@metorial-subspace/db'; import { getTenantForShuttle, shuttle } from '../client'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/services/networkRuleset.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/services/networkRuleset.ts index 6a923264e..3c4df688f 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/services/networkRuleset.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/services/networkRuleset.ts @@ -1,5 +1,5 @@ -import type { PaginatorInput } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import type { PaginatorInput } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Tenant } from '@metorial-subspace/db'; import { getTenantForShuttle, shuttle, type NetworkingRuleset } from '../client'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/shuttleRetry.test.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/shuttleRetry.test.ts index 6ffad0567..1f6eb0025 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/shuttleRetry.test.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/shuttleRetry.test.ts @@ -1,4 +1,4 @@ -import { createError, ServiceError } from '@lowerdeck/error'; +import { createError, ServiceError } from '@mtsrc/error'; import { describe, expect, it, vi } from 'vitest'; import { withShuttleRetry } from './shuttleRetry'; diff --git a/src/systems/subspace/provider-backends/provider-shuttle/src/shuttleRetry.ts b/src/systems/subspace/provider-backends/provider-shuttle/src/shuttleRetry.ts index 88c3d218d..b3f34f548 100644 --- a/src/systems/subspace/provider-backends/provider-shuttle/src/shuttleRetry.ts +++ b/src/systems/subspace/provider-backends/provider-shuttle/src/shuttleRetry.ts @@ -1,4 +1,4 @@ -import { isServiceError } from '@lowerdeck/error'; +import { isServiceError } from '@mtsrc/error'; import { formatUnknownError, retryUntilTimeout, diff --git a/src/systems/subspace/provider-backends/provider-slates/package.json b/src/systems/subspace/provider-backends/provider-slates/package.json index ad48aa6a3..cd156abad 100644 --- a/src/systems/subspace/provider-backends/provider-slates/package.json +++ b/src/systems/subspace/provider-backends/provider-slates/package.json @@ -13,23 +13,23 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/cache": "^1.0.2", - "@lowerdeck/cron": "^1.1.3", - "@lowerdeck/delay": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.8", - "@lowerdeck/lock": "^1.0.6", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/slugify": "^1.0.6", - "@lowerdeck/validation": "^1.0.10", "@metorial-services/registry-client": "^1.0.0", "@metorial-platform-systems/slates-client": "^1.0.0", "@metorial-subspace/db": "^1.0.0", "@metorial-subspace/module-catalog": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/provider-utils": "^1.0.0", - "p-queue": "^9.1.0" + "p-queue": "^9.1.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/delay": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/lock": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/provider-backends/provider-slates/src/client.ts b/src/systems/subspace/provider-backends/provider-slates/src/client.ts index 12246a3f3..de4932190 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/client.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/client.ts @@ -1,4 +1,4 @@ -import { delay } from '@lowerdeck/delay'; +import { delay } from '@mtsrc/delay'; import { createSlatesHubInternalClient } from '@metorial-platform-systems/slates-client'; import { db, type Tenant } from '@metorial-subspace/db'; import { env } from './env'; diff --git a/src/systems/subspace/provider-backends/provider-slates/src/env.ts b/src/systems/subspace/provider-backends/provider-slates/src/env.ts index f45d53376..ba36a8790 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/env.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/subspace/provider-backends/provider-slates/src/impl/auth.ts b/src/systems/subspace/provider-backends/provider-slates/src/impl/auth.ts index 994d28b01..27ad6811d 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/impl/auth.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/impl/auth.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { db, snowflake } from '@metorial-subspace/db'; import type { GetDecryptedAuthConfigParam, diff --git a/src/systems/subspace/provider-backends/provider-slates/src/impl/capabilities.ts b/src/systems/subspace/provider-backends/provider-slates/src/impl/capabilities.ts index 834c5c8e0..0f258f086 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/impl/capabilities.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/impl/capabilities.ts @@ -1,4 +1,4 @@ -import { badRequestError, ServiceError } from '@lowerdeck/error'; +import { badRequestError, ServiceError } from '@mtsrc/error'; import { db } from '@metorial-subspace/db'; import { IProviderCapabilities, diff --git a/src/systems/subspace/provider-backends/provider-slates/src/impl/deployment.ts b/src/systems/subspace/provider-backends/provider-slates/src/impl/deployment.ts index 29900b94d..dea037d80 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/impl/deployment.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/impl/deployment.ts @@ -1,4 +1,4 @@ -import { ServiceError, badRequestError } from '@lowerdeck/error'; +import { ServiceError, badRequestError } from '@mtsrc/error'; import { db, snowflake, withTransaction } from '@metorial-subspace/db'; import { IProviderDeployment, diff --git a/src/systems/subspace/provider-backends/provider-slates/src/index.ts b/src/systems/subspace/provider-backends/provider-slates/src/index.ts index 43b00e8fd..c82eeca8b 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/index.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { slates } from './client'; import { registryQueues } from './queues/registry'; import { syncQueues } from './queues/sync'; diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/index.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/index.ts index 10ca5545b..96077e026 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/index.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { syncCollectionsCron, syncCollectionsManyProcessor, diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/syncCollections.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/syncCollections.ts index 4cc6687ff..fc059b01a 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/syncCollections.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/syncCollections.ts @@ -1,5 +1,5 @@ -import { createCron } from '@lowerdeck/cron'; -import { createQueue } from '@lowerdeck/queue'; +import { createCron } from '@mtsrc/cron'; +import { createQueue } from '@mtsrc/queue'; import { createCollectionsRegistryClient, createRootRegistryClient diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/syncRegistries.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/syncRegistries.ts index 3366d1e47..b7d64b2a4 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/syncRegistries.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/registry/syncRegistries.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { createRootRegistryClient } from '@metorial-services/registry-client'; import { slates } from '../../client'; import { env } from '../../env'; diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/authConfigEvents.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/authConfigEvents.ts index 0517182ba..a304dbcff 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/authConfigEvents.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/authConfigEvents.ts @@ -1,7 +1,7 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { createLock } from '@lowerdeck/lock'; -import { Hash } from '@lowerdeck/hash'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { createLock } from '@mtsrc/lock'; +import { Hash } from '@mtsrc/hash'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db, getId } from '@metorial-subspace/db'; import { createProviderInvocationId } from '@metorial-subspace/provider-utils'; import { backend as slatesBackend } from '../../backend'; diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/changeNotifications.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/changeNotifications.ts index ff00dc5ea..a276d4e3b 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/changeNotifications.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/changeNotifications.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { db } from '@metorial-subspace/db'; import { backend as slatesBackend } from '../../backend'; import { slates } from '../../client'; diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/cron.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/cron.ts index 56c42545e..e01048649 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/cron.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/cron.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { backend } from '../../backend'; import { env } from '../../env'; import { syncAuthConfigEventsQueue } from './authConfigEvents'; diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/index.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/index.ts index c38218386..0c4672e80 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/index.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/index.ts @@ -1,4 +1,4 @@ -import { combineQueueProcessors } from '@lowerdeck/queue'; +import { combineQueueProcessors } from '@mtsrc/queue'; import { syncAuthConfigEventQueueProcessor, syncAuthConfigEventsQueueProcessor diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/oauthSetups.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/oauthSetups.ts index d81eafd5f..b110423c0 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/oauthSetups.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/oauthSetups.ts @@ -1,8 +1,8 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; -import { createLock } from '@lowerdeck/lock'; -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; -import { slugify } from '@lowerdeck/slugify'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; +import { createLock } from '@mtsrc/lock'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; +import { slugify } from '@mtsrc/slugify'; import { db, getId } from '@metorial-subspace/db'; import { providerOAuthSetupInternalService } from '@metorial-subspace/module-auth'; import { createProviderInvocationId } from '@metorial-subspace/provider-utils'; diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/syncSlateVersion.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/syncSlateVersion.ts index 99928819a..111dd0a69 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/syncSlateVersion.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/syncSlateVersion.ts @@ -1,9 +1,9 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { Cases } from '@lowerdeck/case'; -import { Hash } from '@lowerdeck/hash'; -import { generateCode } from '@lowerdeck/id'; -import { createQueue } from '@lowerdeck/queue'; -import { slugify } from '@lowerdeck/slugify'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { Cases } from '@mtsrc/case'; +import { Hash } from '@mtsrc/hash'; +import { generateCode } from '@mtsrc/id'; +import { createQueue } from '@mtsrc/queue'; +import { slugify } from '@mtsrc/slugify'; import { db, snowflake } from '@metorial-subspace/db'; import { providerInternalService, diff --git a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/syncSlates.ts b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/syncSlates.ts index ec8a6dee4..a07dd1fb1 100644 --- a/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/syncSlates.ts +++ b/src/systems/subspace/provider-backends/provider-slates/src/queues/sync/syncSlates.ts @@ -1,5 +1,5 @@ -import { createLock } from '@lowerdeck/lock'; -import { createQueue } from '@lowerdeck/queue'; +import { createLock } from '@mtsrc/lock'; +import { createQueue } from '@mtsrc/queue'; import { backend as slatesBackend } from '../../backend'; import { slates } from '../../client'; import { env } from '../../env'; diff --git a/src/systems/subspace/provider-backends/provider-utils/package.json b/src/systems/subspace/provider-backends/provider-utils/package.json index 193e95d7f..1ae14751a 100644 --- a/src/systems/subspace/provider-backends/provider-utils/package.json +++ b/src/systems/subspace/provider-backends/provider-utils/package.json @@ -13,8 +13,8 @@ "typescript": "^5" }, "dependencies": { - "@lowerdeck/base62": "^1.0.4", "@metorial-subspace/db": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.25.3" + "@modelcontextprotocol/sdk": "^1.25.3", + "@mtsrc/base62": "1.0.0" } } \ No newline at end of file diff --git a/src/systems/subspace/provider-backends/provider-utils/src/lib/providerInvocationId.ts b/src/systems/subspace/provider-backends/provider-utils/src/lib/providerInvocationId.ts index 501b40bd0..b1ea28f1d 100644 --- a/src/systems/subspace/provider-backends/provider-utils/src/lib/providerInvocationId.ts +++ b/src/systems/subspace/provider-backends/provider-utils/src/lib/providerInvocationId.ts @@ -1,4 +1,4 @@ -import { base62 } from '@lowerdeck/base62'; +import { base62 } from '@mtsrc/base62'; export let PROVIDER_INVOCATION_ID_PREFIX = 'piv_'; diff --git a/src/systems/subspace/provider-backends/provider-utils/src/providerTypes.ts b/src/systems/subspace/provider-backends/provider-utils/src/providerTypes.ts index 93e4393ab..db5154cc6 100644 --- a/src/systems/subspace/provider-backends/provider-utils/src/providerTypes.ts +++ b/src/systems/subspace/provider-backends/provider-utils/src/providerTypes.ts @@ -1,6 +1,6 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { Hash } from '@lowerdeck/hash'; -import { generatePlainId } from '@lowerdeck/id'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { Hash } from '@mtsrc/hash'; +import { generatePlainId } from '@mtsrc/id'; import { db, get4ByteIntId, ID, type ProviderType } from '@metorial-subspace/db'; let cachedProviderTypes: Record = {}; diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index 448ac9855..a9d8b8c57 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -26,7 +26,7 @@ WORKDIR /app/src/systems/synthesis/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/synthesis/service/package.json b/src/systems/synthesis/service/package.json index 286a5c00a..136d34f23 100644 --- a/src/systems/synthesis/service/package.json +++ b/src/systems/synthesis/service/package.json @@ -25,31 +25,16 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", - "vitest": "^4.0.17" + "vitest": "^4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" }, "dependencies": { - "@lowerdeck/error": "^1.2.3", - "@lowerdeck/execution-context": "^1.1.1", - "@lowerdeck/api-mux": "^1.0.4", - "@lowerdeck/env": "^1.0.6", - "@lowerdeck/hono": "^1.0.10", - "@lowerdeck/pagination": "^1.0.8", - "@lowerdeck/queue": "^1.0.11", - "@lowerdeck/redis": "^1.0.6", - "@lowerdeck/rpc-server": "^1.0.11", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.7", - "@lowerdeck/snowflake": "^1.0.2", - "@lowerdeck/telemetry": "^1.1.1", - "@lowerdeck/validation": "1.0.10", - "@lowerdeck/id": "^1.0.8", "@metorial-services/scout-client": "^1.0.0", "@openharness/core": "^0.6.2", "@prisma/adapter-pg": "^7.2.0", @@ -62,6 +47,21 @@ "just-bash": "^2.14.4", "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", - "zod": "^4.4.3" + "zod": "^4.4.3", + "@mtsrc/error": "1.0.0", + "@mtsrc/execution-context": "1.0.0", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/hono": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/redis": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/snowflake": "1.0.0", + "@mtsrc/telemetry": "1.0.0", + "@mtsrc/validation": "1.0.0", + "@mtsrc/id": "1.0.0" } } diff --git a/src/systems/synthesis/service/src/controllers/_app.ts b/src/systems/synthesis/service/src/controllers/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/synthesis/service/src/controllers/_app.ts +++ b/src/systems/synthesis/service/src/controllers/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/synthesis/service/src/controllers/assistant.ts b/src/systems/synthesis/service/src/controllers/assistant.ts index 4b3d883c1..199d5c362 100644 --- a/src/systems/synthesis/service/src/controllers/assistant.ts +++ b/src/systems/synthesis/service/src/controllers/assistant.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { assistantPresenter } from '../presenters'; import { assistantService } from '../services'; import { app } from './_app'; diff --git a/src/systems/synthesis/service/src/controllers/conversation.ts b/src/systems/synthesis/service/src/controllers/conversation.ts index 23f46fa92..c539336ab 100644 --- a/src/systems/synthesis/service/src/controllers/conversation.ts +++ b/src/systems/synthesis/service/src/controllers/conversation.ts @@ -1,6 +1,6 @@ -import { badRequestError, notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { badRequestError, notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { db } from '../db'; import { assistantConversationPresenter } from '../presenters'; import { assistantConversationService } from '../services'; diff --git a/src/systems/synthesis/service/src/controllers/index.ts b/src/systems/synthesis/service/src/controllers/index.ts index be5e2070b..15770a8bd 100644 --- a/src/systems/synthesis/service/src/controllers/index.ts +++ b/src/systems/synthesis/service/src/controllers/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { actorController, environmentController, tenantController } from './tenant'; import { assistantController } from './assistant'; diff --git a/src/systems/synthesis/service/src/controllers/message.ts b/src/systems/synthesis/service/src/controllers/message.ts index b5d80d7de..65538dfdc 100644 --- a/src/systems/synthesis/service/src/controllers/message.ts +++ b/src/systems/synthesis/service/src/controllers/message.ts @@ -1,5 +1,5 @@ -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { assistantMessagePresenter } from '../presenters'; import { assistantMessageService } from '../services'; import { app } from './_app'; diff --git a/src/systems/synthesis/service/src/controllers/request.ts b/src/systems/synthesis/service/src/controllers/request.ts index a264fd15b..4f7fda5fc 100644 --- a/src/systems/synthesis/service/src/controllers/request.ts +++ b/src/systems/synthesis/service/src/controllers/request.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { v } from '@mtsrc/validation'; import { db } from '../db'; import { assistantMessagePresenter, diff --git a/src/systems/synthesis/service/src/controllers/tenant.ts b/src/systems/synthesis/service/src/controllers/tenant.ts index 10b546499..f82f3f413 100644 --- a/src/systems/synthesis/service/src/controllers/tenant.ts +++ b/src/systems/synthesis/service/src/controllers/tenant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { v } from '@lowerdeck/validation'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { v } from '@mtsrc/validation'; import { db } from '../db'; import { getId } from '../id'; import { actorPresenter, environmentPresenter, tenantPresenter } from '../presenters'; diff --git a/src/systems/synthesis/service/src/db.ts b/src/systems/synthesis/service/src/db.ts index 713db2d61..ee6916b43 100644 --- a/src/systems/synthesis/service/src/db.ts +++ b/src/systems/synthesis/service/src/db.ts @@ -1,7 +1,7 @@ import { provideExecutionContext, withExecutionContextOptional -} from '@lowerdeck/execution-context'; +} from '@mtsrc/execution-context'; import { PrismaPg } from '@prisma/adapter-pg'; import { readReplicas } from '@prisma/extension-read-replicas'; import { AsyncLocalStorage } from 'async_hooks'; diff --git a/src/systems/synthesis/service/src/endpoints.ts b/src/systems/synthesis/service/src/endpoints.ts index 3667327a1..1463f94ff 100644 --- a/src/systems/synthesis/service/src/endpoints.ts +++ b/src/systems/synthesis/service/src/endpoints.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { rpcMux } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { rpcMux } from '@mtsrc/rpc-server'; import { RedisClient } from 'bun'; import { SynthesisRPC } from './controllers'; import { db } from './db'; diff --git a/src/systems/synthesis/service/src/env.ts b/src/systems/synthesis/service/src/env.ts index 3fe166206..b8f09a351 100644 --- a/src/systems/synthesis/service/src/env.ts +++ b/src/systems/synthesis/service/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/synthesis/service/src/http.ts b/src/systems/synthesis/service/src/http.ts index eebfdec03..74dfc070b 100644 --- a/src/systems/synthesis/service/src/http.ts +++ b/src/systems/synthesis/service/src/http.ts @@ -1,5 +1,5 @@ -import { internalServerError, isServiceError } from '@lowerdeck/error'; -import { createHono } from '@lowerdeck/hono'; +import { internalServerError, isServiceError } from '@mtsrc/error'; +import { createHono } from '@mtsrc/hono'; import { streamSSE } from 'hono/streaming'; import { assistantRequestService } from './services'; diff --git a/src/systems/synthesis/service/src/id.ts b/src/systems/synthesis/service/src/id.ts index 2973a9c27..9a1137a66 100644 --- a/src/systems/synthesis/service/src/id.ts +++ b/src/systems/synthesis/service/src/id.ts @@ -1,5 +1,5 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; -import { Snowflake } from '@lowerdeck/snowflake'; +import { createIdGenerator, idType } from '@mtsrc/id'; +import { Snowflake } from '@mtsrc/snowflake'; export let ID = createIdGenerator({ tenant: idType.sorted('syn_tn_'), diff --git a/src/systems/synthesis/service/src/instrument.ts b/src/systems/synthesis/service/src/instrument.ts index c036b5a1a..80f7eac33 100644 --- a/src/systems/synthesis/service/src/instrument.ts +++ b/src/systems/synthesis/service/src/instrument.ts @@ -1,5 +1,5 @@ -import { setSentry } from '@lowerdeck/sentry'; -import { initTelemetry } from '@lowerdeck/telemetry'; +import { setSentry } from '@mtsrc/sentry'; +import { initTelemetry } from '@mtsrc/telemetry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/synthesis/service/src/lib/history/getHistory.ts b/src/systems/synthesis/service/src/lib/history/getHistory.ts index d483a1b54..bd2acc2bc 100644 --- a/src/systems/synthesis/service/src/lib/history/getHistory.ts +++ b/src/systems/synthesis/service/src/lib/history/getHistory.ts @@ -1,4 +1,4 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; +import { notFoundError, ServiceError } from '@mtsrc/error'; import type { AssistantConversation, AssistantMessage, diff --git a/src/systems/synthesis/service/src/lib/run/redisDeltas.ts b/src/systems/synthesis/service/src/lib/run/redisDeltas.ts index f3743346e..43f8ccd48 100644 --- a/src/systems/synthesis/service/src/lib/run/redisDeltas.ts +++ b/src/systems/synthesis/service/src/lib/run/redisDeltas.ts @@ -1,4 +1,4 @@ -import { createRedisClient } from '@lowerdeck/redis'; +import { createRedisClient } from '@mtsrc/redis'; import { db } from '../../db'; import { env } from '../../env'; import type { JsonValue, WireMessage, WireSnapshot } from '../delta'; diff --git a/src/systems/synthesis/service/src/lib/run/state.ts b/src/systems/synthesis/service/src/lib/run/state.ts index b53a16b0f..732d253db 100644 --- a/src/systems/synthesis/service/src/lib/run/state.ts +++ b/src/systems/synthesis/service/src/lib/run/state.ts @@ -1,4 +1,4 @@ -import { generatePlainId } from '@lowerdeck/id'; +import { generatePlainId } from '@mtsrc/id'; import type { SessionEvent } from '@openharness/core'; import type { ModelMessage } from 'ai'; import type { FileWriteChange, ItemStatus, Message, State, StateItem } from '../../types'; diff --git a/src/systems/synthesis/service/src/queues/generateConversationTitle.ts b/src/systems/synthesis/service/src/queues/generateConversationTitle.ts index c34657b42..10fbd03ec 100644 --- a/src/systems/synthesis/service/src/queues/generateConversationTitle.ts +++ b/src/systems/synthesis/service/src/queues/generateConversationTitle.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError, type IQueue } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError, type IQueue } from '@mtsrc/queue'; import { generateText } from 'ai'; import { titleModel } from '../definitions/models/_util'; import { db } from '../db'; diff --git a/src/systems/synthesis/service/src/queues/processRequest.ts b/src/systems/synthesis/service/src/queues/processRequest.ts index 66a4172a6..1f77f7bc8 100644 --- a/src/systems/synthesis/service/src/queues/processRequest.ts +++ b/src/systems/synthesis/service/src/queues/processRequest.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { createQueue, QueueRetryError, type IQueue } from '@lowerdeck/queue'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { createQueue, QueueRetryError, type IQueue } from '@mtsrc/queue'; import { Prisma, db, withTransaction } from '../db'; import { assistants } from '../definitions/assistants'; import { env } from '../env'; diff --git a/src/systems/synthesis/service/src/services/assistant.ts b/src/systems/synthesis/service/src/services/assistant.ts index daccd0d42..e745975f0 100644 --- a/src/systems/synthesis/service/src/services/assistant.ts +++ b/src/systems/synthesis/service/src/services/assistant.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Prisma, db } from '../db'; import type { Assistant, Tenant } from '../db'; import { assistants } from '../definitions/assistants'; diff --git a/src/systems/synthesis/service/src/services/conversation.ts b/src/systems/synthesis/service/src/services/conversation.ts index e8856dc66..b924a5a6a 100644 --- a/src/systems/synthesis/service/src/services/conversation.ts +++ b/src/systems/synthesis/service/src/services/conversation.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Prisma, db, diff --git a/src/systems/synthesis/service/src/services/message.ts b/src/systems/synthesis/service/src/services/message.ts index 4d71d8de0..01f8ee768 100644 --- a/src/systems/synthesis/service/src/services/message.ts +++ b/src/systems/synthesis/service/src/services/message.ts @@ -1,6 +1,6 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import { Prisma, db diff --git a/src/systems/synthesis/service/src/services/participant.ts b/src/systems/synthesis/service/src/services/participant.ts index 7ff0a06b3..d535265a4 100644 --- a/src/systems/synthesis/service/src/services/participant.ts +++ b/src/systems/synthesis/service/src/services/participant.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { Prisma, db } from '../db'; import type { AssistantConversation, diff --git a/src/systems/synthesis/service/src/services/request.ts b/src/systems/synthesis/service/src/services/request.ts index ec49b8c4a..5a6e9f47b 100644 --- a/src/systems/synthesis/service/src/services/request.ts +++ b/src/systems/synthesis/service/src/services/request.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { AssistantConversation, Environment, diff --git a/src/systems/synthesis/service/src/test/setup.ts b/src/systems/synthesis/service/src/test/setup.ts index cd4cb536a..4714a0187 100644 --- a/src/systems/synthesis/service/src/test/setup.ts +++ b/src/systems/synthesis/service/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/synthesis/service/src/worker.ts b/src/systems/synthesis/service/src/worker.ts index 913741d9b..569822b5d 100644 --- a/src/systems/synthesis/service/src/worker.ts +++ b/src/systems/synthesis/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { generateAssistantConversationTitleQueueProcessor } from './queues/generateConversationTitle'; import { processAssistantRequestQueueProcessor } from './queues/processRequest'; diff --git a/src/systems/synthesis/service/vitest.e2e.config.ts b/src/systems/synthesis/service/vitest.e2e.config.ts index f786cb3ea..210336dd1 100644 --- a/src/systems/synthesis/service/vitest.e2e.config.ts +++ b/src/systems/synthesis/service/vitest.e2e.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index 43fce40d6..354cac5a0 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM oven/bun:1 AS builder +FROM oven/bun:1.2 AS builder WORKDIR /app @@ -21,7 +21,7 @@ WORKDIR /app/src/systems/voyager/service CMD ["sleep", "infinity"] # Production stage -FROM oven/bun:1-alpine AS runner +FROM oven/bun:1.2-alpine AS runner WORKDIR /app diff --git a/src/systems/voyager/service/package.json b/src/systems/voyager/service/package.json index 81f65ba48..aa885d74c 100644 --- a/src/systems/voyager/service/package.json +++ b/src/systems/voyager/service/package.json @@ -23,11 +23,11 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@lowerdeck/testing-tools": "^1.0.1", "@types/bun": "latest", "@types/node": "^25.0.3", "@vercel/ncc": "^0.38.1", - "vitest": "4.0.17" + "vitest": "4.0.17", + "@mtsrc/testing-tools": "1.0.0" }, "peerDependencies": { "typescript": "^5" @@ -36,24 +36,6 @@ "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", - "@lowerdeck/api-mux": "^1.0.2", - "@lowerdeck/cache": "^1.0.1", - "@lowerdeck/canonicalize": "^1.0.4", - "@lowerdeck/cron": "^1.0.7", - "@lowerdeck/encryption": "^1.0.7", - "@lowerdeck/env": "^1.0.4", - "@lowerdeck/error": "^1.1.0", - "@lowerdeck/hash": "^1.0.4", - "@lowerdeck/id": "^1.0.6", - "@lowerdeck/once": "^1.0.4", - "@lowerdeck/pagination": "^1.0.5", - "@lowerdeck/queue": "^1.0.7", - "@lowerdeck/rpc-client": "^1.1.0", - "@lowerdeck/rpc-server": "^1.0.7", - "@lowerdeck/sentry": "^1.0.2", - "@lowerdeck/service": "^1.0.3", - "@lowerdeck/slugify": "^1.0.5", - "@lowerdeck/validation": "^1.0.4", "@metorial-services/forge-client": "^1.0.3", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", @@ -72,6 +54,24 @@ "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "snowflake-uuid": "^1.0.0", - "yaml": "^2.8.2" + "yaml": "^2.8.2", + "@mtsrc/api-mux": "1.0.0", + "@mtsrc/cache": "1.0.0", + "@mtsrc/canonicalize": "1.0.0", + "@mtsrc/cron": "1.0.0", + "@mtsrc/encryption": "1.0.0", + "@mtsrc/env": "1.0.0", + "@mtsrc/error": "1.0.0", + "@mtsrc/hash": "1.0.0", + "@mtsrc/id": "1.0.0", + "@mtsrc/once": "1.0.0", + "@mtsrc/pagination": "1.0.0", + "@mtsrc/queue": "1.0.0", + "@mtsrc/rpc-client": "1.0.0", + "@mtsrc/rpc-server": "1.0.0", + "@mtsrc/sentry": "1.0.0", + "@mtsrc/service": "1.0.0", + "@mtsrc/slugify": "1.0.0", + "@mtsrc/validation": "1.0.0" } } diff --git a/src/systems/voyager/service/src/controllers/_app.ts b/src/systems/voyager/service/src/controllers/_app.ts index 5cc51480b..1fcd8ce89 100644 --- a/src/systems/voyager/service/src/controllers/_app.ts +++ b/src/systems/voyager/service/src/controllers/_app.ts @@ -1,3 +1,3 @@ -import { Group } from '@lowerdeck/rpc-server'; +import { Group } from '@mtsrc/rpc-server'; export let app = new Group(); diff --git a/src/systems/voyager/service/src/controllers/_index.ts b/src/systems/voyager/service/src/controllers/_index.ts index f2fc93f25..54da1313a 100644 --- a/src/systems/voyager/service/src/controllers/_index.ts +++ b/src/systems/voyager/service/src/controllers/_index.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { indexPresenter } from '../presenters'; import { indexService } from '../services'; import { app } from './_app'; diff --git a/src/systems/voyager/service/src/controllers/index.ts b/src/systems/voyager/service/src/controllers/index.ts index ea9ceb56f..7c4baaf3b 100644 --- a/src/systems/voyager/service/src/controllers/index.ts +++ b/src/systems/voyager/service/src/controllers/index.ts @@ -1,5 +1,5 @@ -import { apiMux } from '@lowerdeck/api-mux'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; +import { apiMux } from '@mtsrc/api-mux'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; import { app } from './_app'; import { indexController } from './_index'; import { recordController } from './record'; diff --git a/src/systems/voyager/service/src/controllers/record.ts b/src/systems/voyager/service/src/controllers/record.ts index cb01720a1..243fb5da8 100644 --- a/src/systems/voyager/service/src/controllers/record.ts +++ b/src/systems/voyager/service/src/controllers/record.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { recordPresenter } from '../presenters'; import { recordService, tenantService } from '../services'; import { app } from './_app'; diff --git a/src/systems/voyager/service/src/controllers/source.ts b/src/systems/voyager/service/src/controllers/source.ts index cf6cc8465..d1ebd6579 100644 --- a/src/systems/voyager/service/src/controllers/source.ts +++ b/src/systems/voyager/service/src/controllers/source.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { sourcePresenter } from '../presenters'; import { sourceService } from '../services'; import { app } from './_app'; diff --git a/src/systems/voyager/service/src/controllers/tenant.ts b/src/systems/voyager/service/src/controllers/tenant.ts index 0d150fcee..472579b26 100644 --- a/src/systems/voyager/service/src/controllers/tenant.ts +++ b/src/systems/voyager/service/src/controllers/tenant.ts @@ -1,4 +1,4 @@ -import { v } from '@lowerdeck/validation'; +import { v } from '@mtsrc/validation'; import { tenantPresenter } from '../presenters'; import { tenantService } from '../services'; import { app } from './_app'; diff --git a/src/systems/voyager/service/src/env.ts b/src/systems/voyager/service/src/env.ts index 3ad24fcf4..18b0992c8 100644 --- a/src/systems/voyager/service/src/env.ts +++ b/src/systems/voyager/service/src/env.ts @@ -1,5 +1,5 @@ -import { createValidatedEnv } from '@lowerdeck/env'; -import { v } from '@lowerdeck/validation'; +import { createValidatedEnv } from '@mtsrc/env'; +import { v } from '@mtsrc/validation'; export let env = createValidatedEnv({ service: { diff --git a/src/systems/voyager/service/src/id.ts b/src/systems/voyager/service/src/id.ts index 578eb61bd..2614ae2dd 100644 --- a/src/systems/voyager/service/src/id.ts +++ b/src/systems/voyager/service/src/id.ts @@ -1,4 +1,4 @@ -import { createIdGenerator, idType } from '@lowerdeck/id'; +import { createIdGenerator, idType } from '@mtsrc/id'; import { Worker as SnowflakeId } from 'snowflake-uuid'; export let ID = createIdGenerator({ diff --git a/src/systems/voyager/service/src/instrument.ts b/src/systems/voyager/service/src/instrument.ts index a306a2ccf..a7a9c17d3 100644 --- a/src/systems/voyager/service/src/instrument.ts +++ b/src/systems/voyager/service/src/instrument.ts @@ -1,4 +1,4 @@ -import { setSentry } from '@lowerdeck/sentry'; +import { setSentry } from '@mtsrc/sentry'; import * as Sentry from '@sentry/bun'; declare global { diff --git a/src/systems/voyager/service/src/queues/cleanup.ts b/src/systems/voyager/service/src/queues/cleanup.ts index 9b615eb09..e727847ee 100644 --- a/src/systems/voyager/service/src/queues/cleanup.ts +++ b/src/systems/voyager/service/src/queues/cleanup.ts @@ -1,4 +1,4 @@ -import { createCron } from '@lowerdeck/cron'; +import { createCron } from '@mtsrc/cron'; import { subDays } from 'date-fns'; import { env } from '../env'; diff --git a/src/systems/voyager/service/src/queues/record.ts b/src/systems/voyager/service/src/queues/record.ts index 5546b7107..068bfd4e0 100644 --- a/src/systems/voyager/service/src/queues/record.ts +++ b/src/systems/voyager/service/src/queues/record.ts @@ -1,4 +1,4 @@ -import { createQueue, QueueRetryError } from '@lowerdeck/queue'; +import { createQueue, QueueRetryError } from '@mtsrc/queue'; import { defaultBackend } from '../backends'; import { db } from '../db'; import { env } from '../env'; diff --git a/src/systems/voyager/service/src/services/index_.ts b/src/systems/voyager/service/src/services/index_.ts index c608e9603..d04784118 100644 --- a/src/systems/voyager/service/src/services/index_.ts +++ b/src/systems/voyager/service/src/services/index_.ts @@ -1,6 +1,6 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import type { Source } from '../../prisma/generated/client'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/voyager/service/src/services/record.ts b/src/systems/voyager/service/src/services/record.ts index ceb269c3f..823329977 100644 --- a/src/systems/voyager/service/src/services/record.ts +++ b/src/systems/voyager/service/src/services/record.ts @@ -1,8 +1,8 @@ -import { canonicalize } from '@lowerdeck/canonicalize'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Hash } from '@lowerdeck/hash'; -import { Paginator } from '@lowerdeck/pagination'; -import { Service } from '@lowerdeck/service'; +import { canonicalize } from '@mtsrc/canonicalize'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Hash } from '@mtsrc/hash'; +import { Paginator } from '@mtsrc/pagination'; +import { Service } from '@mtsrc/service'; import type { Index, Tenant } from '../../prisma/generated/client'; import { defaultBackend } from '../backends'; import { db } from '../db'; diff --git a/src/systems/voyager/service/src/services/source.ts b/src/systems/voyager/service/src/services/source.ts index 25c4f028c..8c493db31 100644 --- a/src/systems/voyager/service/src/services/source.ts +++ b/src/systems/voyager/service/src/services/source.ts @@ -1,6 +1,6 @@ -import { createLocallyCachedFunction } from '@lowerdeck/cache'; -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { createLocallyCachedFunction } from '@mtsrc/cache'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/voyager/service/src/services/tenant.ts b/src/systems/voyager/service/src/services/tenant.ts index 69c749a77..94ad379ea 100644 --- a/src/systems/voyager/service/src/services/tenant.ts +++ b/src/systems/voyager/service/src/services/tenant.ts @@ -1,5 +1,5 @@ -import { notFoundError, ServiceError } from '@lowerdeck/error'; -import { Service } from '@lowerdeck/service'; +import { notFoundError, ServiceError } from '@mtsrc/error'; +import { Service } from '@mtsrc/service'; import { db } from '../db'; import { ID, snowflake } from '../id'; diff --git a/src/systems/voyager/service/src/test/client.ts b/src/systems/voyager/service/src/test/client.ts index ae49bd282..fe50f05b8 100644 --- a/src/systems/voyager/service/src/test/client.ts +++ b/src/systems/voyager/service/src/test/client.ts @@ -1,6 +1,6 @@ -import { createClient } from '@lowerdeck/rpc-client'; -import { createServer, rpcMux, type InferClient } from '@lowerdeck/rpc-server'; -import { createFetchRouter } from '@lowerdeck/testing-tools'; +import { createClient } from '@mtsrc/rpc-client'; +import { createServer, rpcMux, type InferClient } from '@mtsrc/rpc-server'; +import { createFetchRouter } from '@mtsrc/testing-tools'; import { app } from '../controllers/_app'; import { tenantController } from '../controllers/tenant'; diff --git a/src/systems/voyager/service/src/test/setup.ts b/src/systems/voyager/service/src/test/setup.ts index 7d65dafa8..fb2cebdc4 100644 --- a/src/systems/voyager/service/src/test/setup.ts +++ b/src/systems/voyager/service/src/test/setup.ts @@ -1,7 +1,7 @@ import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../prisma/generated/client'; import { afterAll } from 'vitest'; -import { setupPrismaTestDb, setupTestGlobals } from '@lowerdeck/testing-tools'; +import { setupPrismaTestDb, setupTestGlobals } from '@mtsrc/testing-tools'; setupTestGlobals({ nodeEnv: 'test' }); diff --git a/src/systems/voyager/service/src/worker.ts b/src/systems/voyager/service/src/worker.ts index f33c51d6a..7e4f5d901 100644 --- a/src/systems/voyager/service/src/worker.ts +++ b/src/systems/voyager/service/src/worker.ts @@ -1,4 +1,4 @@ -import { runQueueProcessors } from '@lowerdeck/queue'; +import { runQueueProcessors } from '@mtsrc/queue'; import { cleanupProcessor } from './queues/cleanup'; import { deleteRecordQueueProcessor, indexRecordQueueProcessor } from './queues/record'; diff --git a/src/systems/voyager/service/vitest.e2e.config.ts b/src/systems/voyager/service/vitest.e2e.config.ts index 4e74c38dd..28f43cb8e 100644 --- a/src/systems/voyager/service/vitest.e2e.config.ts +++ b/src/systems/voyager/service/vitest.e2e.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config'; -import { createVitestConfig, loadTestEnv } from '@lowerdeck/testing-tools'; +import { createVitestConfig, loadTestEnv } from '@mtsrc/testing-tools'; export default defineConfig(({ mode }) => { let env = loadTestEnv(mode || 'test', process.cwd(), ''); From 8174fe59f96f89f9ee20d69ff662d414072422c4 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sat, 23 May 2026 17:17:05 +0200 Subject: [PATCH 16/69] fixes --- src/systems/slates/apps/hub/control.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml index ee23c1f0f..96cd5ac31 100644 --- a/src/systems/slates/apps/hub/control.toml +++ b/src/systems/slates/apps/hub/control.toml @@ -11,7 +11,7 @@ command = "bun run test:unit" [test.e2e] command = "bun run test:e2e" -setup = ["bun prisma generate --schema prisma/schema", "bun prisma db push --accept-data-loss --schema prisma/schema"] +setup = ["bun prisma generate", "bun prisma db push --accept-data-loss --schema prisma/schema"] cwd = "/app/src/systems/slates/apps/hub" runner = "service" From ad1feeb98a1844ef65437878f4b2d217c284bf4b Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sat, 23 May 2026 17:19:21 +0200 Subject: [PATCH 17/69] sync --- clients/metorial-go | 2 +- clients/metorial-node | 2 +- clients/metorial-python | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/clients/metorial-go b/clients/metorial-go index ff844f59b..a69ea2172 160000 --- a/clients/metorial-go +++ b/clients/metorial-go @@ -1 +1 @@ -Subproject commit ff844f59b98e536de79b91d41706dd8fff20fca8 +Subproject commit a69ea21720634ed37753adc60489c6d30a6a4b6a diff --git a/clients/metorial-node b/clients/metorial-node index d77f5c8dc..131dc4647 160000 --- a/clients/metorial-node +++ b/clients/metorial-node @@ -1 +1 @@ -Subproject commit d77f5c8dc2f4b9f217370e912a36919b256d9955 +Subproject commit 131dc464764203dae2ba29188e194e5b1930114b diff --git a/clients/metorial-python b/clients/metorial-python index 49f7bbe93..a0b8e0c79 160000 --- a/clients/metorial-python +++ b/clients/metorial-python @@ -1 +1 @@ -Subproject commit 49f7bbe93998410f87a897eca298e934488d0b77 +Subproject commit a0b8e0c797cefb995d957523f74563aaeef3a259 From 9d0f4688ccc19e1acb62026d0aeaf99ebd2e1101 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 10:27:47 +0200 Subject: [PATCH 18/69] wip --- .gitignore | 2 +- bun.lock | 437 +++++++++++------- deployment/dockerfiles/api.Dockerfile | 7 +- nx.json | 115 +++++ package.json | 20 +- scripts/dev-tools/scripts/build-packages.sh | 11 +- scripts/dev-tools/scripts/cleanup.sh | 6 +- src/systems/_clients/ares/package.json | 1 + src/systems/_clients/cargo/package.json | 1 + src/systems/_clients/forge/package.json | 3 +- .../_clients/function-bay/package.json | 1 + .../_clients/object-storage/src/index.ts | 23 +- .../_clients/origin-client/package.json | 1 + src/systems/_clients/relay/package.json | 1 + src/systems/_clients/shuttle/package.json | 3 +- src/systems/_clients/signal/package.json | 1 + src/systems/_clients/slates/package.json | 3 +- src/systems/_clients/subspace/package.json | 3 +- src/systems/_clients/synthesis/package.json | 1 + src/systems/_clients/voyager/package.json | 1 + src/systems/ares/service/Dockerfile | 73 ++- src/systems/ares/service/Dockerfile.generated | 34 ++ src/systems/ares/service/control.toml | 40 +- .../cargo/scripts/prepare-docker-build.sh | 12 - src/systems/cargo/service/Dockerfile | 60 +-- .../cargo/service/Dockerfile.generated | 28 ++ src/systems/cargo/service/control.toml | 32 +- .../forge/scripts/prepare-docker-build.sh | 8 - src/systems/forge/service/Dockerfile | 59 +-- .../forge/service/Dockerfile.generated | 27 ++ src/systems/forge/service/control.toml | 32 +- .../deflector/Dockerfile.generated | 23 + .../function-bay/deflector/control.toml | 35 ++ .../scripts/prepare-docker-build.sh | 16 - src/systems/function-bay/service/Dockerfile | 58 +-- .../function-bay/service/Dockerfile.generated | 27 ++ src/systems/function-bay/service/control.toml | 32 +- .../service/Dockerfile.generated | 35 ++ .../object-storage/service/control.toml | 46 ++ .../apps/code-bucket/Dockerfile.generated | 37 ++ .../origin/apps/code-bucket/control.toml | 57 +++ src/systems/origin/apps/service/Dockerfile | 55 +-- .../origin/apps/service/Dockerfile.generated | 28 ++ src/systems/origin/apps/service/control.toml | 32 +- src/systems/origin/apps/service/package.json | 1 + .../origin/scripts/prepare-docker-build.sh | 9 - .../relay/scripts/prepare-docker-build.sh | 8 - src/systems/relay/service/Dockerfile | 51 +- .../relay/service/Dockerfile.generated | 27 ++ src/systems/relay/service/control.toml | 32 +- .../scripts/build-workspace-clients.sh | 14 - .../shuttle/scripts/prepare-docker-build.sh | 17 - src/systems/shuttle/sdk/package.json | 8 +- src/systems/shuttle/service/Dockerfile | 58 +-- .../shuttle/service/Dockerfile.generated | 28 ++ src/systems/shuttle/service/control.toml | 32 +- .../signal/scripts/prepare-docker-build.sh | 10 - src/systems/signal/service/Dockerfile | 58 +-- .../signal/service/Dockerfile.generated | 27 ++ src/systems/signal/service/control.toml | 32 +- src/systems/slates/apps/hub/Dockerfile | 62 +-- .../slates/apps/hub/Dockerfile.generated | 30 ++ src/systems/slates/apps/hub/control.toml | 38 +- src/systems/slates/apps/registry/Dockerfile | 64 +-- .../slates/apps/registry/Dockerfile.generated | 30 ++ src/systems/slates/apps/registry/control.toml | 38 +- .../slates/scripts/prepare-docker-build.sh | 22 - .../subspace/apps/controller/Dockerfile | 73 +-- .../apps/controller/Dockerfile.generated | 26 ++ .../subspace/apps/controller/control.toml | 31 +- src/systems/subspace/apps/public/Dockerfile | 84 +--- .../subspace/apps/public/Dockerfile.generated | 29 ++ src/systems/subspace/apps/public/control.toml | 40 +- src/systems/subspace/apps/public/package.json | 4 +- src/systems/subspace/apps/worker/Dockerfile | 72 +-- .../subspace/apps/worker/Dockerfile.generated | 25 + src/systems/subspace/apps/worker/control.toml | 30 +- .../subspace/scripts/prepare-docker-build.sh | 30 -- src/systems/synthesis/service/Dockerfile | 59 +-- .../synthesis/service/Dockerfile.generated | 27 ++ src/systems/synthesis/service/control.toml | 32 +- .../voyager/scripts/prepare-docker-build.sh | 8 - src/systems/voyager/service/Dockerfile | 51 +- .../voyager/service/Dockerfile.generated | 27 ++ src/systems/voyager/service/control.toml | 32 +- src/tooling/control/package.json | 2 +- src/tooling/control/src/bootstrap.ts | 188 ++++++++ src/tooling/control/src/builders/base.ts | 207 +++++++++ .../control/src/builders/builders.test.ts | 190 ++++++++ src/tooling/control/src/builders/context.ts | 185 ++++++++ src/tooling/control/src/builders/go.ts | 97 ++++ src/tooling/control/src/builders/index.ts | 70 +++ src/tooling/control/src/builders/node.ts | 251 ++++++++++ src/tooling/control/src/builders/nx.ts | 161 +++++++ src/tooling/control/src/builders/pathing.ts | 211 +++++++++ src/tooling/control/src/builders/rust.ts | 108 +++++ src/tooling/control/src/cli.ts | 27 +- src/tooling/control/src/compose/builds.ts | 27 +- src/tooling/control/src/discovery.ts | 2 +- src/tooling/control/src/run/build.ts | 27 +- src/tooling/control/src/staging/copyTree.ts | 72 +++ src/tooling/control/src/types.ts | 127 +++++ turbo.json | 120 ----- 103 files changed, 3818 insertions(+), 1157 deletions(-) create mode 100644 nx.json create mode 100644 src/systems/ares/service/Dockerfile.generated delete mode 100755 src/systems/cargo/scripts/prepare-docker-build.sh create mode 100644 src/systems/cargo/service/Dockerfile.generated delete mode 100755 src/systems/forge/scripts/prepare-docker-build.sh create mode 100644 src/systems/forge/service/Dockerfile.generated create mode 100644 src/systems/function-bay/deflector/Dockerfile.generated delete mode 100644 src/systems/function-bay/scripts/prepare-docker-build.sh create mode 100644 src/systems/function-bay/service/Dockerfile.generated create mode 100644 src/systems/object-storage/service/Dockerfile.generated create mode 100644 src/systems/origin/apps/code-bucket/Dockerfile.generated create mode 100644 src/systems/origin/apps/service/Dockerfile.generated delete mode 100755 src/systems/origin/scripts/prepare-docker-build.sh delete mode 100755 src/systems/relay/scripts/prepare-docker-build.sh create mode 100644 src/systems/relay/service/Dockerfile.generated delete mode 100755 src/systems/scripts/build-workspace-clients.sh delete mode 100644 src/systems/shuttle/scripts/prepare-docker-build.sh create mode 100644 src/systems/shuttle/service/Dockerfile.generated delete mode 100644 src/systems/signal/scripts/prepare-docker-build.sh create mode 100644 src/systems/signal/service/Dockerfile.generated create mode 100644 src/systems/slates/apps/hub/Dockerfile.generated create mode 100644 src/systems/slates/apps/registry/Dockerfile.generated delete mode 100644 src/systems/slates/scripts/prepare-docker-build.sh create mode 100644 src/systems/subspace/apps/controller/Dockerfile.generated create mode 100644 src/systems/subspace/apps/public/Dockerfile.generated create mode 100644 src/systems/subspace/apps/worker/Dockerfile.generated delete mode 100644 src/systems/subspace/scripts/prepare-docker-build.sh create mode 100644 src/systems/synthesis/service/Dockerfile.generated delete mode 100755 src/systems/voyager/scripts/prepare-docker-build.sh create mode 100644 src/systems/voyager/service/Dockerfile.generated create mode 100644 src/tooling/control/src/bootstrap.ts create mode 100644 src/tooling/control/src/builders/base.ts create mode 100644 src/tooling/control/src/builders/builders.test.ts create mode 100644 src/tooling/control/src/builders/context.ts create mode 100644 src/tooling/control/src/builders/go.ts create mode 100644 src/tooling/control/src/builders/index.ts create mode 100644 src/tooling/control/src/builders/node.ts create mode 100644 src/tooling/control/src/builders/nx.ts create mode 100644 src/tooling/control/src/builders/pathing.ts create mode 100644 src/tooling/control/src/builders/rust.ts delete mode 100644 turbo.json diff --git a/.gitignore b/.gitignore index f4ffb858a..29082a220 100644 --- a/.gitignore +++ b/.gitignore @@ -135,7 +135,7 @@ dist .yarn/install-state.gz .pnp.* -.turbo +.nx generated out diff --git a/bun.lock b/bun.lock index 0c747b5d5..8eba7f646 100644 --- a/bun.lock +++ b/bun.lock @@ -8,8 +8,8 @@ "ts-proto": "^2.7.5", }, "devDependencies": { + "nx": "^22.7.3", "prettier": "^3.5.3", - "turbo": "^2.5.4", "typescript": "5.8.2", }, }, @@ -2189,6 +2189,7 @@ "@mtsrc/rpc-client": "1.0.0", }, "devDependencies": { + "@metorial/ares": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", @@ -2202,6 +2203,7 @@ "@types/bun": "^1.3.7", }, "devDependencies": { + "@metorial-cargo/service": "workspace:*", "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", @@ -2218,6 +2220,7 @@ "@types/bun": "^1.3.7", }, "devDependencies": { + "@metorial/forge": "workspace:*", "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", @@ -2231,6 +2234,7 @@ "@mtsrc/rpc-client": "1.0.0", }, "devDependencies": { + "@metorial/function-bay": "workspace:*", "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", @@ -2257,6 +2261,7 @@ "@mtsrc/rpc-client": "1.0.0", }, "devDependencies": { + "@metorial/origin": "workspace:*", "@types/node": "^25.0.3", "dts-bundle-generator": "^9.5.1", "microbundle": "^0.15.1", @@ -2273,6 +2278,7 @@ "react": "^19.2.4", }, "devDependencies": { + "@metorial/relay": "workspace:*", "@types/react": "^19.0.0", "tsup": "^8.5.1", "typescript": "^5.8.3", @@ -2289,6 +2295,7 @@ "@types/bun": "^1.3.7", }, "devDependencies": { + "@metorial/shuttle": "workspace:*", "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", @@ -2303,6 +2310,7 @@ "@mtsrc/validation": "1.0.0", }, "devDependencies": { + "@metorial/signal": "workspace:*", "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", @@ -2318,6 +2326,7 @@ "@mtsrc/validation": "1.0.0", }, "devDependencies": { + "@metorial/slates": "workspace:*", "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", @@ -2332,6 +2341,7 @@ "@mtsrc/validation": "1.0.0", }, "devDependencies": { + "@metorial-subspace/app-controller": "workspace:*", "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", @@ -2345,6 +2355,7 @@ "@mtsrc/rpc-client": "1.0.0", }, "devDependencies": { + "@metorial/synthesis": "workspace:*", "@types/minimatch": "^5", "tsup": "^8.5.1", "typescript": "^5.8.3", @@ -2358,6 +2369,7 @@ "@mtsrc/rpc-client": "1.0.0", }, "devDependencies": { + "@metorial/voyager": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", @@ -2909,6 +2921,7 @@ "@gitbeaker/rest": "^43.8.0", "@grpc/grpc-js": "^1.13.4", "@metorial-platform-systems/object-storage-client": "workspace:*", + "@metorial/code-bucket-service-generated": "workspace:*", "@mtsrc/api-mux": "1.0.0", "@mtsrc/cache": "1.0.0", "@mtsrc/canonicalize": "1.0.0", @@ -3020,8 +3033,8 @@ "npm-run-all": "^4.1.5", }, "devDependencies": { + "nx": "^22.7.3", "prettier": "^3.5.3", - "turbo": "^2.5.5", "typescript": "5.8.2", }, }, @@ -4819,6 +4832,12 @@ "@electric-sql/pglite-tools": ["@electric-sql/pglite-tools@0.2.20", "", { "peerDependencies": { "@electric-sql/pglite": "0.3.15" } }, "sha512-BK50ZnYa3IG7ztXhtgYf0Q7zijV32Iw1cYS8C+ThdQlwx12V5VZ9KRJ42y82Hyb4PkTxZQklVQA9JHyUlex33A=="], + "@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.4.5", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g=="], + "@emotion/is-prop-valid": ["@emotion/is-prop-valid@1.4.0", "", { "dependencies": { "@emotion/memoize": "^0.9.0" } }, "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw=="], "@emotion/memoize": ["@emotion/memoize@0.9.0", "", {}, "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="], @@ -4989,6 +5008,8 @@ "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], + "@jest/diff-sequences": ["@jest/diff-sequences@30.0.1", "", {}, "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw=="], + "@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], "@jitl/quickjs-ffi-types": ["@jitl/quickjs-ffi-types@0.32.0", "", {}, "sha512-v9T+GQpmk43VDJ7d72sf0Nexhk+ArvtUihW27dy7lqAl0zBObFKtSBBIm5RBjwIhE8VwsPPm9PNuvPvNqLWUEg=="], @@ -5547,6 +5568,8 @@ "@napi-rs/canvas-win32-x64-msvc": ["@napi-rs/canvas-win32-x64-msvc@0.1.100", "", { "os": "win32", "cpu": "x64" }, "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.4", "", { "dependencies": { "@emnapi/core": "^1.1.0", "@emnapi/runtime": "^1.1.0", "@tybys/wasm-util": "^0.9.0" } }, "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ=="], + "@nodable/entities": ["@nodable/entities@2.1.0", "", {}, "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], @@ -5559,6 +5582,26 @@ "@npmcli/move-file": ["@npmcli/move-file@1.1.2", "", { "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" } }, "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg=="], + "@nx/nx-darwin-arm64": ["@nx/nx-darwin-arm64@22.7.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5GEI/SvllYb6j5/viZYLrVKI9Nvmk8wzMs3xDO9BULqy/bt/o1ftKh2vRCXNKw5yyvA7eU+1vTf+JN6FzX7DDQ=="], + + "@nx/nx-darwin-x64": ["@nx/nx-darwin-x64@22.7.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-fzXuPD2CapFsTI5062HUR9PuVDZqmHt8SpxAjWI0c0YdhAcvZDT+6eXBjVg9r0+ibtUbWgKbjz2kUrmsAw4U1A=="], + + "@nx/nx-freebsd-x64": ["@nx/nx-freebsd-x64@22.7.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Yp5IAK0kH1MF0q2m1rYfQQILprhg6CKqPJZbY6bxYTyZwaqn+nQv9UEqeBZPe3BeXxZKsH+JW/VBdMmiIrZcUQ=="], + + "@nx/nx-linux-arm-gnueabihf": ["@nx/nx-linux-arm-gnueabihf@22.7.3", "", { "os": "linux", "cpu": "arm" }, "sha512-Kn4pLdTe4uS5qizm+7Mg/pwBae+Cnq/Nw9AZwNkn6+EGDWKH/Xc6bZPgmS1Puwuk/SnKPtWoTCRzpAo1Jh8m6g=="], + + "@nx/nx-linux-arm64-gnu": ["@nx/nx-linux-arm64-gnu@22.7.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-xjv7BQMFHod1vE/vaeJzC9mrkbk629tsu1svuf57ZeT8DkpIql9ePqHmwve8S1M13eWiGF5aZ92uYDEywpIZsg=="], + + "@nx/nx-linux-arm64-musl": ["@nx/nx-linux-arm64-musl@22.7.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-/+jx2YelCOUfg6AeGYIYXgfVa+BRU6LrkyMBTYXafWZZFBYwvHLEiUrj4bK4MHRAkByiNsWoJVaiF5nwt4ZUww=="], + + "@nx/nx-linux-x64-gnu": ["@nx/nx-linux-x64-gnu@22.7.3", "", { "os": "linux", "cpu": "x64" }, "sha512-RW7Of/ov9jnunWXMyHFybuPYN9KDkcR/fGlNsB7AD3DfW9LUGa1GdFhlcxN4xImgPMhQfp3r66Jn48zRt7RK2w=="], + + "@nx/nx-linux-x64-musl": ["@nx/nx-linux-x64-musl@22.7.3", "", { "os": "linux", "cpu": "x64" }, "sha512-FWT8RmM8Ey5FSM3uz4Ef4oogC+QPPvKKzLCQbfyAGqyzPjCkDcv7ldNbIhEp7iiNTzrkMjdO4PmrK+NT1oi8Wg=="], + + "@nx/nx-win32-arm64-msvc": ["@nx/nx-win32-arm64-msvc@22.7.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-3Ij9S6K9v3sZkb64gcOhLlUA2X3M49uR1+e2+ay7nC5LaPXnvXHcubNJkU2X3ge8VpH1gykG+y8eL5xHObICwQ=="], + + "@nx/nx-win32-x64-msvc": ["@nx/nx-win32-x64-msvc@22.7.3", "", { "os": "win32", "cpu": "x64" }, "sha512-OHksmAmH924HBLQkO9T1GCWp17G8XyVguJgV47KxpvN4etqw7pbRuNYurhs/KQjwmrG6uDPCa7kaX6aM8V+BaA=="], + "@octokit/auth-app": ["@octokit/auth-app@8.2.0", "", { "dependencies": { "@octokit/auth-oauth-app": "^9.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "toad-cache": "^3.7.0", "universal-github-app-jwt": "^2.2.0", "universal-user-agent": "^7.0.0" } }, "sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g=="], "@octokit/auth-oauth-app": ["@octokit/auth-oauth-app@9.0.3", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg=="], @@ -6253,6 +6296,8 @@ "@tootallnate/once": ["@tootallnate/once@1.1.2", "", {}, "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="], + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], @@ -6521,8 +6566,12 @@ "@xobotyi/scrollbar-width": ["@xobotyi/scrollbar-width@1.9.5", "", {}, "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ=="], + "@yarnpkg/lockfile": ["@yarnpkg/lockfile@1.1.0", "", {}, "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="], + "@yr/monotone-cubic-spline": ["@yr/monotone-cubic-spline@1.0.3", "", {}, "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA=="], + "@zkochan/js-yaml": ["@zkochan/js-yaml@0.0.7", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ=="], + "abbrev": ["abbrev@3.0.1", "", {}, "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg=="], "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], @@ -6555,9 +6604,11 @@ "anser": ["anser@2.3.5", "", {}, "sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ=="], - "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], - "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "ansi-to-react": ["ansi-to-react@6.2.6", "", { "dependencies": { "anser": "^2.3.2", "escape-carriage": "^1.3.1", "linkify-it": "^3.0.3" }, "peerDependencies": { "react": "^16.3.2 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.3.2 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Eqi0iaMK5OZ3jsVFxWvU2B74UZBnGuHlkflKMX6wTOeH+luy9KE2O0gUkc2PxhIP1R4IO0xohv62UMFInQOSeg=="], @@ -6609,7 +6660,7 @@ "aws-ssl-profiles": ["aws-ssl-profiles@1.1.2", "", {}, "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g=="], - "axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], + "axios": ["axios@1.16.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "proxy-from-env": "^2.1.0" } }, "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w=="], "axios-mock-adapter": ["axios-mock-adapter@1.22.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "is-buffer": "^2.0.5" }, "peerDependencies": { "axios": ">= 0.17.0" } }, "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw=="], @@ -6631,7 +6682,7 @@ "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], - "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], "bare-events": ["bare-events@2.8.2", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ=="], @@ -6659,7 +6710,7 @@ "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], - "bl": ["bl@6.1.6", "", { "dependencies": { "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", "inherits": "^2.0.4", "readable-stream": "^4.2.0" } }, "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg=="], + "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], @@ -6669,7 +6720,7 @@ "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], - "brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -6681,7 +6732,7 @@ "bson": ["bson@6.10.4", "", {}, "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng=="], - "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], @@ -6731,7 +6782,7 @@ "chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], - "chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], @@ -6759,23 +6810,25 @@ "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], - "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], + "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], - "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + "cli-spinners": ["cli-spinners@2.6.1", "", {}, "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g=="], "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], "codemirror": ["codemirror@6.0.2", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/lint": "^6.0.0", "@codemirror/search": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0" } }, "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw=="], - "color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - "color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], "color-support": ["color-support@1.1.3", "", { "bin": { "color-support": "bin.js" } }, "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="], @@ -6969,6 +7022,8 @@ "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], + "defaults": ["defaults@1.0.4", "", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="], + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], @@ -7017,7 +7072,7 @@ "dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], - "dotenv-expand": ["dotenv-expand@8.0.3", "", {}, "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg=="], + "dotenv-expand": ["dotenv-expand@12.0.3", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA=="], "dprint-node": ["dprint-node@1.0.8", "", { "dependencies": { "detect-libc": "^1.0.3" } }, "sha512-iVKnUtYfGrYcW1ZAlfR/F59cUVL8QIhWoBJoSjkkdua/dkWIgjZfiLMeTjiB06X0ZLkQ0M2C1VbUj/CxkIf1zg=="], @@ -7039,7 +7094,7 @@ "effect": ["effect@3.18.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA=="], - "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + "ejs": ["ejs@5.0.1", "", { "bin": { "ejs": "bin/cli.js" } }, "sha512-COqBPFMxuPTPspXl2DkVYaDS3HtrD1GpzOGkNTJ1IYkifq/r9h8SVEFrjA3D9/VJGOEoMQcrlhpntcSUrM8k6A=="], "electron-to-chromium": ["electron-to-chromium@1.5.307", "", {}, "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg=="], @@ -7055,6 +7110,8 @@ "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], + "enquirer": ["enquirer@2.3.6", "", { "dependencies": { "ansi-colors": "^4.1.1" } }, "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg=="], + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], @@ -7097,7 +7154,7 @@ "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + "escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], "eslint": ["eslint@9.39.3", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.3", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg=="], @@ -7183,7 +7240,7 @@ "fflate": ["fflate@0.8.2", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="], - "figures": ["figures@1.7.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" } }, "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ=="], + "figures": ["figures@3.2.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg=="], "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], @@ -7213,7 +7270,7 @@ "flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="], - "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], @@ -7529,7 +7586,7 @@ "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], - "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], + "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="], @@ -7567,7 +7624,7 @@ "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], - "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], @@ -7637,6 +7694,8 @@ "jsonata": ["jsonata@2.1.0", "", {}, "sha512-OCzaRMK8HobtX8fp37uIVmL8CY1IGc/a6gLsDqz3quExFR09/U78HUzWYr7T31UEB6+Eu0/8dkVD5fFDOl9a8w=="], + "jsonc-parser": ["jsonc-parser@3.2.0", "", {}, "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="], + "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], "jsonwebtoken": ["jsonwebtoken@9.0.3", "", { "dependencies": { "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g=="], @@ -7695,7 +7754,7 @@ "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], - "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "lines-and-columns": ["lines-and-columns@2.0.3", "", {}, "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w=="], "linkify-it": ["linkify-it@3.0.3", "", { "dependencies": { "uc.micro": "^1.0.1" } }, "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ=="], @@ -7905,9 +7964,9 @@ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], @@ -7915,7 +7974,7 @@ "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], - "minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -8057,6 +8116,8 @@ "number-is-nan": ["number-is-nan@1.0.1", "", {}, "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="], + "nx": ["nx@22.7.3", "", { "dependencies": { "@emnapi/core": "1.4.5", "@emnapi/runtime": "1.4.5", "@emnapi/wasi-threads": "1.0.4", "@jest/diff-sequences": "30.0.1", "@napi-rs/wasm-runtime": "0.2.4", "@tybys/wasm-util": "0.9.0", "@yarnpkg/lockfile": "1.1.0", "@zkochan/js-yaml": "0.0.7", "ansi-colors": "4.1.3", "ansi-regex": "5.0.1", "ansi-styles": "4.3.0", "argparse": "2.0.1", "asynckit": "0.4.0", "axios": "1.16.0", "balanced-match": "4.0.3", "base64-js": "1.5.1", "bl": "4.1.0", "brace-expansion": "5.0.5", "buffer": "5.7.1", "call-bind-apply-helpers": "1.0.2", "chalk": "4.1.2", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "8.0.1", "clone": "1.0.4", "color-convert": "2.0.1", "color-name": "1.1.4", "combined-stream": "1.0.8", "defaults": "1.0.4", "define-lazy-prop": "2.0.0", "delayed-stream": "1.0.0", "dotenv": "16.4.7", "dotenv-expand": "12.0.3", "dunder-proto": "1.0.1", "ejs": "5.0.1", "emoji-regex": "8.0.0", "end-of-stream": "1.4.5", "enquirer": "2.3.6", "es-define-property": "1.0.1", "es-errors": "1.3.0", "es-object-atoms": "1.1.1", "es-set-tostringtag": "2.1.0", "escalade": "3.2.0", "escape-string-regexp": "1.0.5", "figures": "3.2.0", "flat": "5.0.2", "follow-redirects": "1.16.0", "form-data": "4.0.5", "fs-constants": "1.0.0", "function-bind": "1.1.2", "get-caller-file": "2.0.5", "get-intrinsic": "1.3.0", "get-proto": "1.0.1", "gopd": "1.2.0", "has-flag": "4.0.0", "has-symbols": "1.1.0", "has-tostringtag": "1.0.2", "hasown": "2.0.2", "ieee754": "1.2.1", "ignore": "7.0.5", "inherits": "2.0.4", "is-docker": "2.2.1", "is-fullwidth-code-point": "3.0.0", "is-interactive": "1.0.0", "is-unicode-supported": "0.1.0", "is-wsl": "2.2.0", "json5": "2.2.3", "jsonc-parser": "3.2.0", "lines-and-columns": "2.0.3", "log-symbols": "4.1.0", "math-intrinsics": "1.1.0", "mime-db": "1.52.0", "mime-types": "2.1.35", "mimic-fn": "2.1.0", "minimatch": "10.2.5", "minimist": "1.2.8", "npm-run-path": "4.0.1", "once": "1.4.0", "onetime": "5.1.2", "open": "8.4.2", "ora": "5.3.0", "path-key": "3.1.1", "picocolors": "1.1.1", "proxy-from-env": "2.1.0", "readable-stream": "3.6.2", "require-directory": "2.1.1", "resolve.exports": "2.0.3", "restore-cursor": "3.1.0", "safe-buffer": "5.2.1", "semver": "7.7.4", "signal-exit": "3.0.7", "smol-toml": "1.6.1", "string-width": "4.2.3", "string_decoder": "1.3.0", "strip-ansi": "6.0.1", "strip-bom": "3.0.0", "supports-color": "7.2.0", "tar-stream": "2.2.0", "tmp": "0.2.4", "tree-kill": "1.2.2", "tsconfig-paths": "4.2.0", "tslib": "2.8.1", "util-deprecate": "1.0.2", "wcwidth": "1.0.1", "wrap-ansi": "7.0.0", "wrappy": "1.0.2", "y18n": "5.0.8", "yaml": "2.8.0", "yargs": "17.7.2", "yargs-parser": "21.1.1" }, "optionalDependencies": { "@nx/nx-darwin-arm64": "22.7.3", "@nx/nx-darwin-x64": "22.7.3", "@nx/nx-freebsd-x64": "22.7.3", "@nx/nx-linux-arm-gnueabihf": "22.7.3", "@nx/nx-linux-arm64-gnu": "22.7.3", "@nx/nx-linux-arm64-musl": "22.7.3", "@nx/nx-linux-x64-gnu": "22.7.3", "@nx/nx-linux-x64-musl": "22.7.3", "@nx/nx-win32-arm64-msvc": "22.7.3", "@nx/nx-win32-x64-msvc": "22.7.3" }, "peerDependencies": { "@swc-node/register": "^1.11.1", "@swc/core": "^1.15.8" }, "optionalPeers": ["@swc-node/register", "@swc/core"], "bin": { "nx": "./dist/bin/nx.js", "nx-cloud": "./dist/bin/nx-cloud.js" } }, "sha512-yo2XWmxFF01D2i5YBk34Dz1K7YX2u7BoBuCSbD819lIus9B8LNJ7BzbnWfDFXOcvuGoLXqIxO2ElPqpkx5e5JQ=="], + "nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], "oauth4webapi": ["oauth4webapi@3.8.5", "", {}, "sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg=="], @@ -8089,7 +8150,7 @@ "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], - "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], + "ora": ["ora@5.3.0", "", { "dependencies": { "bl": "^4.0.3", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "log-symbols": "^4.0.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g=="], "orderedmap": ["orderedmap@2.1.1", "", {}, "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g=="], @@ -8367,7 +8428,7 @@ "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], @@ -8451,7 +8512,7 @@ "read-pkg": ["read-pkg@3.0.0", "", { "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA=="], - "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], @@ -8521,7 +8582,9 @@ "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], - "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], + "resolve.exports": ["resolve.exports@2.0.3", "", {}, "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A=="], + + "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="], @@ -8783,11 +8846,11 @@ "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], - "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], - "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -8825,7 +8888,7 @@ "superjson": ["superjson@2.2.6", "", { "dependencies": { "copy-anything": "^4" } }, "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA=="], - "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], @@ -8887,6 +8950,8 @@ "tiptap-markdown": ["tiptap-markdown@0.9.0", "", { "dependencies": { "@types/markdown-it": "^13.0.7", "markdown-it": "^14.1.0", "markdown-it-task-lists": "^2.1.1", "prosemirror-markdown": "^1.11.1" }, "peerDependencies": { "@tiptap/core": "^3.0.1" } }, "sha512-dKLQ9iiuGNgrlGVjrNauF/UBzWu4LYOx5pkD0jNkmQt/GOwfCJsBuzZTsf1jZ204ANHOm572mZ9PYvGh1S7tpQ=="], + "tmp": ["tmp@0.2.4", "", {}, "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ=="], + "to-buffer": ["to-buffer@1.2.2", "", { "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", "typed-array-buffer": "^1.0.3" } }, "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], @@ -8931,26 +8996,14 @@ "ts-proto-descriptors": ["ts-proto-descriptors@2.1.0", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0" } }, "sha512-S5EZYEQ6L9KLFfjSRpZWDIXDV/W7tAj8uW7pLsihIxyr62EAVSiKuVPwE8iWnr849Bqa53enex1jhDUcpgquzA=="], + "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "tsup": ["tsup@8.5.1", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.27.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing=="], "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], - "turbo": ["turbo@2.8.13", "", { "optionalDependencies": { "turbo-darwin-64": "2.8.13", "turbo-darwin-arm64": "2.8.13", "turbo-linux-64": "2.8.13", "turbo-linux-arm64": "2.8.13", "turbo-windows-64": "2.8.13", "turbo-windows-arm64": "2.8.13" }, "bin": { "turbo": "bin/turbo" } }, "sha512-nyM99hwFB9/DHaFyKEqatdayGjsMNYsQ/XBNO6MITc7roncZetKb97MpHxWf3uiU+LB9c9HUlU3Jp2Ixei2k1A=="], - - "turbo-darwin-64": ["turbo-darwin-64@2.8.13", "", { "os": "darwin", "cpu": "x64" }, "sha512-PmOvodQNiOj77+Zwoqku70vwVjKzL34RTNxxoARjp5RU5FOj/CGiC6vcDQhNtFPUOWSAaogHF5qIka9TBhX4XA=="], - - "turbo-darwin-arm64": ["turbo-darwin-arm64@2.8.13", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kI+anKcLIM4L8h+NsM7mtAUpElkCOxv5LgiQVQR8BASyDFfc8Efj5kCk3cqxuxOvIqx0sLfCX7atrHQ2kwuNJQ=="], - - "turbo-linux-64": ["turbo-linux-64@2.8.13", "", { "os": "linux", "cpu": "x64" }, "sha512-j29KnQhHyzdzgCykBFeBqUPS4Wj7lWMnZ8CHqytlYDap4Jy70l4RNG46pOL9+lGu6DepK2s1rE86zQfo0IOdPw=="], - - "turbo-linux-arm64": ["turbo-linux-arm64@2.8.13", "", { "os": "linux", "cpu": "arm64" }, "sha512-OEl1YocXGZDRDh28doOUn49QwNe82kXljO1HXApjU0LapkDiGpfl3jkAlPKxEkGDSYWc8MH5Ll8S16Rf5tEBYg=="], - - "turbo-windows-64": ["turbo-windows-64@2.8.13", "", { "os": "win32", "cpu": "x64" }, "sha512-717bVk1+Pn2Jody7OmWludhEirEe0okoj1NpRbSm5kVZz/yNN/jfjbxWC6ilimXMz7xoMT3IDfQFJsFR3PMANA=="], - - "turbo-windows-arm64": ["turbo-windows-arm64@2.8.13", "", { "os": "win32", "cpu": "arm64" }, "sha512-R819HShLIT0Wj6zWVnIsYvSNtRNj1q9VIyaUz0P24SMcLCbQZIm1sV09F4SDbg+KCCumqD2lcaR2UViQ8SnUJA=="], - "turndown": ["turndown@7.2.4", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ=="], "tweetnacl": ["tweetnacl@1.0.3", "", {}, "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="], @@ -9091,6 +9144,8 @@ "w3c-keyname": ["w3c-keyname@2.2.8", "", {}, "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="], + "wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], "webidl-conversions": ["webidl-conversions@4.0.2", "", {}, "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="], @@ -9637,6 +9692,8 @@ "@eslint/eslintrc/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "@fastify/otel/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "@function-bay/build/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@function-bay/nodejs/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], @@ -9657,6 +9714,8 @@ "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + "@isaacs/cliui/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], "@lowerdeck/error/@lowerdeck/validation": ["@lowerdeck/validation@1.0.8", "", {}, "sha512-7sW91bml0iY+JipHOndla2uAEwTbFQwINAUrb0oGEVMQQ522MAa4PgwTKjJAG9DZ12LGhOgYEJoo7CyJo8aJNQ=="], @@ -9967,6 +10026,8 @@ "@metorial/origin/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial/origin/axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], + "@metorial/pages/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], "@metorial/presenter/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -10387,6 +10448,8 @@ "@sentry/bundler-plugin-core/magic-string": ["magic-string@0.30.8", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ=="], + "@sentry/cli/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "@sentry/cli/undici": ["undici@6.24.1", "", {}, "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA=="], "@sentry/node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.213.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.213.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w=="], @@ -10403,6 +10466,8 @@ "@slates/proto/@lowerdeck/error": ["@lowerdeck/error@1.2.3", "", { "dependencies": { "@lowerdeck/case": "^1.0.9", "@lowerdeck/validation": "^1.0.10" } }, "sha512-LAMJ9wsUQQ7xkIqbK457vE5ZPlhaijLjKYDKyLLBYFv6BWr9heGkb/4vuU0TEKyCkF2ReZFiAI7fRWJwm9aqbw=="], + "@slates/proto/axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], + "@slates/proto/zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], "@smithy/chunked-blob-reader-native/@smithy/util-base64": ["@smithy/util-base64@4.3.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w=="], @@ -10421,6 +10486,8 @@ "@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="], + "@surma/rollup-plugin-off-main-thread/ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + "@surma/rollup-plugin-off-main-thread/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], "@tiptap/extension-blockquote/@tiptap/core": ["@tiptap/core@3.20.0", "", { "peerDependencies": { "@tiptap/pm": "^3.20.0" } }, "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ=="], @@ -10495,6 +10562,8 @@ "@types/unzipper/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "@typescript-eslint/typescript-estree/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], @@ -10529,11 +10598,13 @@ "@vscode/test-electron/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "@vscode/test-electron/ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], + "@vscode/test-electron/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "accepts/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - "are-we-there-yet/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "ast-v8-to-istanbul/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], @@ -10541,7 +10612,7 @@ "babel-plugin-styled-components/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "bl/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + "brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "bullmq/ioredis": ["ioredis@5.9.3", "", { "dependencies": { "@ioredis/commands": "1.5.0", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA=="], @@ -10563,18 +10634,12 @@ "cacache/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - "chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - - "chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], - "chevrotain/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], "chevrotain/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "concat-with-sourcemaps/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "cosmiconfig/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], @@ -10603,15 +10668,19 @@ "domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], + "dotenv-expand/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "dprint-node/detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], "dts-bundle-generator/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "duplexer2/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "eslint/ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], - "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "eslint/escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], "eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], @@ -10619,9 +10688,9 @@ "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "express/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - "figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "filelist/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], @@ -10631,8 +10700,6 @@ "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - "formik/react-fast-compare": ["react-fast-compare@2.0.4", "", {}, "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="], "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], @@ -10641,8 +10708,6 @@ "function-bay/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "gauge/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "gaxios/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], @@ -10659,6 +10724,8 @@ "has-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], + "hash-base/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "html-to-text/deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], "htmlparser2/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], @@ -10669,24 +10736,20 @@ "is-inside-container/is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], - "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "jest-worker/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "jest-worker/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "jsonwebtoken/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "jszip/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "just-bash/diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], + "just-bash/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "load-json-file/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], "load-json-file/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], - "log-symbols/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - - "log-symbols/is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], - "loose-envify/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], "make-dir/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], @@ -10707,6 +10770,8 @@ "maxmin/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="], + "maxmin/figures": ["figures@1.7.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" } }, "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ=="], + "maxmin/gzip-size": ["gzip-size@3.0.0", "", { "dependencies": { "duplexer": "^0.1.1" } }, "sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w=="], "maxmin/pretty-bytes": ["pretty-bytes@3.0.1", "", { "dependencies": { "number-is-nan": "^1.0.0" } }, "sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow=="], @@ -10723,6 +10788,8 @@ "mermaid/marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], + "microbundle/escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + "microbundle/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], "microbundle/typescript": ["typescript@4.9.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="], @@ -10751,8 +10818,6 @@ "mocha/diff": ["diff@3.5.0", "", {}, "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="], - "mocha/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "mocha/glob": ["glob@7.1.2", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ=="], "mocha/he": ["he@1.1.1", "", { "bin": { "he": "bin/he" } }, "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA=="], @@ -10779,24 +10844,34 @@ "normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + "npm-run-all/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + + "npm-run-all/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + "npm-run-all/cross-spawn": ["cross-spawn@6.0.6", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw=="], "npm-run-all/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], + "nx/dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], - "openid-client/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], + "nx/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "nx/tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], - "ora/log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], + "nx/yaml": ["yaml@2.8.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ=="], - "ora/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], + + "openid-client/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], + + "ora/cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + "parse-json/lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], @@ -10827,6 +10902,8 @@ "prosemirror-markdown/@types/markdown-it": ["@types/markdown-it@14.1.2", "", { "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" } }, "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog=="], + "prosemirror-trailing-node/escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + "protobufjs/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], @@ -10837,16 +10914,8 @@ "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], - "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - - "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], - - "restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "rollup-plugin-bundle-size/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="], - "rollup-plugin-postcss/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "rollup-plugin-postcss/p-queue": ["p-queue@6.6.2", "", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], "rollup-plugin-postcss/postcss-load-config": ["postcss-load-config@3.1.4", "", { "dependencies": { "lilconfig": "^2.0.5", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg=="], @@ -10861,8 +10930,12 @@ "safe-push-apply/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "sass-embedded/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "seek-bzip/commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], + "send/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + "short-uuid/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], "socks-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], @@ -10873,20 +10946,14 @@ "stacktrace-gps/source-map": ["source-map@0.5.6", "", {}, "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA=="], - "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "string_decoder/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - - "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "styled-components/postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="], "stylehacks/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + "sucrase/lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "svgo/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], "tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], @@ -10899,6 +10966,8 @@ "tedious/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "tedious/bl": ["bl@6.1.6", "", { "dependencies": { "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", "inherits": "^2.0.4", "readable-stream": "^4.2.0" } }, "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg=="], + "tedious/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -10911,6 +10980,10 @@ "tsup/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "type-is/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + + "typeorm/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "typeorm/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], "typeorm/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], @@ -10925,6 +10998,10 @@ "vite-plugin-html/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "vite-plugin-html/dotenv-expand": ["dotenv-expand@8.0.3", "", {}, "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg=="], + + "vite-plugin-html/ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + "vite-plugin-html/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], "vite-plugin-html/pathe": ["pathe@0.2.0", "", {}, "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw=="], @@ -10943,14 +11020,6 @@ "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "wsl-utils/is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], "xml-crypto/@xmldom/xmldom": ["@xmldom/xmldom@0.8.12", "", {}, "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg=="], @@ -11305,6 +11374,10 @@ "@boxyhq/metrics/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@boxyhq/saml-jackson/axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "@boxyhq/saml-jackson/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "@boxyhq/saml-jackson/mysql2/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "@boxyhq/saml-jackson/redis/@redis/bloom": ["@redis/bloom@1.2.0", "", { "peerDependencies": { "@redis/client": "^1.0.0" } }, "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="], @@ -11323,6 +11396,8 @@ "@eslint/eslintrc/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "@fastify/otel/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "@function-bay/nodejs/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], "@function-bay/nodejs/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], @@ -11377,12 +11452,10 @@ "@function-bay/utils/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@inquirer/core/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "@inquirer/core/wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "@mapbox/node-pre-gyp/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], @@ -11673,6 +11746,8 @@ "@metorial-services/slates-registry-internal-client/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial-subspace/app-controller/@types/minimatch/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "@metorial-subspace/conduit/vitest/@vitest/expect": ["@vitest/expect@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw=="], "@metorial-subspace/conduit/vitest/@vitest/mocker": ["@vitest/mocker@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg=="], @@ -13005,6 +13080,10 @@ "@metorial/origin/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/origin/axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "@metorial/origin/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "@metorial/pages/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], "@metorial/pages/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], @@ -13181,6 +13260,10 @@ "@metorial/signal/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@metorial/slates-registry/@types/minimatch/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + + "@metorial/slates/@types/minimatch/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "@metorial/state/@metorial/generated/@metorial/util-endpoint": ["@metorial/util-endpoint@3.0.0", "", { "dependencies": { "@metorial/util-async-iterator": "^3.0.0", "@types/qs": "^6.14.0", "cross-fetch": "^4.1.0", "qs": "^6.13.1" } }, "sha512-uw+yw1xwa56jzG0H6iERK/FcuHhhz4n3sEWqyCG9bXhCGeMZSygls39mZB4qU+/Kb69N8deYnP0wSqoqvsO98Q=="], "@metorial/state/@metorial/generated/@metorial/util-resource-mapper": ["@metorial/util-resource-mapper@3.0.0", "", {}, "sha512-CiEVSUL9ncLQuIrZniE0lMkDdAJ9XUzd/rqwpxf0OV3yDZtdbTDP1Wo36b8tRndC1J5hyd1LVayxULQOXBCs4g=="], @@ -14387,12 +14470,18 @@ "@sentry/bundler-plugin-core/@sentry/cli/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + "@sentry/bundler-plugin-core/@sentry/cli/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "@sentry/bundler-plugin-core/glob/minimatch": ["minimatch@8.0.7", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg=="], "@sentry/bundler-plugin-core/glob/minipass": ["minipass@4.2.8", "", {}, "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="], "@sentry/node/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], + "@slates/proto/axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "@slates/proto/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "@smithy/chunked-blob-reader-native/@smithy/util-base64/@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.1", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig=="], "@smithy/chunked-blob-reader-native/@smithy/util-base64/@smithy/util-utf8": ["@smithy/util-utf8@4.2.1", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.1", "tslib": "^2.6.2" } }, "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g=="], @@ -14415,6 +14504,8 @@ "@types/unzipper/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "@typespec/ts-http-runtime/http-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], "@typespec/ts-http-runtime/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], @@ -14435,6 +14526,8 @@ "@vscode/test-cli/mocha/diff": ["diff@7.0.0", "", {}, "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw=="], + "@vscode/test-cli/mocha/escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + "@vscode/test-cli/mocha/serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], "@vscode/test-cli/mocha/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], @@ -14443,17 +14536,27 @@ "@vscode/test-electron/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - "are-we-there-yet/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "@vscode/test-electron/ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "bl/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "@vscode/test-electron/ora/cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], - "bullmq/ioredis/@ioredis/commands": ["@ioredis/commands@1.5.0", "", {}, "sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow=="], + "@vscode/test-electron/ora/cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], - "bun-types/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "@vscode/test-electron/ora/is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], + + "@vscode/test-electron/ora/is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + + "@vscode/test-electron/ora/log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], + + "@vscode/test-electron/ora/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "@vscode/test-electron/ora/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "accepts/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "bullmq/ioredis/@ioredis/commands": ["@ioredis/commands@1.5.0", "", {}, "sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow=="], + + "bun-types/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], @@ -14461,20 +14564,20 @@ "domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], - "eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + "duplexer2/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "eslint/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "duplexer2/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "eslint/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "eslint/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "express/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "filelist/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "find-cache-dir/make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - "function-bay/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], "function-bay/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], @@ -14493,17 +14596,21 @@ "function-bay/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "gauge/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "gaxios/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "hash-base/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "hash-base/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + "jest-worker/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "log-symbols/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "jszip/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "jszip/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "log-symbols/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "just-bash/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], "make-fetch-happen/http-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], @@ -14511,8 +14618,6 @@ "maxmin/chalk/ansi-styles": ["ansi-styles@2.2.1", "", {}, "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA=="], - "maxmin/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "maxmin/chalk/strip-ansi": ["strip-ansi@3.0.1", "", { "dependencies": { "ansi-regex": "^2.0.0" } }, "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg=="], "maxmin/chalk/supports-color": ["supports-color@2.0.0", "", {}, "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g=="], @@ -14545,6 +14650,10 @@ "node-gyp/nopt/abbrev": ["abbrev@1.1.1", "", {}, "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="], + "npm-run-all/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + + "npm-run-all/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + "npm-run-all/cross-spawn/path-key": ["path-key@2.0.1", "", {}, "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="], "npm-run-all/cross-spawn/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], @@ -14555,10 +14664,6 @@ "npm-run-all/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "ora/log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], - - "ora/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - "p-locate/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], "pkg-dir/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], @@ -14571,16 +14676,10 @@ "rollup-plugin-bundle-size/chalk/ansi-styles": ["ansi-styles@2.2.1", "", {}, "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA=="], - "rollup-plugin-bundle-size/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "rollup-plugin-bundle-size/chalk/strip-ansi": ["strip-ansi@3.0.1", "", { "dependencies": { "ansi-regex": "^2.0.0" } }, "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg=="], "rollup-plugin-bundle-size/chalk/supports-color": ["supports-color@2.0.0", "", {}, "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g=="], - "rollup-plugin-postcss/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "rollup-plugin-postcss/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "rollup-plugin-postcss/p-queue/eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], "rollup-plugin-postcss/p-queue/p-timeout": ["p-timeout@3.2.0", "", { "dependencies": { "p-finally": "^1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], @@ -14589,17 +14688,15 @@ "rollup-plugin-postcss/postcss-load-config/yaml": ["yaml@1.10.3", "", {}, "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA=="], - "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], "styled-components/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "tar-fs/tar-stream/bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + "tedious/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "tar-fs/tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "tedious/bl/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - "tedious/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "tedious/bl/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], "test-exclude/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], @@ -14655,6 +14752,8 @@ "tsup/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "type-is/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "typeorm/glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], "unplugin/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -14721,14 +14820,6 @@ "vscode/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], - "wrap-ansi-cjs/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], @@ -14793,6 +14884,8 @@ "@eslint/eslintrc/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@fastify/otel/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "@function-bay/nodejs/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@function-bay/nodejs/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -14805,10 +14898,6 @@ "@function-bay/utils/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@inquirer/core/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "@inquirer/core/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial-platform-systems/ares-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -14869,6 +14958,8 @@ "@metorial-services/slates-registry-internal-client/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial-subspace/app-controller/@types/minimatch/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "@metorial-subspace/conduit/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial-subspace/conduit/vitest/@vitest/spy/tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="], @@ -15371,6 +15462,10 @@ "@metorial/scene-skills/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial/slates-registry/@types/minimatch/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + + "@metorial/slates/@types/minimatch/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "@metorial/state/@metorial/generated/@metorial/util-endpoint/@metorial/util-async-iterator": ["@metorial/util-async-iterator@3.0.0", "", {}, "sha512-XaPNjifR7u0TAboXy0Axw8nrCNV5gU7i+TVFRXiBqR5zzz8+mu0FWqaTB9yw2VrjP4FKkHC+2GI8Vxg/CgH5Og=="], "@metorial/state/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], @@ -15619,6 +15714,8 @@ "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "@vitest/mocker/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], "@vitest/mocker/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], @@ -15675,7 +15772,13 @@ "@vscode/test-cli/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "eslint/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + "@vscode/test-electron/ora/cli-cursor/restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], + + "@vscode/test-electron/ora/log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], + + "@vscode/test-electron/ora/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "@vscode/test-electron/ora/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "eslint/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], @@ -15687,7 +15790,7 @@ "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "log-symbols/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + "just-bash/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "maxmin/chalk/strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], @@ -15699,6 +15802,10 @@ "mongoose/mongodb/mongodb-connection-string-url/whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], + "npm-run-all/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + + "npm-run-all/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "npm-run-all/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], "npm-run-all/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], @@ -15707,12 +15814,6 @@ "rollup-plugin-bundle-size/chalk/strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], - "rollup-plugin-postcss/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "tar-fs/tar-stream/bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - - "tar-fs/tar-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "test-exclude/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "typeorm/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], @@ -15775,10 +15876,6 @@ "vscode-test/https-proxy-agent/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "wrap-ansi-cjs/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "@aws-sdk/client-s3/@smithy/eventstream-serde-browser/@smithy/eventstream-serde-universal/@smithy/eventstream-codec/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], "@aws-sdk/client-s3/@smithy/eventstream-serde-node/@smithy/eventstream-serde-universal/@smithy/eventstream-codec/@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA=="], @@ -15799,8 +15896,6 @@ "@function-bay/utils/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "@inquirer/core/wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "@metorial-platform-systems/ares-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], "@metorial-platform-systems/cargo-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], @@ -15831,6 +15926,8 @@ "@metorial-services/slates-registry-internal-client/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@metorial-subspace/app-controller/@types/minimatch/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "@metorial-subspace/list-utils/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], "@metorial-subspace/module-agent/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], @@ -15985,6 +16082,10 @@ "@metorial/scene-skills/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@metorial/slates-registry/@types/minimatch/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "@metorial/slates/@types/minimatch/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "@metorial/state/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], "@metorial/storage/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], @@ -16101,11 +16202,11 @@ "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "eslint/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "@vscode/test-electron/ora/cli-cursor/restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], - "function-bay/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "@vscode/test-electron/ora/cli-cursor/restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "log-symbols/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "function-bay/vitest/@vitest/runner/strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], "mocha/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], @@ -16115,8 +16216,6 @@ "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], - "rollup-plugin-postcss/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "typeorm/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], } } diff --git a/deployment/dockerfiles/api.Dockerfile b/deployment/dockerfiles/api.Dockerfile index fe8b90010..7b7597a1b 100644 --- a/deployment/dockerfiles/api.Dockerfile +++ b/deployment/dockerfiles/api.Dockerfile @@ -22,7 +22,7 @@ COPY /src/backend ./src/backend COPY /src/packages ./src/packages COPY /package.json ./package.json -COPY /turbo.json ./turbo.json +COPY /nx.json ./nx.json COPY /bun.lock ./bun.lock ENV NODE_OPTIONS=--max_old_space_size=6144 @@ -31,9 +31,8 @@ RUN bun install RUN apt-get update && apt-get install -y ca-certificates -# RUN bun turbo run build --filter=./oss/src/packages/** --concurrency=1 --ui=stream -RUN bun turbo run prisma:generate --concurrency=1 --log-prefix=task -RUN bun turbo run oss:server:build --filter=${PACKAGE_NAME} --concurrency=1 --log-prefix=task +RUN bun x nx run-many --target=prisma:generate --all +RUN bun x nx run ${PACKAGE_NAME}:server:build # ------------------------ # Installer diff --git a/nx.json b/nx.json new file mode 100644 index 000000000..340cb080d --- /dev/null +++ b/nx.json @@ -0,0 +1,115 @@ +{ + "$schema": "./node_modules/nx/schemas/nx-schema.json", + "namedInputs": { + "default": [ + "{projectRoot}/**/*", + "sharedGlobals" + ], + "production": [ + "default", + "!{projectRoot}/dist/**", + "!{projectRoot}/coverage/**", + "!{projectRoot}/.control/**" + ], + "sharedGlobals": [ + "{workspaceRoot}/package.json", + "{workspaceRoot}/bun.lock" + ] + }, + "targetDefaults": { + "build": { + "cache": true, + "dependsOn": [ + "^build" + ], + "inputs": [ + "production", + "^production" + ], + "outputs": [ + "{projectRoot}/dist/**" + ] + }, + "server:build": { + "cache": true, + "dependsOn": [ + "prisma:generate", + "^build", + "^server:build" + ], + "inputs": [ + "production", + "^production" + ], + "outputs": [ + "{projectRoot}/dist/**" + ] + }, + "frontend:build": { + "cache": true, + "dependsOn": [ + "^build", + "^frontend:build" + ], + "inputs": [ + "production", + "^production" + ], + "outputs": [ + "{projectRoot}/dist/**", + "{projectRoot}/frontend/dist/**" + ] + }, + "worker:build": { + "cache": true, + "dependsOn": [ + "prisma:generate", + "^build", + "^worker:build" + ], + "inputs": [ + "production", + "^production" + ], + "outputs": [ + "{projectRoot}/dist-worker/**" + ] + }, + "test": { + "cache": false, + "inputs": [ + "default", + "^production" + ] + }, + "check-types": { + "cache": true, + "dependsOn": [ + "^check-types" + ], + "inputs": [ + "production", + "^production" + ] + }, + "prisma:generate": { + "cache": true, + "dependsOn": [ + "^prisma:generate" + ], + "inputs": [ + "production", + "^production" + ] + }, + "prisma:push": { + "cache": false + }, + "dev": { + "cache": false + }, + "deploy": { + "cache": false + } + } +} diff --git a/package.json b/package.json index 64e8c7e6d..f67510be7 100644 --- a/package.json +++ b/package.json @@ -2,23 +2,23 @@ "name": "@metorial/oss", "private": true, "scripts": { - "build": "turbo run --ui=stream build", - "generate:client": "turbo run generate:client && turbo run build", + "build": "bun x nx run-many --target=build --all", + "generate:client": "bun x nx run-many --target=generate:client --all --parallel=1 && bun x nx run-many --target=build --all", "control": "bun run --cwd ./src/tooling/control ./src/cli.ts", "client:generate": "bun run generate:client", - "client:generate:dashboard": "turbo run generate:client:dashboard", - "client:generate:consumer": "turbo run generate:client:consumer", - "dev": "turbo run --concurrency 99 dev", - "test": "turbo run --concurrency=1 --ui=stream test", - "prisma:generate": "turbo run --ui=stream prisma:generate", - "prisma:push": "turbo run --ui=stream --concurrency=1 prisma:push --", + "client:generate:dashboard": "bun x nx run-many --target=generate:client:dashboard --all --parallel=1", + "client:generate:consumer": "bun x nx run-many --target=generate:client:consumer --all --parallel=1", + "dev": "bun x nx run-many --target=dev --all --parallel=99", + "test": "bun x nx run-many --target=test --all --parallel=1", + "prisma:generate": "bun x nx run-many --target=prisma:generate --all --parallel=1", + "prisma:push": "bun x nx run-many --target=prisma:push --all --parallel=1", "prepare": "echo prepare", "postinstall": "echo postinstall && [ -f \"./vendor/mcp-inspector\" ] && { cd ./vendor/mcp-inspector && npm install; } || { echo \"No vendor dependencies to install.\"; }", "preinstall": "[ -f \"../metorial_enterprise_install.sh\" ] && { ../metorial_enterprise_install.sh; } || { [ ! -f \"../metorial_enterprise_install.sh\" ] && echo \"Ignoring enterprise dependencies.\"; }" }, "devDependencies": { + "nx": "^22.7.3", "prettier": "^3.5.3", - "turbo": "^2.5.4", "typescript": "5.8.2" }, "engines": { @@ -60,4 +60,4 @@ "@aws-sdk/nested-clients": "3.997.9", "@aws-sdk/util-dynamodb": "3.996.2" } -} \ No newline at end of file +} diff --git a/scripts/dev-tools/scripts/build-packages.sh b/scripts/dev-tools/scripts/build-packages.sh index 262262f39..3438ee556 100755 --- a/scripts/dev-tools/scripts/build-packages.sh +++ b/scripts/dev-tools/scripts/build-packages.sh @@ -6,14 +6,9 @@ set -e cd $ROOT_DIR echo "Building OSS packages..." if [ "$IS_ENTERPRISE" = true ]; then - bunx turbo run --ui=stream build --filter='./oss/**' --filter='!./oss/src/systems/**' - bunx turbo run --ui=stream build --filter='./oss/src/systems/_clients/**' --force - bunx turbo run --ui=stream build --filter='./oss/src/systems/shuttle/sdk/packages/**' - bunx turbo run --ui=stream build --filter='./oss/src/systems/function-bay/packages/**' - bunx turbo run --ui=stream frontend:build --filter='./oss/src/systems/ares/service' - bunx turbo run --ui=stream build --filter='./systems/horizon/clients/**' - bunx turbo run --ui=stream frontend:build --filter='./systems/horizon/apps/horizon/**' - bunx turbo run --ui=stream frontend:build --filter='./oss/src/systems/subspace/apps/dev' + bun x nx run-many --target=build --all + bun x nx run @metorial/ares:frontend:build + bun x nx run-many --target=frontend:build --projects=@metorial/horizon,@metorial/subspace-dev else bun run build fi diff --git a/scripts/dev-tools/scripts/cleanup.sh b/scripts/dev-tools/scripts/cleanup.sh index 307fb1742..a9c3d6166 100755 --- a/scripts/dev-tools/scripts/cleanup.sh +++ b/scripts/dev-tools/scripts/cleanup.sh @@ -10,7 +10,7 @@ echo "Cleaning up the repo..." # - dist # - .next # - .cache -# - .turbo +# - .nx # - generated # - out @@ -20,6 +20,6 @@ find . -name "node_modules" -type d -prune -exec rm -rf '{}' + || true find . -name "dist" -type d -prune -exec rm -rf '{}' + || true find . -name ".next" -type d -prune -exec rm -rf '{}' + || true find . -name ".cache" -type d -prune -exec rm -rf '{}' + || true -find . -name ".turbo" -type d -prune -exec rm -rf '{}' + || true +find . -name ".nx" -type d -prune -exec rm -rf '{}' + || true find . -name "generated" -type d -prune -exec rm -rf '{}' + || true -find . -name "out" -type d -prune -exec rm -rf '{}' + || true \ No newline at end of file +find . -name "out" -type d -prune -exec rm -rf '{}' + || true diff --git a/src/systems/_clients/ares/package.json b/src/systems/_clients/ares/package.json index 5fd79f4e8..02a779494 100644 --- a/src/systems/_clients/ares/package.json +++ b/src/systems/_clients/ares/package.json @@ -33,6 +33,7 @@ "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { + "@metorial/ares": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2" diff --git a/src/systems/_clients/cargo/package.json b/src/systems/_clients/cargo/package.json index 2c5986b88..f7e0bef96 100644 --- a/src/systems/_clients/cargo/package.json +++ b/src/systems/_clients/cargo/package.json @@ -34,6 +34,7 @@ "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { + "@metorial-cargo/service": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", diff --git a/src/systems/_clients/forge/package.json b/src/systems/_clients/forge/package.json index 17d287916..f503f54ad 100644 --- a/src/systems/_clients/forge/package.json +++ b/src/systems/_clients/forge/package.json @@ -36,9 +36,10 @@ "@mtsrc/validation": "1.0.0" }, "devDependencies": { + "@metorial/forge": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", "@types/minimatch": "^5" } -} \ No newline at end of file +} diff --git a/src/systems/_clients/function-bay/package.json b/src/systems/_clients/function-bay/package.json index a8b5edc8d..c340e4e98 100644 --- a/src/systems/_clients/function-bay/package.json +++ b/src/systems/_clients/function-bay/package.json @@ -33,6 +33,7 @@ "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { + "@metorial/function-bay": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", diff --git a/src/systems/_clients/object-storage/src/index.ts b/src/systems/_clients/object-storage/src/index.ts index 5ce22d9e1..d83e2913d 100644 --- a/src/systems/_clients/object-storage/src/index.ts +++ b/src/systems/_clients/object-storage/src/index.ts @@ -72,6 +72,13 @@ export class ObjectStorageClient { throw error; } + private readHeaderValue(headers: Record, name: string): string | undefined { + let value = headers[name]; + if (value == null) return undefined; + if (Array.isArray(value)) return value[0] != null ? String(value[0]) : undefined; + return String(value); + } + async ping(): Promise { try { await this.client.get('/ping'); @@ -166,10 +173,10 @@ export class ObjectStorageClient { { responseType: 'arraybuffer' } ); - const size = parseInt(response.headers['content-length'] || '0', 10); - const contentType = response.headers['content-type']; - const etag = response.headers['etag'] || ''; - const lastModified = response.headers['last-modified'] || ''; + const size = parseInt(this.readHeaderValue(response.headers, 'content-length') ?? '0', 10); + const contentType = this.readHeaderValue(response.headers, 'content-type'); + const etag = this.readHeaderValue(response.headers, 'etag') ?? ''; + const lastModified = this.readHeaderValue(response.headers, 'last-modified') ?? ''; // Extract custom metadata from x-object-meta-* headers const metadata: Record = {}; @@ -200,10 +207,10 @@ export class ObjectStorageClient { try { const response = await this.client.head(`/buckets/${bucket}/objects/${key}`); - const size = parseInt(response.headers['content-length'] || '0', 10); - const contentType = response.headers['content-type']; - const etag = response.headers['etag'] || ''; - const lastModified = response.headers['last-modified'] || ''; + const size = parseInt(this.readHeaderValue(response.headers, 'content-length') ?? '0', 10); + const contentType = this.readHeaderValue(response.headers, 'content-type'); + const etag = this.readHeaderValue(response.headers, 'etag') ?? ''; + const lastModified = this.readHeaderValue(response.headers, 'last-modified') ?? ''; // Extract custom metadata from x-object-meta-* headers const metadata: Record = {}; diff --git a/src/systems/_clients/origin-client/package.json b/src/systems/_clients/origin-client/package.json index 9f4b272c3..849ad5c7b 100644 --- a/src/systems/_clients/origin-client/package.json +++ b/src/systems/_clients/origin-client/package.json @@ -35,6 +35,7 @@ "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { + "@metorial/origin": "workspace:*", "@types/node": "^25.0.3", "dts-bundle-generator": "^9.5.1", "microbundle": "^0.15.1", diff --git a/src/systems/_clients/relay/package.json b/src/systems/_clients/relay/package.json index fb726a8f5..dc9aac8dd 100644 --- a/src/systems/_clients/relay/package.json +++ b/src/systems/_clients/relay/package.json @@ -35,6 +35,7 @@ "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { + "@metorial/relay": "workspace:*", "@types/react": "^19.0.0", "tsup": "^8.5.1", "typescript": "^5.8.3", diff --git a/src/systems/_clients/shuttle/package.json b/src/systems/_clients/shuttle/package.json index cec9aad18..aa5f64fec 100644 --- a/src/systems/_clients/shuttle/package.json +++ b/src/systems/_clients/shuttle/package.json @@ -36,9 +36,10 @@ "@mtsrc/validation": "1.0.0" }, "devDependencies": { + "@metorial/shuttle": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", "@types/minimatch": "^5" } -} \ No newline at end of file +} diff --git a/src/systems/_clients/signal/package.json b/src/systems/_clients/signal/package.json index c278c070e..9e708121e 100644 --- a/src/systems/_clients/signal/package.json +++ b/src/systems/_clients/signal/package.json @@ -34,6 +34,7 @@ "@mtsrc/validation": "1.0.0" }, "devDependencies": { + "@metorial/signal": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", diff --git a/src/systems/_clients/slates/package.json b/src/systems/_clients/slates/package.json index f31fa872f..a75c2ebea 100644 --- a/src/systems/_clients/slates/package.json +++ b/src/systems/_clients/slates/package.json @@ -35,9 +35,10 @@ "@mtsrc/validation": "1.0.0" }, "devDependencies": { + "@metorial/slates": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", "@types/minimatch": "^5" } -} \ No newline at end of file +} diff --git a/src/systems/_clients/subspace/package.json b/src/systems/_clients/subspace/package.json index ca150db3f..ddba83822 100644 --- a/src/systems/_clients/subspace/package.json +++ b/src/systems/_clients/subspace/package.json @@ -34,9 +34,10 @@ "@mtsrc/validation": "1.0.0" }, "devDependencies": { + "@metorial-subspace/app-controller": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", "@types/minimatch": "^5" } -} \ No newline at end of file +} diff --git a/src/systems/_clients/synthesis/package.json b/src/systems/_clients/synthesis/package.json index b56a098e2..f7b05d2f2 100644 --- a/src/systems/_clients/synthesis/package.json +++ b/src/systems/_clients/synthesis/package.json @@ -33,6 +33,7 @@ "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { + "@metorial/synthesis": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", diff --git a/src/systems/_clients/voyager/package.json b/src/systems/_clients/voyager/package.json index 3c51cc218..04a52b1fb 100644 --- a/src/systems/_clients/voyager/package.json +++ b/src/systems/_clients/voyager/package.json @@ -33,6 +33,7 @@ "@mtsrc/rpc-client": "1.0.0" }, "devDependencies": { + "@metorial/voyager": "workspace:*", "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2" diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index c1b6eea12..adbb974c6 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -1,55 +1,34 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* - -# Install dependencies from the OSS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ RUN bun install --linker=hoisted - -# Generate Prisma client and build the service from the monorepo path -WORKDIR /app/src/systems/ares/service -RUN bun prisma generate -RUN bun run server:build -RUN bun run frontend:build - -FROM builder AS workspace +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares +RUN cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares +RUN cd /app && bun x nx run @metorial/ares:server:build +FROM build AS workspace WORKDIR /app/src/systems/ares/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for health checks RUN apk add --no-cache curl - -# Copy built output, Prisma assets, and hoisted dependencies -COPY --from=builder /app/src/systems/ares/service/dist /app/dist -COPY --from=builder /app/src/systems/ares/service/prisma /app/prisma -COPY --from=builder /app/src/systems/ares/service/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules -COPY --from=builder /app/src/systems/ares/service/package.json /app/package.json - -# Copy built frontends -COPY --from=builder /app/src/systems/ares/service/frontend/auth/dist /app/frontend/auth/dist -COPY --from=builder /app/src/systems/ares/service/frontend/admin/dist /app/frontend/admin/dist - -# Expose ports (auth: 52120, admin: 52121, sso: 52122, internal: 52123, health: 12121) -EXPOSE 52120 52121 52122 52123 12121 - -# Health check using curl -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ - CMD curl -f http://localhost:52120/ping && curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service +COPY --from=build /app/src/systems/ares/service/dist /app/dist +COPY --from=build /app/src/systems/ares/service/prisma /app/prisma +COPY --from=build /app/src/systems/ares/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/src/systems/ares/service/frontend/auth/dist /app/frontend/auth/dist +COPY --from=build /app/src/systems/ares/service/frontend/admin/dist /app/frontend/admin/dist +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52120 +EXPOSE 52121 +EXPOSE 52122 +EXPOSE 52123 +EXPOSE 12121 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52120/ping && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/ares/service/Dockerfile.generated b/src/systems/ares/service/Dockerfile.generated new file mode 100644 index 000000000..adbb974c6 --- /dev/null +++ b/src/systems/ares/service/Dockerfile.generated @@ -0,0 +1,34 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares +RUN cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares +RUN cd /app && bun x nx run @metorial/ares:server:build +FROM build AS workspace +WORKDIR /app/src/systems/ares/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/ares/service/dist /app/dist +COPY --from=build /app/src/systems/ares/service/prisma /app/prisma +COPY --from=build /app/src/systems/ares/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/src/systems/ares/service/frontend/auth/dist /app/frontend/auth/dist +COPY --from=build /app/src/systems/ares/service/frontend/admin/dist /app/frontend/admin/dist +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52120 +EXPOSE 52121 +EXPOSE 52122 +EXPOSE 52123 +EXPOSE 12121 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52120/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/ares/service/control.toml b/src/systems/ares/service/control.toml index c5eaaa9c9..eb03c8277 100644 --- a/src/systems/ares/service/control.toml +++ b/src/systems/ares/service/control.toml @@ -3,10 +3,48 @@ name = "ares" [service] port = 52120 -dockerfile = "src/systems/ares/service/Dockerfile" +dockerfile = "src/systems/ares/service/Dockerfile.generated" build_context = "oss" health = { cmd = "bun -e \"fetch('http://localhost:12121/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/ares" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "ares-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/ares"] + +[[build.automations]] +name = "ares-frontend" +kind = "run-targets" +target = "frontend:build" +projects = ["@metorial/ares"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "frontend/auth/dist", to = "/app/frontend/auth/dist" }, + { from = "frontend/admin/dist", to = "/app/frontend/admin/dist" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52120, 52121, 52122, 52123, 12121] +command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52120/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/cargo/scripts/prepare-docker-build.sh b/src/systems/cargo/scripts/prepare-docker-build.sh deleted file mode 100755 index ee1815595..000000000 --- a/src/systems/cargo/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -# Install from the OSS workspace and build generated client packages that Cargo -# imports through package exports. -bun install --linker=hoisted - -sh ./src/systems/scripts/build-workspace-clients.sh - -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/origin-client diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index 05cf23d71..17e776e74 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -1,50 +1,28 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads and prepare workspace packages -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/cargo/scripts/prepare-docker-build.sh - -# Generate Prisma client from the split DB package and build the service app -WORKDIR /app/src/systems/cargo/db -RUN bun run prisma:generate - -WORKDIR /app/src/systems/cargo/service -RUN bun run server:build - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db +RUN cd /app && bun x nx run @metorial-cargo/service:server:build +FROM build AS workspace WORKDIR /app/src/systems/cargo/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for health checks RUN apk add --no-cache curl - -# Copy built output, Prisma assets, and hoisted dependencies -COPY --from=builder /app/src/systems/cargo/service/dist /app/dist -COPY --from=builder /app/src/systems/cargo/db/prisma /app/prisma -COPY --from=builder /app/src/systems/cargo/db/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - -# Expose primary ports +COPY --from=build /app/src/systems/cargo/service/dist /app/dist +COPY --from=build /app/src/systems/cargo/db/prisma /app/prisma +COPY --from=build /app/src/systems/cargo/db/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52150 EXPOSE 52151 - -# Health check using the content API and readiness server -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ - CMD curl -f http://localhost:52151/ping && curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52151/ping && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss --schema prisma/schema --config prisma.config.ts && bun /app/dist/index.js"] diff --git a/src/systems/cargo/service/Dockerfile.generated b/src/systems/cargo/service/Dockerfile.generated new file mode 100644 index 000000000..17e776e74 --- /dev/null +++ b/src/systems/cargo/service/Dockerfile.generated @@ -0,0 +1,28 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db +RUN cd /app && bun x nx run @metorial-cargo/service:server:build +FROM build AS workspace +WORKDIR /app/src/systems/cargo/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/cargo/service/dist /app/dist +COPY --from=build /app/src/systems/cargo/db/prisma /app/prisma +COPY --from=build /app/src/systems/cargo/db/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52150 +EXPOSE 52151 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52151/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss --schema prisma/schema --config prisma.config.ts && bun /app/dist/index.js"] diff --git a/src/systems/cargo/service/control.toml b/src/systems/cargo/service/control.toml index 17e226edd..ffcd7cb35 100644 --- a/src/systems/cargo/service/control.toml +++ b/src/systems/cargo/service/control.toml @@ -3,10 +3,40 @@ name = "cargo" [service] port = 52150 -dockerfile = "src/systems/cargo/service/Dockerfile" +dockerfile = "src/systems/cargo/service/Dockerfile.generated" build_context = "oss" health = { path = "/ping", cmd = "bun -e \"fetch('http://localhost:52151/ping').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" } +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial-cargo/service" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "cargo-db-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial-cargo/db"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "../db/prisma", to = "/app/prisma" }, + { from = "../db/prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52150, 52151] +command = "bun prisma db push --accept-data-loss --schema prisma/schema --config prisma.config.ts && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52151/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/forge/scripts/prepare-docker-build.sh b/src/systems/forge/scripts/prepare-docker-build.sh deleted file mode 100755 index 37fd5e952..000000000 --- a/src/systems/forge/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -bun install --linker=hoisted - -sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index 1e9294075..f935c6625 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -1,48 +1,27 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* - -RUN sh ./src/systems/forge/scripts/prepare-docker-build.sh - -# Generate Prisma client and build the service from the monorepo path -WORKDIR /app/src/systems/forge/service -RUN bun prisma generate -RUN bun run server:build - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge +RUN cd /app && bun x nx run @metorial/forge:server:build +FROM build AS workspace WORKDIR /app/src/systems/forge/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for health checks RUN apk add --no-cache curl - -# Copy built output, Prisma assets, and hoisted dependencies -COPY --from=builder /app/src/systems/forge/service/dist /app/dist -COPY --from=builder /app/src/systems/forge/service/prisma /app/prisma -COPY --from=builder /app/src/systems/forge/service/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - -# Expose port +COPY --from=build /app/src/systems/forge/service/dist /app/dist +COPY --from=build /app/src/systems/forge/service/prisma /app/prisma +COPY --from=build /app/src/systems/forge/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52020 - -# Health check using curl -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ - CMD curl -f http://localhost:52020/ping && curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52020/ping && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/forge/service/Dockerfile.generated b/src/systems/forge/service/Dockerfile.generated new file mode 100644 index 000000000..f935c6625 --- /dev/null +++ b/src/systems/forge/service/Dockerfile.generated @@ -0,0 +1,27 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge +RUN cd /app && bun x nx run @metorial/forge:server:build +FROM build AS workspace +WORKDIR /app/src/systems/forge/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/forge/service/dist /app/dist +COPY --from=build /app/src/systems/forge/service/prisma /app/prisma +COPY --from=build /app/src/systems/forge/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52020 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52020/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/forge/service/control.toml b/src/systems/forge/service/control.toml index 96da0000e..df00db40a 100644 --- a/src/systems/forge/service/control.toml +++ b/src/systems/forge/service/control.toml @@ -3,9 +3,39 @@ name = "forge" [service] port = 52020 -dockerfile = "src/systems/forge/service/Dockerfile" +dockerfile = "src/systems/forge/service/Dockerfile.generated" build_context = "oss" +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/forge" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "forge-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/forge"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52020] +command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52020/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/function-bay/deflector/Dockerfile.generated b/src/systems/function-bay/deflector/Dockerfile.generated new file mode 100644 index 000000000..69422ca45 --- /dev/null +++ b/src/systems/function-bay/deflector/Dockerfile.generated @@ -0,0 +1,23 @@ +# generated by control bootstrap +FROM golang:1.24-alpine AS deps +WORKDIR /app +RUN apk add --no-cache git ca-certificates +COPY src/systems/function-bay/deflector/go.mod ./src/systems/function-bay/deflector/ +COPY src/systems/function-bay/deflector/go.sum ./src/systems/function-bay/deflector/ +RUN go mod download +FROM deps AS build +WORKDIR /app +COPY src/systems/function-bay/deflector/cmd ./src/systems/function-bay/deflector/ +COPY src/systems/function-bay/deflector/internal ./src/systems/function-bay/deflector/ +RUN cd /app/src/systems/function-bay/deflector && CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /tmp/deflector ./cmd/deflector +FROM build AS workspace +WORKDIR /app/src/systems/function-bay/deflector +CMD ["sleep", "infinity"] +FROM alpine:3.22 AS runner +WORKDIR /app +RUN apk add --no-cache ca-certificates wget +COPY --from=build /tmp/deflector /usr/local/bin/deflector +EXPOSE 8080 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD wget -qO- http://localhost:8080/healthz >/dev/null || exit 1 +CMD ["/usr/local/bin/deflector"] diff --git a/src/systems/function-bay/deflector/control.toml b/src/systems/function-bay/deflector/control.toml index 6b81da25c..9fd46ca1f 100644 --- a/src/systems/function-bay/deflector/control.toml +++ b/src/systems/function-bay/deflector/control.toml @@ -7,6 +7,41 @@ dockerfile = "src/systems/function-bay/deflector/Dockerfile" build_context = "oss" health = { path = "/healthz" } +[build] +builder = "go" +mode = "generated" +context = "oss" +dockerfile = "Dockerfile.generated" + +[build.manifests] +files = [ + "go.mod", + "go.sum" +] + +[build.inputs] +paths = [ + "cmd/**", + "internal/**" +] + +[build.main] +steps = [ + { run = "CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags=\"-s -w\" -o /tmp/deflector ./cmd/deflector" } +] + +[build.artifacts] +copy = [ + { from = "/tmp/deflector", to = "/usr/local/bin/deflector" } +] + +[build.runtime] +base_image = "alpine:3.22" +packages = ["ca-certificates", "wget"] +expose = [8080] +command = "/usr/local/bin/deflector" +healthcheck = "wget -qO- http://localhost:8080/healthz >/dev/null || exit 1" + [test.unit] command = "go test ./..." cwd = "/app/src/systems/function-bay/deflector" diff --git a/src/systems/function-bay/scripts/prepare-docker-build.sh b/src/systems/function-bay/scripts/prepare-docker-build.sh deleted file mode 100644 index 917577ff1..000000000 --- a/src/systems/function-bay/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -# Install from the OSS workspace so function-bay resolves local workspace -# packages before the service bundle is built. -bun install --linker=hoisted - -bun run --cwd ./src/systems/forge/service db:generate - -sh ./src/systems/scripts/build-workspace-clients.sh - -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client -bunx turbo run --ui=stream build --filter=./src/systems/function-bay/packages/** diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index e4de4294d..54b7f87fe 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -1,47 +1,27 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads and prepare workspace packages. -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/function-bay/scripts/prepare-docker-build.sh - -# Generate Prisma client and build the service from the monorepo path. -WORKDIR /app/src/systems/function-bay/service -RUN bun prisma generate -RUN bun run server:build - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay +RUN cd /app && bun x nx run @metorial/function-bay:server:build +FROM build AS workspace WORKDIR /app/src/systems/function-bay/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for health checks RUN apk add --no-cache curl - -# Copy built output, Prisma assets, and hoisted dependencies. -COPY --from=builder /app/src/systems/function-bay/service/dist /app/dist -COPY --from=builder /app/src/systems/function-bay/service/prisma /app/prisma -COPY --from=builder /app/src/systems/function-bay/service/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - -# Expose port +COPY --from=build /app/src/systems/function-bay/service/dist /app/dist +COPY --from=build /app/src/systems/function-bay/service/prisma /app/prisma +COPY --from=build /app/src/systems/function-bay/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52030 - -# Health check using curl -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ - CMD curl -f http://localhost:52030/ping && curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52030/ping && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/function-bay/service/Dockerfile.generated b/src/systems/function-bay/service/Dockerfile.generated new file mode 100644 index 000000000..54b7f87fe --- /dev/null +++ b/src/systems/function-bay/service/Dockerfile.generated @@ -0,0 +1,27 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay +RUN cd /app && bun x nx run @metorial/function-bay:server:build +FROM build AS workspace +WORKDIR /app/src/systems/function-bay/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/function-bay/service/dist /app/dist +COPY --from=build /app/src/systems/function-bay/service/prisma /app/prisma +COPY --from=build /app/src/systems/function-bay/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52030 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52030/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/function-bay/service/control.toml b/src/systems/function-bay/service/control.toml index be000b221..3135f71a1 100644 --- a/src/systems/function-bay/service/control.toml +++ b/src/systems/function-bay/service/control.toml @@ -3,9 +3,39 @@ name = "function-bay" [service] port = 52030 -dockerfile = "src/systems/function-bay/service/Dockerfile" +dockerfile = "src/systems/function-bay/service/Dockerfile.generated" build_context = "oss" +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/function-bay" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "function-bay-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/function-bay", "@metorial/forge"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52030] +command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52030/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/object-storage/service/Dockerfile.generated b/src/systems/object-storage/service/Dockerfile.generated new file mode 100644 index 000000000..f1e236654 --- /dev/null +++ b/src/systems/object-storage/service/Dockerfile.generated @@ -0,0 +1,35 @@ +# generated by control bootstrap +FROM rust:1.91-slim AS builder-base +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + pkg-config \ + libssl-dev && rm -rf /var/lib/apt/lists/* +FROM builder-base AS deps +WORKDIR /app +COPY src/systems/object-storage/service/Cargo.lock ./src/systems/object-storage/service/ +COPY src/systems/object-storage/service/Cargo.toml ./src/systems/object-storage/service/ +COPY src/systems/object-storage/service/object-store-backends/Cargo.toml ./src/systems/object-storage/service/object-store-backends/ +COPY src/systems/object-storage/service/object-store/Cargo.toml ./src/systems/object-storage/service/object-store/ +RUN cd /app/src/systems/object-storage/service && mkdir -p object-store/src object-store-backends/src && echo "fn main() {}" > object-store/src/main.rs && echo "pub fn dummy() {}" > object-store/src/lib.rs && echo "pub fn dummy() {}" > object-store-backends/src/lib.rs && cargo build --release && rm -rf object-store/src object-store-backends/src +FROM deps AS build +WORKDIR /app +COPY src/systems/object-storage/service/object-store ./src/systems/object-storage/service/ +COPY src/systems/object-storage/service/object-store-backends ./src/systems/object-storage/service/ +RUN cd /app/src/systems/object-storage/service && cargo build --release --bin object-store-service +FROM build AS workspace +WORKDIR /app/src/systems/object-storage/service +CMD ["sleep", "infinity"] +FROM debian:trixie-slim AS runner +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + libssl3 \ + curl && rm -rf /var/lib/apt/lists/* +COPY --from=build /app/src/systems/object-storage/service/target/release/object-store-service /app/object-store-service +ENV RUST_LOG="info" +ENV OBJECT_STORE_BACKEND_TYPE="local" +ENV OBJECT_STORE_BACKEND_ROOT_PATH="/app/data" +EXPOSE 52010 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52010/health || exit 1 +CMD ["/app/object-store-service"] diff --git a/src/systems/object-storage/service/control.toml b/src/systems/object-storage/service/control.toml index 2ad73cfba..1cee7d626 100644 --- a/src/systems/object-storage/service/control.toml +++ b/src/systems/object-storage/service/control.toml @@ -7,6 +7,52 @@ dockerfile = "src/systems/object-storage/service/Dockerfile" build_context = "oss" health = { path = "/health" } +[build] +builder = "rust" +mode = "generated" +context = "oss" +dockerfile = "Dockerfile.generated" + +[build.install] +system_packages = ["pkg-config", "libssl-dev"] + +[build.manifests] +files = [ + "Cargo.toml", + "Cargo.lock", + "object-store/Cargo.toml", + "object-store-backends/Cargo.toml" +] + +[build.inputs] +paths = [ + "object-store/**", + "object-store-backends/**" +] + +[build.prebuild] +steps = [ + { run = "mkdir -p object-store/src object-store-backends/src && echo \"fn main() {}\" > object-store/src/main.rs && echo \"pub fn dummy() {}\" > object-store/src/lib.rs && echo \"pub fn dummy() {}\" > object-store-backends/src/lib.rs && cargo build --release && rm -rf object-store/src object-store-backends/src", mode = "cache-warm" } +] + +[build.main] +steps = [ + { run = "cargo build --release --bin object-store-service" } +] + +[build.artifacts] +copy = [ + { from = "target/release/object-store-service", to = "/app/object-store-service" } +] + +[build.runtime] +base_image = "debian:trixie-slim" +packages = ["ca-certificates", "libssl3", "curl"] +env = { RUST_LOG = "info", OBJECT_STORE_BACKEND_TYPE = "local", OBJECT_STORE_BACKEND_ROOT_PATH = "/app/data" } +expose = [52010] +command = "/app/object-store-service" +healthcheck = "curl -f http://localhost:52010/health || exit 1" + [test.unit] command = "cargo test -p object-store --test integration_test -- --test-threads=1" cwd = "/app/src/systems/object-storage/service" diff --git a/src/systems/origin/apps/code-bucket/Dockerfile.generated b/src/systems/origin/apps/code-bucket/Dockerfile.generated new file mode 100644 index 000000000..0421e2552 --- /dev/null +++ b/src/systems/origin/apps/code-bucket/Dockerfile.generated @@ -0,0 +1,37 @@ +# generated by control bootstrap +FROM oven/bun:1.2-alpine AS deps +WORKDIR /app +RUN apk add --no-cache go git ca-certificates +COPY oss/src/systems/origin/apps/code-bucket/go.mod ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/go.sum ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/package.json ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-workspace/extensions/memfs/package.json ./oss/src/systems/origin/apps/code-workspace/extensions/memfs/ +COPY oss/src/systems/origin/apps/code-workspace/package.json ./oss/src/systems/origin/apps/code-workspace/ +RUN go mod download +FROM deps AS build +WORKDIR /app +COPY oss/src/systems/origin/apps/code-bucket/cmd ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/gen ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/index.ts ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/internal ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/pkg ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/proto ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/scripts ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/ts-proto-gen ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-workspace ./oss/src/systems/origin/apps/ +COPY oss/src/systems/origin/scripts/build-code-workspace.sh ./oss/src/systems/origin/scripts/ +RUN cd /app/oss/src/systems/origin/apps/code-bucket && sh ../../scripts/build-code-workspace.sh +RUN cd /app/oss/src/systems/origin/apps/code-bucket && CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /tmp/code-bucket ./cmd/server +FROM build AS workspace +WORKDIR /app/oss/src/systems/origin/apps/code-bucket +CMD ["sleep", "infinity"] +FROM alpine:latest AS runner +WORKDIR /app +RUN apk add --no-cache ca-certificates tzdata netcat-openbsd +COPY --from=build /tmp/code-bucket /app/code-bucket +EXPOSE 52091 +EXPOSE 52092 +EXPOSE 5050 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD nc -z localhost 52091 || exit 1 +CMD ["/app/code-bucket"] diff --git a/src/systems/origin/apps/code-bucket/control.toml b/src/systems/origin/apps/code-bucket/control.toml index e771530de..381007c20 100644 --- a/src/systems/origin/apps/code-bucket/control.toml +++ b/src/systems/origin/apps/code-bucket/control.toml @@ -7,6 +7,63 @@ dockerfile = "src/systems/origin/apps/code-bucket/Dockerfile" build_context = "oss" health = { cmd = "nc -z localhost 52091" } +[build] +builder = "go" +mode = "generated" +context = "repo" +dockerfile = "Dockerfile.generated" + +[build.builder_image] +image = "oven/bun:1.2-alpine" + +[build.install] +system_packages = ["go", "git", "ca-certificates"] + +[build.manifests] +files = [ + "go.mod", + "go.sum", + "package.json", + "../code-workspace/package.json", + "../code-workspace/extensions/memfs/package.json" +] + +[build.inputs] +paths = [ + "cmd/**", + "gen/**", + "internal/**", + "pkg/**", + "proto/**", + "index.ts", + "scripts/**", + "ts-proto-gen/**", + "../code-workspace/**", + "../../scripts/build-code-workspace.sh" +] + +[build.prebuild] +steps = [ + { run = "sh ../../scripts/build-code-workspace.sh" } +] + +[build.main] +steps = [ + { run = "CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /tmp/code-bucket ./cmd/server" } +] + +[build.artifacts] +copy = [ + { from = "/tmp/code-bucket", to = "/app/code-bucket" } +] + +[build.runtime] +base_image = "alpine:latest" +packages = ["ca-certificates", "tzdata", "netcat-openbsd"] +expose = [52091, 52092, 5050] +command = "/app/code-bucket" +healthcheck = "nc -z localhost 52091 || exit 1" + [test.unit] command = "go test ./..." setup = ["sh ../../scripts/build-code-workspace.sh"] diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index 0111149e2..c09795a2b 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -1,47 +1,28 @@ -# Build stage — Docker context is the OSS monorepo root (./oss). -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -COPY . . - -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/origin/scripts/prepare-docker-build.sh - -WORKDIR /app/src/systems/origin/apps/service - -RUN mkdir -p ./node_modules/@metorial/code-bucket-service-generated && \ - cp ../code-bucket/package.json ../code-bucket/index.ts ./node_modules/@metorial/code-bucket-service-generated/ && \ - cp -r ../code-bucket/ts-proto-gen ./node_modules/@metorial/code-bucket-service-generated/ts-proto-gen - -RUN bunx prisma generate -RUN bun run server:build - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin +RUN cd /app && bun x nx run @metorial/origin:server:build +FROM build AS workspace WORKDIR /app/src/systems/origin/apps/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - RUN apk add --no-cache curl - -COPY --from=builder /app/src/systems/origin/apps/service/dist /app/dist -COPY --from=builder /app/src/systems/origin/apps/service/prisma /app/prisma -COPY --from=builder /app/src/systems/origin/apps/service/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - -ENV NODE_ENV=production - +COPY --from=build /app/src/systems/origin/apps/service/dist /app/dist +COPY --from=build /app/src/systems/origin/apps/service/prisma /app/prisma +COPY --from=build /app/src/systems/origin/apps/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52090 EXPOSE 52093 - -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:52090/ping && curl -f http://localhost:12121/ || exit 1 - CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/origin/apps/service/Dockerfile.generated b/src/systems/origin/apps/service/Dockerfile.generated new file mode 100644 index 000000000..c09795a2b --- /dev/null +++ b/src/systems/origin/apps/service/Dockerfile.generated @@ -0,0 +1,28 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin +RUN cd /app && bun x nx run @metorial/origin:server:build +FROM build AS workspace +WORKDIR /app/src/systems/origin/apps/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/origin/apps/service/dist /app/dist +COPY --from=build /app/src/systems/origin/apps/service/prisma /app/prisma +COPY --from=build /app/src/systems/origin/apps/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52090 +EXPOSE 52093 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52090/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/origin/apps/service/control.toml b/src/systems/origin/apps/service/control.toml index fdd1d4956..fe3ec9594 100644 --- a/src/systems/origin/apps/service/control.toml +++ b/src/systems/origin/apps/service/control.toml @@ -3,10 +3,40 @@ name = "origin" [service] port = 52090 -dockerfile = "src/systems/origin/apps/service/Dockerfile" +dockerfile = "src/systems/origin/apps/service/Dockerfile.generated" build_context = "oss" health = { path = "/ping" } +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/origin" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "origin-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/origin"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52090, 52093] +command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52090/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/origin/apps/service/package.json b/src/systems/origin/apps/service/package.json index 1234547e7..bb26e00e3 100644 --- a/src/systems/origin/apps/service/package.json +++ b/src/systems/origin/apps/service/package.json @@ -34,6 +34,7 @@ "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", "@bufbuild/protobuf": "^2.11.0", + "@metorial/code-bucket-service-generated": "workspace:*", "@gitbeaker/rest": "^43.8.0", "@grpc/grpc-js": "^1.13.4", "@octokit/auth-app": "^8.1.2", diff --git a/src/systems/origin/scripts/prepare-docker-build.sh b/src/systems/origin/scripts/prepare-docker-build.sh deleted file mode 100755 index 91d6a749e..000000000 --- a/src/systems/origin/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -# Install the monorepo once so Docker builds do not depend on host node_modules. -bun install --linker=hoisted - -sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/relay/scripts/prepare-docker-build.sh b/src/systems/relay/scripts/prepare-docker-build.sh deleted file mode 100755 index 37fd5e952..000000000 --- a/src/systems/relay/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -bun install --linker=hoisted - -sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 5e57a9f9d..4f4c87185 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -1,40 +1,27 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -COPY . . - -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/relay/scripts/prepare-docker-build.sh - -WORKDIR /app/src/systems/relay/service -RUN bun prisma generate -RUN bun run server:build - -FROM builder AS workspace - +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/relay +RUN cd /app && bun x nx run @metorial/relay:server:build +FROM build AS workspace WORKDIR /app/src/systems/relay/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - RUN apk add --no-cache curl - -COPY --from=builder /app/src/systems/relay/service/dist /app/dist -COPY --from=builder /app/src/systems/relay/service/prisma /app/prisma -COPY --from=builder /app/src/systems/relay/service/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - +COPY --from=build /app/src/systems/relay/service/dist /app/dist +COPY --from=build /app/src/systems/relay/service/prisma /app/prisma +COPY --from=build /app/src/systems/relay/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52110 - -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ - CMD curl -f http://localhost:52110/metorial-relay && curl -f http://localhost:12121/ || exit 1 - +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52110/metorial-relay && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/relay/service/Dockerfile.generated b/src/systems/relay/service/Dockerfile.generated new file mode 100644 index 000000000..4f4c87185 --- /dev/null +++ b/src/systems/relay/service/Dockerfile.generated @@ -0,0 +1,27 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/relay +RUN cd /app && bun x nx run @metorial/relay:server:build +FROM build AS workspace +WORKDIR /app/src/systems/relay/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/relay/service/dist /app/dist +COPY --from=build /app/src/systems/relay/service/prisma /app/prisma +COPY --from=build /app/src/systems/relay/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52110 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52110/metorial-relay && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/relay/service/control.toml b/src/systems/relay/service/control.toml index 935e868a7..5cc2b6621 100644 --- a/src/systems/relay/service/control.toml +++ b/src/systems/relay/service/control.toml @@ -3,10 +3,40 @@ name = "relay" [service] port = 52110 -dockerfile = "src/systems/relay/service/Dockerfile" +dockerfile = "src/systems/relay/service/Dockerfile.generated" build_context = "oss" health = { cmd = "bun -e \"fetch('http://localhost:12121/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/relay" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "relay-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/relay"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52110] +command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52110/metorial-relay && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/scripts/build-workspace-clients.sh b/src/systems/scripts/build-workspace-clients.sh deleted file mode 100755 index 27ee6d15e..000000000 --- a/src/systems/scripts/build-workspace-clients.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -set -eu - -SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" -OSS_ROOT="$(CDPATH= cd -- "$SCRIPT_DIR/../../.." && pwd)" - -cd "$OSS_ROOT" - -# Build platform system clients consumed across services. These packages have no -# generated-service dependencies and are safe to build in any CI/Docker step. -bunx turbo run --ui=stream build \ - --filter=@metorial-platform-systems/object-storage-client \ - --filter=@metorial-platform-systems/voyager-client \ - --filter=@metorial-platform-systems/relay-client diff --git a/src/systems/shuttle/scripts/prepare-docker-build.sh b/src/systems/shuttle/scripts/prepare-docker-build.sh deleted file mode 100644 index 71f3e7b6a..000000000 --- a/src/systems/shuttle/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -# Install from the OSS workspace so Shuttle resolves the local SDK packages -# before the service bundle is built. -bun install --linker=hoisted - -bun run --cwd ./src/systems/forge/service db:generate -bun run --cwd ./src/systems/function-bay/service db:generate - -sh ./src/systems/scripts/build-workspace-clients.sh - -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client -bunx turbo run --ui=stream build --filter=@metorial/mcp-server diff --git a/src/systems/shuttle/sdk/package.json b/src/systems/shuttle/sdk/package.json index b303fe11b..7b5caece2 100644 --- a/src/systems/shuttle/sdk/package.json +++ b/src/systems/shuttle/sdk/package.json @@ -2,12 +2,12 @@ "name": "@metorial/root", "private": true, "scripts": { - "_test": "turbo run --concurrency=1 --ui=stream test", - "_build": "turbo run --concurrency=1 --ui=stream build" + "_test": "bun x nx run-many --target=test --all --parallel=1", + "_build": "bun x nx run-many --target=build --all" }, "devDependencies": { + "nx": "^22.7.3", "prettier": "^3.5.3", - "turbo": "^2.5.5", "typescript": "5.8.2" }, "engines": { @@ -21,4 +21,4 @@ "dependencies": { "npm-run-all": "^4.1.5" } -} \ No newline at end of file +} diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index 4886ee7b6..5eece85e3 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -1,48 +1,28 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads and prepare Shuttle SDK packages. -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/shuttle/scripts/prepare-docker-build.sh - -# Generate Prisma client and build the service from the monorepo path. -WORKDIR /app/src/systems/shuttle/service -RUN bun prisma generate -RUN bun run server:build - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle +RUN cd /app && bun x nx run @metorial/shuttle:server:build +FROM build AS workspace WORKDIR /app/src/systems/shuttle/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for health checks RUN apk add --no-cache curl - -# Copy built output, Prisma assets, and hoisted dependencies. -COPY --from=builder /app/src/systems/shuttle/service/dist /app/dist -COPY --from=builder /app/src/systems/shuttle/service/prisma /app/prisma -COPY --from=builder /app/src/systems/shuttle/service/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - -# Expose port +COPY --from=build /app/src/systems/shuttle/service/dist /app/dist +COPY --from=build /app/src/systems/shuttle/service/prisma /app/prisma +COPY --from=build /app/src/systems/shuttle/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52080 EXPOSE 52081 - -# Health check using curl -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ - CMD curl -f http://localhost:52080/ping && curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52080/ping && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/shuttle/service/Dockerfile.generated b/src/systems/shuttle/service/Dockerfile.generated new file mode 100644 index 000000000..5eece85e3 --- /dev/null +++ b/src/systems/shuttle/service/Dockerfile.generated @@ -0,0 +1,28 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle +RUN cd /app && bun x nx run @metorial/shuttle:server:build +FROM build AS workspace +WORKDIR /app/src/systems/shuttle/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/shuttle/service/dist /app/dist +COPY --from=build /app/src/systems/shuttle/service/prisma /app/prisma +COPY --from=build /app/src/systems/shuttle/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52080 +EXPOSE 52081 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52080/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/shuttle/service/control.toml b/src/systems/shuttle/service/control.toml index fdb6cec16..54d80197e 100644 --- a/src/systems/shuttle/service/control.toml +++ b/src/systems/shuttle/service/control.toml @@ -3,9 +3,39 @@ name = "shuttle" [service] port = 52080 -dockerfile = "src/systems/shuttle/service/Dockerfile" +dockerfile = "src/systems/shuttle/service/Dockerfile.generated" build_context = "oss" +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/shuttle" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "shuttle-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/shuttle", "@metorial/forge", "@metorial/function-bay"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52080, 52081] +command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52080/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/signal/scripts/prepare-docker-build.sh b/src/systems/signal/scripts/prepare-docker-build.sh deleted file mode 100644 index bb67f06f7..000000000 --- a/src/systems/signal/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -# Install from the OSS workspace so local Signal packages resolve from the -# monorepo instead of published artifacts. -bun install --linker=hoisted - -sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index 52ff2ae6f..60a530626 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -1,47 +1,27 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads and prepare Signal packages. -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/signal/scripts/prepare-docker-build.sh - -# Generate Prisma client and build the service from the monorepo path. -WORKDIR /app/src/systems/signal/service -RUN bun prisma generate -RUN bun run server:build - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/signal +RUN cd /app && bun x nx run @metorial/signal:server:build +FROM build AS workspace WORKDIR /app/src/systems/signal/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for health checks RUN apk add --no-cache curl - -# Copy built output, Prisma assets, and hoisted dependencies. -COPY --from=builder /app/src/systems/signal/service/dist /app/dist -COPY --from=builder /app/src/systems/signal/service/prisma /app/prisma -COPY --from=builder /app/src/systems/signal/service/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - -# Expose port +COPY --from=build /app/src/systems/signal/service/dist /app/dist +COPY --from=build /app/src/systems/signal/service/prisma /app/prisma +COPY --from=build /app/src/systems/signal/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52030 - -# Health check using curl -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ - CMD curl -f http://localhost:52050/ping && curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52050/ping && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/signal/service/Dockerfile.generated b/src/systems/signal/service/Dockerfile.generated new file mode 100644 index 000000000..60a530626 --- /dev/null +++ b/src/systems/signal/service/Dockerfile.generated @@ -0,0 +1,27 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/signal +RUN cd /app && bun x nx run @metorial/signal:server:build +FROM build AS workspace +WORKDIR /app/src/systems/signal/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/signal/service/dist /app/dist +COPY --from=build /app/src/systems/signal/service/prisma /app/prisma +COPY --from=build /app/src/systems/signal/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52030 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52050/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/signal/service/control.toml b/src/systems/signal/service/control.toml index 7a54e2222..df974f50c 100644 --- a/src/systems/signal/service/control.toml +++ b/src/systems/signal/service/control.toml @@ -3,9 +3,39 @@ name = "signal" [service] port = 52050 -dockerfile = "src/systems/signal/service/Dockerfile" +dockerfile = "src/systems/signal/service/Dockerfile.generated" build_context = "oss" +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/signal" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "signal-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/signal"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52030] +command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52050/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index c567fe291..7f264b123 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -1,52 +1,30 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads and prepare Slates packages. -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/slates/scripts/prepare-docker-build.sh - -# Build the hub app from the monorepo path. -WORKDIR /app/src/systems/slates/apps/hub -RUN bun prisma generate -RUN bun run admin:build -RUN bun run server:build - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates +RUN cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates +RUN cd /app && bun x nx run @metorial/slates:server:build +FROM build AS workspace WORKDIR /app/src/systems/slates/apps/hub CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for health checks RUN apk add --no-cache curl - -# Copy built output, Prisma assets, and hoisted dependencies. -COPY --from=builder /app/src/systems/slates/apps/hub/dist /app/dist -COPY --from=builder /app/src/systems/slates/apps/hub/prisma /app/prisma -COPY --from=builder /app/src/systems/slates/apps/hub/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - -# Expose port +COPY --from=build /app/src/systems/slates/apps/hub/dist /app/dist +COPY --from=build /app/src/systems/slates/apps/hub/admin/dist /app/admin/dist +COPY --from=build /app/src/systems/slates/apps/hub/prisma /app/prisma +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52045 EXPOSE 52046 EXPOSE 52047 - -# Health check using curl -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \ - CMD curl -f http://localhost:52045/ping && \ - curl -f http://localhost:52046/ping && \ - curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52045/ping && curl -f http://localhost:52046/ping && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/slates/apps/hub/Dockerfile.generated b/src/systems/slates/apps/hub/Dockerfile.generated new file mode 100644 index 000000000..7f264b123 --- /dev/null +++ b/src/systems/slates/apps/hub/Dockerfile.generated @@ -0,0 +1,30 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates +RUN cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates +RUN cd /app && bun x nx run @metorial/slates:server:build +FROM build AS workspace +WORKDIR /app/src/systems/slates/apps/hub +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/slates/apps/hub/dist /app/dist +COPY --from=build /app/src/systems/slates/apps/hub/admin/dist /app/admin/dist +COPY --from=build /app/src/systems/slates/apps/hub/prisma /app/prisma +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52045 +EXPOSE 52046 +EXPOSE 52047 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52045/ping && curl -f http://localhost:52046/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml index 96cd5ac31..f2a963190 100644 --- a/src/systems/slates/apps/hub/control.toml +++ b/src/systems/slates/apps/hub/control.toml @@ -3,9 +3,45 @@ name = "slates-hub" [service] port = 52045 -dockerfile = "src/systems/slates/apps/hub/Dockerfile" +dockerfile = "src/systems/slates/apps/hub/Dockerfile.generated" build_context = "oss" +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/slates" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "slates-hub-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/slates", "@metorial/forge", "@metorial/function-bay", "@metorial/signal", "@metorial/ares"] + +[[build.automations]] +name = "slates-hub-admin" +kind = "run-targets" +target = "admin:build" +projects = ["@metorial/slates"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "admin/dist", to = "/app/admin/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52045, 52046, 52047] +command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52045/ping && curl -f http://localhost:52046/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 3436f8b07..d463fe93c 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -1,52 +1,30 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads and prepare Slates packages. -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/slates/scripts/prepare-docker-build.sh - -# Build the registry app from the monorepo path. -WORKDIR /app/src/systems/slates/apps/registry -RUN bun prisma generate -RUN bun run admin:build -RUN bun run server:build - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry +RUN cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry +RUN cd /app && bun x nx run @metorial/slates-registry:server:build +FROM build AS workspace WORKDIR /app/src/systems/slates/apps/registry CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for health checks RUN apk add --no-cache curl - -# Copy built output, Prisma assets, and hoisted dependencies. -COPY --from=builder /app/src/systems/slates/apps/registry/dist /app/dist -COPY --from=builder /app/src/systems/slates/apps/registry/prisma /app/prisma -COPY --from=builder /app/src/systems/slates/apps/registry/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - -# Expose ports +COPY --from=build /app/src/systems/slates/apps/registry/dist /app/dist +COPY --from=build /app/src/systems/slates/apps/registry/admin/dist /app/admin/dist +COPY --from=build /app/src/systems/slates/apps/registry/prisma /app/prisma +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52040 EXPOSE 52041 EXPOSE 52042 - -# Health check using curl -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \ - CMD curl -f http://localhost:52040/ping && \ - curl -f http://localhost:52041/ping && \ - curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52040/ping && curl -f http://localhost:52041/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --schema prisma/schema.prisma --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/slates/apps/registry/Dockerfile.generated b/src/systems/slates/apps/registry/Dockerfile.generated new file mode 100644 index 000000000..d463fe93c --- /dev/null +++ b/src/systems/slates/apps/registry/Dockerfile.generated @@ -0,0 +1,30 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry +RUN cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry +RUN cd /app && bun x nx run @metorial/slates-registry:server:build +FROM build AS workspace +WORKDIR /app/src/systems/slates/apps/registry +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/slates/apps/registry/dist /app/dist +COPY --from=build /app/src/systems/slates/apps/registry/admin/dist /app/admin/dist +COPY --from=build /app/src/systems/slates/apps/registry/prisma /app/prisma +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52040 +EXPOSE 52041 +EXPOSE 52042 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52040/ping && curl -f http://localhost:52041/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --schema prisma/schema.prisma --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/slates/apps/registry/control.toml b/src/systems/slates/apps/registry/control.toml index b623e9c51..d52db7bba 100644 --- a/src/systems/slates/apps/registry/control.toml +++ b/src/systems/slates/apps/registry/control.toml @@ -3,10 +3,46 @@ name = "slates-registry" [service] port = 52040 -dockerfile = "src/systems/slates/apps/registry/Dockerfile" +dockerfile = "src/systems/slates/apps/registry/Dockerfile.generated" build_context = "oss" health = { path = "/ping" } +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/slates-registry" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "slates-registry-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/slates-registry"] + +[[build.automations]] +name = "slates-registry-admin" +kind = "run-targets" +target = "admin:build" +projects = ["@metorial/slates-registry"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "admin/dist", to = "/app/admin/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52040, 52041, 52042] +command = "bun prisma db push --schema prisma/schema.prisma --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52040/ping && curl -f http://localhost:52041/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/slates/scripts/prepare-docker-build.sh b/src/systems/slates/scripts/prepare-docker-build.sh deleted file mode 100644 index fc8b150b7..000000000 --- a/src/systems/slates/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -# Install from the OSS workspace so local Slates packages resolve from the -# monorepo instead of published artifacts. -bun install --linker=hoisted - -bun run --cwd ./src/systems/forge/service db:generate -bun run --cwd ./src/systems/function-bay/service db:generate -bun run --cwd ./src/systems/signal/service db:generate -bun run --cwd ./src/systems/ares/service db:generate - -sh ./src/systems/scripts/build-workspace-clients.sh - -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/ares-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/signal-client - -# bunx turbo run --ui=stream build --filter=@slates/proto diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index 1c0b78fc5..e63fe7f5f 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -1,63 +1,26 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads and prepare required workspaces. -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/subspace/scripts/prepare-docker-build.sh - -# Generate Prisma client -WORKDIR /app/src/systems/subspace/db -RUN bunx prisma generate - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Build the application using ncc -# This bundles all dependencies into a single file -WORKDIR /app/src/systems/subspace/apps/controller -# Temporarily use the build-friendly tsconfig -RUN mv tsconfig.json tsconfig.json.bak && \ - mv tsconfig.build.json tsconfig.json && \ - bun run server:build; \ - BUILD_EXIT_CODE=$?; \ - mv tsconfig.json tsconfig.build.json && \ - mv tsconfig.json.bak tsconfig.json; \ - exit $BUILD_EXIT_CODE - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN cd /app && bun x nx run @metorial-subspace/app-controller:server:build +FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/controller CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for healthcheck RUN apk add --no-cache curl - -# Copy the built application from builder -COPY --from=builder /app/src/systems/subspace/apps/controller/dist /app/dist - -# Copy prisma schema and generated client from builder -COPY --from=builder /app/src/systems/subspace/db /app/db - -# Copy entire node_modules from builder to ensure prisma has all dependencies -COPY --from=builder /app/node_modules /app/node_modules - -# Set environment to production -ENV NODE_ENV=production - -# Expose the port the app runs on +COPY --from=build /app/src/systems/subspace/apps/controller/dist /app/dist +COPY --from=build /app/src/systems/subspace/db /app/db +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52070 - -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \ +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:52070/ping && curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service -CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] \ No newline at end of file +CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] diff --git a/src/systems/subspace/apps/controller/Dockerfile.generated b/src/systems/subspace/apps/controller/Dockerfile.generated new file mode 100644 index 000000000..e63fe7f5f --- /dev/null +++ b/src/systems/subspace/apps/controller/Dockerfile.generated @@ -0,0 +1,26 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN cd /app && bun x nx run @metorial-subspace/app-controller:server:build +FROM build AS workspace +WORKDIR /app/src/systems/subspace/apps/controller +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/subspace/apps/controller/dist /app/dist +COPY --from=build /app/src/systems/subspace/db /app/db +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52070 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52070/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index 80ce61257..5627a0a42 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -3,9 +3,38 @@ name = "subspace-controller" [service] port = 52070 -dockerfile = "src/systems/subspace/apps/controller/Dockerfile" +dockerfile = "src/systems/subspace/apps/controller/Dockerfile.generated" build_context = "oss" +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial-subspace/app-controller" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "subspace-controller-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial-subspace/db", "@metorial/slates", "@metorial/forge", "@metorial/function-bay", "@metorial/signal", "@metorial/synthesis", "@metorial-cargo/service"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "../../db", to = "/app/db" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52070] +command = "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js" +healthcheck = "curl -f http://localhost:52070/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index 750dd89e4..d85ef3c79 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -1,73 +1,29 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads and prepare required workspaces. -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/subspace/scripts/prepare-docker-build.sh -RUN bun run --cwd ./src/packages/frontend/ui build - -# Generate Prisma client -WORKDIR /app/src/systems/subspace/db -RUN bunx prisma generate - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Build the application using ncc -# This bundles all dependencies into a single file -WORKDIR /app/src/systems/subspace/apps/public -RUN bun run frontend:build -# Remove frontend source (not needed for backend bundle, only dist is needed at runtime) -RUN rm -rf frontend/src frontend/tsconfig.* frontend/vite.config.ts frontend/index.html -# Temporarily use the build-friendly tsconfig -RUN mv tsconfig.json tsconfig.json.bak && \ - mv tsconfig.build.json tsconfig.json && \ - bun run server:build; \ - BUILD_EXIT_CODE=$?; \ - mv tsconfig.json tsconfig.build.json && \ - mv tsconfig.json.bak tsconfig.json; \ - exit $BUILD_EXIT_CODE - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public +RUN cd /app && bun x nx run @metorial-subspace/app-public:server:build +FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/public CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for healthcheck RUN apk add --no-cache curl - -# Copy the built application from builder -COPY --from=builder /app/src/systems/subspace/apps/public/dist /app/dist - -# Copy the frontend dist directory -COPY --from=builder /app/src/systems/subspace/apps/public/frontend/dist /app/frontend/dist - -# Copy prisma schema and generated client from builder -COPY --from=builder /app/src/systems/subspace/db /app/db - -# Copy the built @metorial/ui workspace package so Bun workspace links remain valid. -COPY --from=builder /app/src/packages/frontend/ui /app/src/packages/frontend/ui - -# Copy entire node_modules from builder to ensure prisma has all dependencies -COPY --from=builder /app/node_modules /app/node_modules - -# Set environment to production -ENV NODE_ENV=production - -# Expose the port the app runs on +COPY --from=build /app/src/systems/subspace/apps/public/dist /app/dist +COPY --from=build /app/src/systems/subspace/apps/public/frontend/dist /app/frontend/dist +COPY --from=build /app/src/systems/subspace/db /app/db +COPY --from=build /app/src/packages/frontend/ui /app/src/packages/frontend/ui +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52071 - -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \ +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:52071/ping && curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] diff --git a/src/systems/subspace/apps/public/Dockerfile.generated b/src/systems/subspace/apps/public/Dockerfile.generated new file mode 100644 index 000000000..d85ef3c79 --- /dev/null +++ b/src/systems/subspace/apps/public/Dockerfile.generated @@ -0,0 +1,29 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public +RUN cd /app && bun x nx run @metorial-subspace/app-public:server:build +FROM build AS workspace +WORKDIR /app/src/systems/subspace/apps/public +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/subspace/apps/public/dist /app/dist +COPY --from=build /app/src/systems/subspace/apps/public/frontend/dist /app/frontend/dist +COPY --from=build /app/src/systems/subspace/db /app/db +COPY --from=build /app/src/packages/frontend/ui /app/src/packages/frontend/ui +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52071 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52071/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] diff --git a/src/systems/subspace/apps/public/control.toml b/src/systems/subspace/apps/public/control.toml index b58d19d7c..40bc3d065 100644 --- a/src/systems/subspace/apps/public/control.toml +++ b/src/systems/subspace/apps/public/control.toml @@ -3,10 +3,48 @@ name = "subspace-public" [service] port = 52071 -dockerfile = "src/systems/subspace/apps/public/Dockerfile" +dockerfile = "src/systems/subspace/apps/public/Dockerfile.generated" build_context = "oss" health = { path = "/ping" } +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial-subspace/app-public" +target = "server:build" +dockerfile = "Dockerfile.generated" +extra_paths = ["//oss/src/packages/frontend/ui"] + +[[build.automations]] +name = "subspace-public-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial-subspace/db", "@metorial/slates", "@metorial/forge", "@metorial/function-bay", "@metorial/signal", "@metorial/synthesis", "@metorial-cargo/service"] + +[[build.automations]] +name = "subspace-public-frontend" +kind = "run-targets" +target = "frontend:build" +projects = ["@metorial-subspace/app-public"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "frontend/dist", to = "/app/frontend/dist" }, + { from = "../../db", to = "/app/db" }, + { from = "../../../../packages/frontend/ui", to = "/app/src/packages/frontend/ui" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52071] +command = "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js" +healthcheck = "curl -f http://localhost:52071/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/subspace/apps/public/package.json b/src/systems/subspace/apps/public/package.json index 4be5fc4aa..f91c7a690 100644 --- a/src/systems/subspace/apps/public/package.json +++ b/src/systems/subspace/apps/public/package.json @@ -12,7 +12,7 @@ "start": "bun ./src/server.ts", "build": "vite build ./frontend", "frontend:build": "vite build ./frontend", - "server:build": "ncc build ./src/server.ts -o ./dist --source-map --transpile-only --external bun:sqlite --external bun && bun run sentry:sourcemaps:if-token", + "server:build": "sh -c 'mv tsconfig.json tsconfig.json.bak && mv tsconfig.build.json tsconfig.json && ncc build ./src/server.ts -o ./dist --source-map --transpile-only --external bun:sqlite --external bun && bun run sentry:sourcemaps:if-token; BUILD_EXIT_CODE=$?; mv tsconfig.json tsconfig.build.json && mv tsconfig.json.bak tsconfig.json; exit $BUILD_EXIT_CODE'", "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-subspace-frontend ./dist && sentry-cli sourcemaps upload --org metorial --project mte-subspace-frontend ./dist", "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", "test": "bun run test:unit && bun run test:e2e", @@ -65,4 +65,4 @@ "@mtsrc/validation": "1.0.0", "@mtsrc/telemetry": "1.0.0" } -} \ No newline at end of file +} diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index a78c01ade..f5009d709 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -1,61 +1,25 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads and prepare required workspaces. -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/subspace/scripts/prepare-docker-build.sh - -# Generate Prisma client -WORKDIR /app/src/systems/subspace/db -RUN bunx prisma generate - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Build the application using ncc -# This bundles all dependencies into a single file -WORKDIR /app/src/systems/subspace/apps/worker -# Temporarily use the build-friendly tsconfig -RUN mv tsconfig.json tsconfig.json.bak && \ - mv tsconfig.build.json tsconfig.json && \ - bun run server:build; \ - BUILD_EXIT_CODE=$?; \ - mv tsconfig.json tsconfig.build.json && \ - mv tsconfig.json.bak tsconfig.json; \ - exit $BUILD_EXIT_CODE - -FROM builder AS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN cd /app && bun x nx run @metorial-subspace/app-worker:server:build +FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/worker CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for healthcheck RUN apk add --no-cache curl - -# Copy the built application from builder -COPY --from=builder /app/src/systems/subspace/apps/worker/dist /app/dist - -# Copy prisma schema and generated client from builder -COPY --from=builder /app/src/systems/subspace/db /app/db - -# Copy entire node_modules from builder to ensure prisma has all dependencies -COPY --from=builder /app/node_modules /app/node_modules - -# Set environment to production -ENV NODE_ENV=production - -# Worker has no main HTTP port, only health check on 12121 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \ +COPY --from=build /app/src/systems/subspace/apps/worker/dist /app/dist +COPY --from=build /app/src/systems/subspace/db /app/db +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service -CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] \ No newline at end of file +CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] diff --git a/src/systems/subspace/apps/worker/Dockerfile.generated b/src/systems/subspace/apps/worker/Dockerfile.generated new file mode 100644 index 000000000..f5009d709 --- /dev/null +++ b/src/systems/subspace/apps/worker/Dockerfile.generated @@ -0,0 +1,25 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN cd /app && bun x nx run @metorial-subspace/app-worker:server:build +FROM build AS workspace +WORKDIR /app/src/systems/subspace/apps/worker +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/subspace/apps/worker/dist /app/dist +COPY --from=build /app/src/systems/subspace/db /app/db +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] diff --git a/src/systems/subspace/apps/worker/control.toml b/src/systems/subspace/apps/worker/control.toml index e8af036e5..885d2fcf6 100644 --- a/src/systems/subspace/apps/worker/control.toml +++ b/src/systems/subspace/apps/worker/control.toml @@ -2,10 +2,38 @@ name = "subspace-worker" [service] -dockerfile = "src/systems/subspace/apps/worker/Dockerfile" +dockerfile = "src/systems/subspace/apps/worker/Dockerfile.generated" build_context = "oss" health = { cmd = "curl -f http://localhost:12121/ || exit 1" } +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial-subspace/app-worker" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "subspace-worker-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial-subspace/db", "@metorial/slates", "@metorial/forge", "@metorial/function-bay", "@metorial/signal", "@metorial/synthesis", "@metorial-cargo/service"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "../../db", to = "/app/db" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +command = "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js" +healthcheck = "curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/subspace/scripts/prepare-docker-build.sh b/src/systems/subspace/scripts/prepare-docker-build.sh deleted file mode 100644 index 064eef1ef..000000000 --- a/src/systems/subspace/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -# Install the monorepo once, then build the workspace packages Subspace consumes -# so Docker builds do not depend on prebuilt artifacts from CI or the host. -bun install --linker=hoisted - -bun run --cwd ./src/systems/slates/apps/hub db:generate -bun run --cwd ./src/systems/forge/service db:generate -bun run --cwd ./src/systems/function-bay/service db:generate -bun run --cwd ./src/systems/signal/service db:generate -bun run --cwd ./src/systems/synthesis/service db:generate -bun run --cwd ./src/systems/cargo/service db:generate - -sh ./src/systems/scripts/build-workspace-clients.sh - -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/origin-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/forge-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/function-bay-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/signal-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/synthesis-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/cargo-client - -# bunx turbo run --ui=stream build --filter=./src/systems/slates/packages/** -bunx turbo run --ui=stream build --filter=./src/systems/shuttle/sdk/packages/** - -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/slates-client -bunx turbo run --ui=stream build --filter=@metorial-platform-systems/shuttle-client diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index a9d8b8c57..04cfec381 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -1,50 +1,27 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -# Copy repository contents from the OSS root context -COPY . . - -# Install CA certificates for Sentry CLI uploads -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* - -# Install dependencies from the OSS workspace +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ RUN bun install --linker=hoisted - -# Generate Prisma client and build the service from the monorepo path -WORKDIR /app/src/systems/synthesis/service -RUN bun run db:generate -RUN bun run server:build - -FROM builder AS workspace - +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis +RUN cd /app && bun x nx run @metorial/synthesis:server:build +FROM build AS workspace WORKDIR /app/src/systems/synthesis/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - -# Install curl for health checks RUN apk add --no-cache curl - -# Copy built output, Prisma assets, and hoisted dependencies -COPY --from=builder /app/src/systems/synthesis/service/dist /app/dist -COPY --from=builder /app/src/systems/synthesis/service/prisma /app/prisma -COPY --from=builder /app/src/systems/synthesis/service/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - -# Expose primary port +COPY --from=build /app/src/systems/synthesis/service/dist /app/dist +COPY --from=build /app/src/systems/synthesis/service/prisma /app/prisma +COPY --from=build /app/src/systems/synthesis/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52160 - -# Health check using the API and readiness server -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ - CMD curl -f http://localhost:52160/ping && curl -f http://localhost:12121/ || exit 1 - -# Start command: push schema and start service +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52160/ping && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --config /app/prisma.config.ts --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/synthesis/service/Dockerfile.generated b/src/systems/synthesis/service/Dockerfile.generated new file mode 100644 index 000000000..04cfec381 --- /dev/null +++ b/src/systems/synthesis/service/Dockerfile.generated @@ -0,0 +1,27 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis +RUN cd /app && bun x nx run @metorial/synthesis:server:build +FROM build AS workspace +WORKDIR /app/src/systems/synthesis/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/synthesis/service/dist /app/dist +COPY --from=build /app/src/systems/synthesis/service/prisma /app/prisma +COPY --from=build /app/src/systems/synthesis/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52160 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52160/ping && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --config /app/prisma.config.ts --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/synthesis/service/control.toml b/src/systems/synthesis/service/control.toml index 61d8d1e55..174071b06 100644 --- a/src/systems/synthesis/service/control.toml +++ b/src/systems/synthesis/service/control.toml @@ -3,10 +3,40 @@ name = "synthesis" [service] port = 52160 -dockerfile = "src/systems/synthesis/service/Dockerfile" +dockerfile = "src/systems/synthesis/service/Dockerfile.generated" build_context = "oss" health = { path = "/ping" } +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/synthesis" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "synthesis-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/synthesis"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52160] +command = "bun prisma db push --config /app/prisma.config.ts --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52160/ping && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/systems/voyager/scripts/prepare-docker-build.sh b/src/systems/voyager/scripts/prepare-docker-build.sh deleted file mode 100755 index 37fd5e952..000000000 --- a/src/systems/voyager/scripts/prepare-docker-build.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eu - -cd /app - -bun install --linker=hoisted - -sh ./src/systems/scripts/build-workspace-clients.sh diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index 354cac5a0..eabd0fcb5 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -1,40 +1,27 @@ -# Build stage -FROM oven/bun:1.2 AS builder - +# generated by control bootstrap +FROM oven/bun:1.2 AS deps WORKDIR /app - -ARG SENTRY_AUTH_TOKEN -ENV SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} - -COPY . . - -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* -RUN sh ./src/systems/voyager/scripts/prepare-docker-build.sh - -WORKDIR /app/src/systems/voyager/service -RUN bun prisma generate -RUN bun run server:build - -FROM builder AS workspace - +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/voyager +RUN cd /app && bun x nx run @metorial/voyager:server:build +FROM build AS workspace WORKDIR /app/src/systems/voyager/service CMD ["sleep", "infinity"] - -# Production stage FROM oven/bun:1.2-alpine AS runner - WORKDIR /app - RUN apk add --no-cache curl - -COPY --from=builder /app/src/systems/voyager/service/dist /app/dist -COPY --from=builder /app/src/systems/voyager/service/prisma /app/prisma -COPY --from=builder /app/src/systems/voyager/service/prisma.config.ts /app/prisma.config.ts -COPY --from=builder /app/node_modules /app/node_modules - +COPY --from=build /app/src/systems/voyager/service/dist /app/dist +COPY --from=build /app/src/systems/voyager/service/prisma /app/prisma +COPY --from=build /app/src/systems/voyager/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" EXPOSE 52060 - -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ - CMD curl -f http://localhost:52060/metorial-voyager && curl -f http://localhost:12121/ || exit 1 - +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52060/metorial-voyager && curl -f http://localhost:12121/ || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/voyager/service/Dockerfile.generated b/src/systems/voyager/service/Dockerfile.generated new file mode 100644 index 000000000..eabd0fcb5 --- /dev/null +++ b/src/systems/voyager/service/Dockerfile.generated @@ -0,0 +1,27 @@ +# generated by control bootstrap +FROM oven/bun:1.2 AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/ ./ +RUN bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/ ./ +RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/voyager +RUN cd /app && bun x nx run @metorial/voyager:server:build +FROM build AS workspace +WORKDIR /app/src/systems/voyager/service +CMD ["sleep", "infinity"] +FROM oven/bun:1.2-alpine AS runner +WORKDIR /app +RUN apk add --no-cache curl +COPY --from=build /app/src/systems/voyager/service/dist /app/dist +COPY --from=build /app/src/systems/voyager/service/prisma /app/prisma +COPY --from=build /app/src/systems/voyager/service/prisma.config.ts /app/prisma.config.ts +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +EXPOSE 52060 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52060/metorial-voyager && curl -f http://localhost:12121/ || exit 1 +CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/voyager/service/control.toml b/src/systems/voyager/service/control.toml index ac84e9bb2..7d93bfbd3 100644 --- a/src/systems/voyager/service/control.toml +++ b/src/systems/voyager/service/control.toml @@ -3,10 +3,40 @@ name = "voyager" [service] port = 52060 -dockerfile = "src/systems/voyager/service/Dockerfile" +dockerfile = "src/systems/voyager/service/Dockerfile.generated" build_context = "oss" health = { cmd = "bun -e \"fetch('http://localhost:12121/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } +[build] +builder = "node" +mode = "generated" +context = "oss" +project = "@metorial/voyager" +target = "server:build" +dockerfile = "Dockerfile.generated" + +[[build.automations]] +name = "voyager-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/voyager"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +expose = [52060] +command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" +healthcheck = "curl -f http://localhost:52060/metorial-voyager && curl -f http://localhost:12121/ || exit 1" + [test.unit] command = "bun run test:unit" diff --git a/src/tooling/control/package.json b/src/tooling/control/package.json index c30871fb1..ecccd1a85 100644 --- a/src/tooling/control/package.json +++ b/src/tooling/control/package.json @@ -9,7 +9,7 @@ "scripts": { "start": "bun ./src/cli.ts", "typecheck": "tsc --noEmit", - "test": "bun test src/staging" + "test": "bun test src" }, "dependencies": { "sade": "^1.8.1", diff --git a/src/tooling/control/src/bootstrap.ts b/src/tooling/control/src/bootstrap.ts new file mode 100644 index 000000000..531403147 --- /dev/null +++ b/src/tooling/control/src/bootstrap.ts @@ -0,0 +1,188 @@ +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs'; +import { dirname, resolve } from 'path'; +import { ControlError } from './errors'; +import { collectBuildPlans, renderDockerfileForPlan } from './builders'; +import { resolveControlCwd } from './entrypoint'; +import { getRegistry } from './registry'; + +type BootstrapResult = { + changed: string[]; + checked: string[]; + printed: string[]; +}; + +let GENERATED_HEADER = '# generated by control bootstrap'; + +let createNxConfig = (scope: 'repo' | 'oss' = 'repo') => ({ + $schema: './node_modules/nx/schemas/nx-schema.json', + namedInputs: { + default: ['{projectRoot}/**/*', 'sharedGlobals'], + production: [ + 'default', + '!{projectRoot}/dist/**', + '!{projectRoot}/coverage/**', + '!{projectRoot}/.control/**' + ], + sharedGlobals: + scope === 'repo' + ? [ + '{workspaceRoot}/package.json', + '{workspaceRoot}/bun.lock', + '{workspaceRoot}/oss/package.json', + '{workspaceRoot}/oss/bun.lock' + ] + : ['{workspaceRoot}/package.json', '{workspaceRoot}/bun.lock'] + }, + targetDefaults: { + build: { + cache: true, + dependsOn: ['^build'], + inputs: ['production', '^production'], + outputs: ['{projectRoot}/dist/**'] + }, + 'server:build': { + cache: true, + dependsOn: ['prisma:generate', '^build', '^server:build'], + inputs: ['production', '^production'], + outputs: ['{projectRoot}/dist/**'] + }, + 'frontend:build': { + cache: true, + dependsOn: ['^build', '^frontend:build'], + inputs: ['production', '^production'], + outputs: ['{projectRoot}/dist/**', '{projectRoot}/frontend/dist/**'] + }, + 'worker:build': { + cache: true, + dependsOn: ['prisma:generate', '^build', '^worker:build'], + inputs: ['production', '^production'], + outputs: ['{projectRoot}/dist-worker/**'] + }, + test: { + cache: false, + inputs: ['default', '^production'] + }, + 'check-types': { + cache: true, + dependsOn: ['^check-types'], + inputs: ['production', '^production'] + }, + 'prisma:generate': { + cache: true, + dependsOn: ['^prisma:generate'], + inputs: ['production', '^production'] + }, + 'prisma:push': { + cache: false + }, + dev: { + cache: false + }, + deploy: { + cache: false + } + } +}); + +let renderNxJson = (scope: 'repo' | 'oss' = 'repo'): string => + JSON.stringify(createNxConfig(scope), null, 2) + '\n'; + +let ensureFileState = (opts: { + path: string; + content: string; + check?: boolean; + print?: boolean; +}): { changed: boolean; printed?: string } => { + let current = existsSync(opts.path) ? readFileSync(opts.path, 'utf8') : ''; + + if (opts.print) { + return { + changed: current !== opts.content, + printed: [`# ${opts.path}`, opts.content].join('\n') + }; + } + + if (opts.check) { + if (current !== opts.content) { + throw new ControlError({ + code: 'bootstrap_out_of_date', + message: `Generated file is out of date: ${opts.path}`, + hint: 'Run `control bootstrap` to refresh generated files' + }); + } + return { changed: false }; + } + + if (current !== opts.content) { + mkdirSync(dirname(opts.path), { recursive: true }); + writeFileSync(opts.path, opts.content); + return { changed: true }; + } + + return { changed: false }; +}; + +export let runBootstrap = async (opts?: { + entrypoint?: string; + check?: boolean; + print?: boolean; + service?: string; +}) => { + let cwd = resolveControlCwd(); + let registry = getRegistry({ cwd, entrypoint: opts?.entrypoint }); + let plans = collectBuildPlans(registry, opts?.service); + let result: BootstrapResult = { changed: [], checked: [], printed: [] }; + + let nxPath = resolve(registry.controlRoot, 'nx.json'); + let nxState = ensureFileState({ + path: nxPath, + content: renderNxJson('repo'), + check: opts?.check, + print: opts?.print + }); + + if (opts?.print && nxState.printed) result.printed.push(nxState.printed); + if (nxState.changed) result.changed.push(nxPath); + result.checked.push(nxPath); + + let ossNxPath = resolve(registry.ossRoot, 'nx.json'); + let ossNxState = ensureFileState({ + path: ossNxPath, + content: renderNxJson('oss'), + check: opts?.check, + print: opts?.print + }); + + if (opts?.print && ossNxState.printed) result.printed.push(ossNxState.printed); + if (ossNxState.changed) result.changed.push(ossNxPath); + result.checked.push(ossNxPath); + + for (let plan of plans) { + let content = renderDockerfileForPlan(plan); + let state = ensureFileState({ + path: plan.dockerfilePath, + content, + check: opts?.check, + print: opts?.print + }); + + if (opts?.print && state.printed) result.printed.push(state.printed); + if (state.changed) result.changed.push(plan.dockerfilePath); + result.checked.push(plan.dockerfilePath); + } + + if (opts?.print) { + console.log(result.printed.join('\n\n')); + return; + } + + if (opts?.check) { + console.log(`Checked ${result.checked.length} generated file(s)`); + return; + } + + console.log(`Updated ${result.changed.length} generated file(s)`); + for (let file of result.changed) { + console.log(` - ${file}`); + } +}; diff --git a/src/tooling/control/src/builders/base.ts b/src/tooling/control/src/builders/base.ts new file mode 100644 index 000000000..e6c47b92a --- /dev/null +++ b/src/tooling/control/src/builders/base.ts @@ -0,0 +1,207 @@ +import { dirname, relative, resolve } from 'path'; +import { ControlError } from '../errors'; +import type { + ControlBuildRuntime, + ControlService, + GeneratedBuildPlan, + ServiceRegistry +} from '../types'; +import { + isDirectoryPath, + resolveBuildArtifacts, + resolveBuildContextRoot, + resolveBuildPaths, + resolveBuildSteps +} from './pathing'; + +export type BuildBuilder = { + kind: 'node' | 'rust' | 'go'; + plan: (service: ControlService, registry: ServiceRegistry) => GeneratedBuildPlan | null; + generateDockerfile: (plan: GeneratedBuildPlan) => string; + generateNxMetadata?: (plan: GeneratedBuildPlan) => Record; + validate?: (plan: GeneratedBuildPlan) => void; +}; + +export let defaultRuntime = ( + runtime: ControlBuildRuntime | undefined, + defaults: Required +): Required => ({ + base_image: runtime?.base_image ?? defaults.base_image, + packages: runtime?.packages ?? defaults.packages, + env: runtime?.env ?? defaults.env, + expose: runtime?.expose ?? defaults.expose, + command: runtime?.command ?? defaults.command, + healthcheck: runtime?.healthcheck ?? defaults.healthcheck, + user: runtime?.user ?? defaults.user, + workdir: runtime?.workdir ?? defaults.workdir +}); + +export let defaultDockerfilePath = (service: ControlService, configured?: string): string => + resolve(service.dir, configured ?? 'Dockerfile.generated'); + +export let defaultWorkspaceRoot = ( + service: ControlService, + contextRoot: string, + configured?: string +): string => + configured ?? `/app/${relative(contextRoot, service.dir).replace(/\\/g, '/')}`; + +export let createBasePlan = (opts: { + service: ControlService; + registry: ServiceRegistry; + builder: 'node' | 'rust' | 'go'; + runtime: Required; +}): GeneratedBuildPlan | null => { + let build = opts.service.config.build; + if (!build) return null; + + let context = resolveBuildContextRoot(opts.service, opts.registry, build); + let dockerfilePath = defaultDockerfilePath(opts.service, build.dockerfile); + let workspaceRoot = defaultWorkspaceRoot(opts.service, context.root, build.workspace_root); + let manifests = resolveBuildPaths({ + service: opts.service, + registry: opts.registry, + contextRoot: context.root, + patterns: build.manifests?.files, + label: 'manifest' + }); + let inputs = resolveBuildPaths({ + service: opts.service, + registry: opts.registry, + contextRoot: context.root, + patterns: [ + ...(build.inputs?.paths ?? []), + ...(build.inputs?.include_paths ?? []), + ...(build.inputs?.generated_paths ?? []) + ], + label: 'input' + }); + + let plan: GeneratedBuildPlan = { + builder: opts.builder, + service: opts.service, + mode: build.mode ?? 'generated', + contextKind: context.kind, + contextRoot: context.root, + dockerfilePath, + workspaceRoot, + manifestFiles: manifests, + inputPaths: inputs, + automations: [], + codegenSteps: resolveBuildSteps({ + service: opts.service, + registry: opts.registry, + contextRoot: context.root, + steps: build.codegen?.steps + }), + prebuildSteps: resolveBuildSteps({ + service: opts.service, + registry: opts.registry, + contextRoot: context.root, + steps: build.prebuild?.steps + }), + mainSteps: resolveBuildSteps({ + service: opts.service, + registry: opts.registry, + contextRoot: context.root, + steps: build.main?.steps + }), + artifacts: resolveBuildArtifacts({ + service: opts.service, + registry: opts.registry, + contextRoot: context.root, + artifacts: build.artifacts?.copy + }), + runtime: opts.runtime, + project: build.project, + target: build.target, + serviceDockerfile: opts.service.config.service?.dockerfile + }; + + return plan; +}; + +export let formatContainerPath = (relPath: string): string => { + if (relPath === '.') return '/app'; + return `/app/${relPath.replace(/\\/g, '/')}`; +}; + +export let formatContainerWorkdir = (relPath: string): string => formatContainerPath(relPath); + +export let formatRunStep = (run: string): string => run.replace(/\n+/g, ' ').trim(); + +export let renderCopyLines = (paths: { relativeToContext: string; absolutePath: string }[]): string[] => { + let lines: string[] = []; + + for (let path of paths) { + let from = path.relativeToContext.replace(/^\.\//, ''); + if (!from || from === '.') continue; + let to = dirname(from).replace(/\\/g, '/'); + let target = to === '.' ? './' : `./${to}/`; + lines.push(`COPY ${from} ${target}`); + } + + return lines; +}; + +export let renderArtifactLines = (plan: GeneratedBuildPlan): string[] => { + let lines: string[] = []; + + for (let artifact of plan.artifacts) { + let from = artifact.from.startsWith('/') && !artifact.from.startsWith('//') + ? artifact.from + : formatContainerPath(artifact.fromRelativeToContext); + lines.push(`COPY --from=build ${from} ${artifact.to}`); + } + + return lines; +}; + +export let buildCommandForPlan = (plan: GeneratedBuildPlan): string => { + if (plan.project && plan.target) { + return `bun x nx run ${plan.project}:${plan.target}`; + } + + if (plan.mainSteps.length === 1) { + return formatRunStep(plan.mainSteps[0]!.run); + } + + if (plan.mainSteps.length > 1) { + return plan.mainSteps.map(step => formatRunStep(step.run)).join(' && '); + } + + throw new ControlError({ + code: 'build_missing_main_step', + message: `Service "${plan.service.name}" is missing a build target or main build steps`, + hint: 'Set [build].target or add [build.main].steps' + }); +}; + +export let assertArtifactsConfigured = (plan: GeneratedBuildPlan) => { + if (plan.artifacts.length > 0) return; + throw new ControlError({ + code: 'build_missing_artifacts', + message: `Service "${plan.service.name}" has no [build.artifacts] copy rules`, + hint: 'Add [build.artifacts.copy] entries so the generated runner image can be assembled' + }); +}; + +export let assertRuntimeCommand = (plan: GeneratedBuildPlan) => { + if (plan.runtime.command) return; + throw new ControlError({ + code: 'build_missing_runtime_command', + message: `Service "${plan.service.name}" is missing [build.runtime].command` + }); +}; + +export let assertHasMainInputs = (plan: GeneratedBuildPlan) => { + if (plan.manifestFiles.length === 0 && plan.inputPaths.length === 0) { + throw new ControlError({ + code: 'build_missing_inputs', + message: `Service "${plan.service.name}" has no manifests or inputs configured` + }); + } +}; + +export let maybeDirectoryInputs = (plan: GeneratedBuildPlan) => + plan.inputPaths.filter(path => isDirectoryPath(path.absolutePath)); diff --git a/src/tooling/control/src/builders/builders.test.ts b/src/tooling/control/src/builders/builders.test.ts new file mode 100644 index 000000000..377e9088d --- /dev/null +++ b/src/tooling/control/src/builders/builders.test.ts @@ -0,0 +1,190 @@ +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'fs'; +import { dirname, join } from 'path'; +import { afterEach, describe, expect, it } from 'bun:test'; +import { createBuildPlan } from './index'; +import { resolveBuildPaths } from './pathing'; +import type { ControlConfig, ControlService, ServiceRegistry } from '../types'; + +let tempRoots: string[] = []; + +let write = (path: string, content = '') => { + mkdirSync(dirname(path), { recursive: true }); + writeFileSync(path, content); +}; + +let writeNxGraph = (workspaceRoot: string, graph: unknown) => { + write(join(workspaceRoot, '.nx/workspace-data/project-graph.json'), JSON.stringify(graph, null, 2)); +}; + +let makeRegistry = (config: ControlConfig, relPath: string): { + root: string; + service: ControlService; + registry: ServiceRegistry; +} => { + let root = mkdtempSync('/tmp/control-builders-'); + tempRoots.push(root); + + let ossRoot = join(root, 'oss'); + let serviceDir = join(root, relPath); + mkdirSync(join(ossRoot, 'src/systems'), { recursive: true }); + mkdirSync(serviceDir, { recursive: true }); + write(join(serviceDir, 'control.toml'), ''); + + let service: ControlService = { + name: config.control.name, + dir: serviceDir, + relPath, + controlFile: join(serviceDir, 'control.toml'), + config + }; + + let registry: ServiceRegistry = { + controlRoot: root, + ossRoot, + services: [service], + byName: new Map([[service.name, service]]), + byDir: new Map([[service.dir, service]]) + }; + + return { root, service, registry }; +}; + +afterEach(() => { + for (let root of tempRoots.splice(0, tempRoots.length)) { + rmSync(root, { recursive: true, force: true }); + } +}); + +describe('build path resolution', () => { + it('resolves service-relative manifests, .. paths, globs, and repo-root escapes', () => { + let config: ControlConfig = { + control: { name: 'fixture' }, + build: { + builder: 'node', + context: 'repo', + manifests: { files: ['package.json', '../db/package.json'] }, + inputs: { paths: ['src/**', '../../scripts/*.sh', '//shared/generated.txt'] }, + artifacts: { copy: [] }, + runtime: { command: 'node index.js' } + } + }; + + let { root, service, registry } = makeRegistry( + config, + 'oss/src/systems/fixture/service' + ); + write(join(service.dir, 'package.json'), '{}'); + write(join(root, 'oss/src/systems/fixture/db/package.json'), '{}'); + write(join(service.dir, 'src/index.ts'), 'export {};'); + write(join(root, 'oss/src/systems/scripts/setup.sh'), 'echo setup'); + write(join(root, 'shared/generated.txt'), 'generated'); + + let paths = resolveBuildPaths({ + service, + registry, + contextRoot: root, + patterns: ['package.json', '../db/package.json', 'src/**', '../../scripts/*.sh', '//shared/generated.txt'], + label: 'input' + }); + + expect(paths.some(path => path.relativeToService === 'package.json')).toBe(true); + expect(paths.some(path => path.relativeToService === '../db/package.json')).toBe(true); + expect(paths.some(path => path.relativeToContext === 'shared/generated.txt')).toBe(true); + expect(paths.some(path => path.relativeToContext.endsWith('setup.sh'))).toBe(true); + }); +}); + +describe('builder plans', () => { + it('creates a node build plan', () => { + let config: ControlConfig = { + control: { name: 'node-svc' }, + build: { + builder: 'node', + context: 'oss', + project: '@demo/node-svc', + target: 'server:build', + automations: [ + { + name: 'db', + kind: 'run-targets', + target: 'prisma:generate', + projects: ['@demo/node-svc'] + } + ], + artifacts: { copy: [{ from: '//node_modules', to: '/app/node_modules' }] }, + runtime: { command: 'node dist/index.js' } + } + }; + let { root, service, registry } = makeRegistry(config, 'oss/src/systems/demo/service'); + write(join(root, 'oss/package.json'), '{}'); + write(join(root, 'oss/bun.lock'), ''); + write(join(root, 'oss/tsconfig.json'), '{}'); + write(join(service.dir, 'package.json'), '{}'); + write(join(service.dir, 'src/index.ts'), 'export {};'); + write(join(root, 'node_modules/.keep'), ''); + writeNxGraph(join(root, 'oss'), { + nodes: { + '@demo/node-svc': { + name: '@demo/node-svc', + type: 'lib', + data: { root: 'src/systems/demo/service' } + } + }, + dependencies: { + '@demo/node-svc': [] + } + }); + + let plan = createBuildPlan(service, registry); + expect(plan?.builder).toBe('node'); + expect(plan?.project).toBe('@demo/node-svc'); + expect(plan?.dockerfilePath.endsWith('Dockerfile.generated')).toBe(true); + expect(plan?.automations[0]?.command).toContain('prisma:generate'); + expect(plan?.inputPaths.some(path => path.relativeToContext === 'src/systems/demo/service')).toBe(true); + }); + + it('creates a rust build plan', () => { + let config: ControlConfig = { + control: { name: 'rust-svc' }, + build: { + builder: 'rust', + manifests: { files: ['Cargo.toml', 'Cargo.lock'] }, + inputs: { paths: ['src/**'] }, + main: { steps: [{ run: 'cargo build --release' }] }, + artifacts: { copy: [{ from: 'target/release/app', to: '/app/app' }] }, + runtime: { command: '/app/app' } + } + }; + let { service, registry } = makeRegistry(config, 'oss/src/systems/rust/service'); + write(join(service.dir, 'Cargo.toml'), '[package]\nname="app"\nversion="0.1.0"\n'); + write(join(service.dir, 'Cargo.lock'), ''); + write(join(service.dir, 'src/lib.rs'), 'pub fn demo() {}'); + + let plan = createBuildPlan(service, registry); + expect(plan?.builder).toBe('rust'); + expect(plan?.mainSteps[0]?.run).toContain('cargo build'); + }); + + it('creates a go build plan', () => { + let config: ControlConfig = { + control: { name: 'go-svc' }, + build: { + builder: 'go', + manifests: { files: ['go.mod', 'go.sum'] }, + inputs: { paths: ['cmd/**', 'internal/**'] }, + main: { steps: [{ run: 'go build -o /tmp/service ./cmd/service' }] }, + artifacts: { copy: [{ from: '/tmp/service', to: '/app/service' }] }, + runtime: { command: '/app/service' } + } + }; + let { service, registry } = makeRegistry(config, 'oss/src/systems/go/service'); + write(join(service.dir, 'go.mod'), 'module example.com/service\n'); + write(join(service.dir, 'go.sum'), ''); + write(join(service.dir, 'cmd/service/main.go'), 'package main\nfunc main() {}\n'); + write(join(service.dir, 'internal/demo/demo.go'), 'package demo\n'); + + let plan = createBuildPlan(service, registry); + expect(plan?.builder).toBe('go'); + expect(plan?.runtime.base_image).toContain('distroless'); + }); +}); diff --git a/src/tooling/control/src/builders/context.ts b/src/tooling/control/src/builders/context.ts new file mode 100644 index 000000000..fd9b9d683 --- /dev/null +++ b/src/tooling/control/src/builders/context.ts @@ -0,0 +1,185 @@ +import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs'; +import { dirname, join, relative, resolve } from 'path'; +import { ControlError } from '../errors'; +import { copyGitAwareSelection } from '../staging/copyTree'; +import type { GeneratedBuildPlan, ServiceRegistry, WorkspaceSession } from '../types'; +import { renderNodePrunedDockerfile } from './node'; + +export type MaterializedBuildContext = { + root: string; + dockerfilePath: string; +}; + +let sanitizeName = (input: string) => input.replace(/[^a-zA-Z0-9._-]+/g, '-'); + +let resolveRelativeToRoot = (root: string, absolutePath: string): string => { + let rel = relative(root, absolutePath).replace(/\\/g, '/'); + if (!rel || rel.startsWith('..')) { + throw new ControlError({ + code: 'build_context_copy_outside_root', + message: `Cannot copy file outside build context root: ${absolutePath}` + }); + } + return rel; +}; + +let rootFilesForPlan = (sourceRoot: string): string[] => + ['bun.lock', 'nx.json'] + .map(relativePath => resolve(sourceRoot, relativePath)) + .filter(path => existsSync(path)); + +let rootInputFilesForPlan = (sourceRoot: string): string[] => { + let patterns = ['tsconfig.json', 'tsconfig.base.json', 'bunfig.toml']; + return patterns + .map(relativePath => resolve(sourceRoot, relativePath)) + .filter(path => existsSync(path)); +}; + +let resolveSourceRoot = (opts: { + plan: GeneratedBuildPlan; + registry: ServiceRegistry; + session?: WorkspaceSession | null; +}): string => { + if (!opts.session) return opts.plan.contextRoot; + + let relativeToStage = relative(opts.session.stagedEntrypoint, opts.plan.contextRoot); + if (relativeToStage.startsWith('..')) { + return opts.plan.contextRoot; + } + + return resolve(opts.session.repoRoot, relativeToStage); +}; + +let renderSyntheticWorkspacePackageJson = (opts: { + plan: GeneratedBuildPlan; + sourceRoot: string; +}): string => { + let packageJsonPath = resolve(opts.sourceRoot, 'package.json'); + if (!existsSync(packageJsonPath)) { + throw new ControlError({ + code: 'build_missing_root_package_json', + message: `Missing package.json at ${packageJsonPath}` + }); + } + + let base = JSON.parse(readFileSync(packageJsonPath, 'utf8')) as Record; + let workspaces = new Set(); + + for (let manifest of opts.plan.manifestFiles) { + let dir = dirname(manifest.relativeToContext).replace(/\\/g, '/'); + if (!dir || dir === '.') continue; + workspaces.add(dir); + } + + base.workspaces = [...workspaces].sort((a, b) => a.localeCompare(b)); + + return `${JSON.stringify(base, null, 2)}\n`; +}; + +let materializeNodeContext = async (opts: { + plan: GeneratedBuildPlan; + contextRoot: string; + sourceRoot: string; +}): Promise => { + let manifestPaths = new Set(); + + for (let file of rootFilesForPlan(opts.sourceRoot)) { + manifestPaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); + } + + for (let file of opts.plan.manifestFiles) { + manifestPaths.add(file.relativeToContext); + } + + let inputPaths = new Set(opts.plan.inputPaths.map(path => path.relativeToContext)); + for (let file of rootInputFilesForPlan(opts.sourceRoot)) { + inputPaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); + } + + await copyGitAwareSelection({ + sourceRoot: opts.sourceRoot, + destRoot: join(opts.contextRoot, '_manifests'), + includePaths: [...manifestPaths].sort((a, b) => a.localeCompare(b)) + }); + + writeFileSync( + join(opts.contextRoot, '_manifests', 'package.json'), + renderSyntheticWorkspacePackageJson(opts) + ); + + await copyGitAwareSelection({ + sourceRoot: opts.sourceRoot, + destRoot: join(opts.contextRoot, '_inputs'), + includePaths: [...inputPaths].sort((a, b) => a.localeCompare(b)) + }); + + return renderNodePrunedDockerfile(opts.plan); +}; + +let materializeDefaultContext = async (opts: { + plan: GeneratedBuildPlan; + contextRoot: string; + sourceRoot: string; + renderedDockerfile: string; +}) => { + let includePaths = new Set(); + + for (let file of rootFilesForPlan(opts.sourceRoot)) { + includePaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); + } + + for (let file of opts.plan.manifestFiles) { + includePaths.add(file.relativeToContext); + } + + for (let path of opts.plan.inputPaths) { + includePaths.add(path.relativeToContext); + } + + for (let file of rootInputFilesForPlan(opts.sourceRoot)) { + includePaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); + } + + await copyGitAwareSelection({ + sourceRoot: opts.sourceRoot, + destRoot: opts.contextRoot, + includePaths: [...includePaths].sort((a, b) => a.localeCompare(b)) + }); + + return opts.renderedDockerfile; +}; + +export let materializeBuildContext = async (opts: { + plan: GeneratedBuildPlan; + registry: ServiceRegistry; + session?: WorkspaceSession | null; + renderedDockerfile?: string; +}): Promise => { + let renderedDockerfile = opts.renderedDockerfile ?? readFileSync(opts.plan.dockerfilePath, 'utf8'); + let contextRoot = resolve( + opts.registry.controlRoot, + '.control', + 'docker-context', + sanitizeName(opts.plan.service.name) + ); + + rmSync(contextRoot, { recursive: true, force: true }); + mkdirSync(contextRoot, { recursive: true }); + let sourceRoot = resolveSourceRoot(opts); + + let dockerfileContent = + opts.plan.builder === 'node' + ? await materializeNodeContext({ plan: opts.plan, contextRoot, sourceRoot }) + : await materializeDefaultContext({ + plan: opts.plan, + contextRoot, + sourceRoot, + renderedDockerfile + }); + + let dockerfileName = opts.plan.dockerfilePath.split('/').pop() ?? 'Dockerfile.generated'; + let dockerfilePath = join(contextRoot, dockerfileName); + writeFileSync(dockerfilePath, dockerfileContent); + + return { root: contextRoot, dockerfilePath }; +}; diff --git a/src/tooling/control/src/builders/go.ts b/src/tooling/control/src/builders/go.ts new file mode 100644 index 000000000..18f46b214 --- /dev/null +++ b/src/tooling/control/src/builders/go.ts @@ -0,0 +1,97 @@ +import type { BuildBuilder } from './base'; +import { + assertArtifactsConfigured, + assertHasMainInputs, + assertRuntimeCommand, + buildCommandForPlan, + createBasePlan, + defaultRuntime, + formatContainerWorkdir, + formatRunStep, + renderArtifactLines, + renderCopyLines +} from './base'; +import type { GeneratedBuildPlan } from '../types'; + +let defaultGoRuntime = defaultRuntime(undefined, { + base_image: 'gcr.io/distroless/base-debian12', + packages: [], + env: {}, + expose: [], + command: '', + healthcheck: '', + user: '', + workdir: '/app' +}); + +let renderGoDockerfile = (plan: GeneratedBuildPlan): string => { + let builderImage = plan.service.config.build?.builder_image?.image ?? 'golang:1.24-alpine'; + let systemPackages = plan.service.config.build?.install?.system_packages ?? ['git', 'ca-certificates']; + let manifestLines = renderCopyLines(plan.manifestFiles); + let inputLines = renderCopyLines(plan.inputPaths); + let prebuildLines = plan.prebuildSteps.map(step => { + let cwd = formatContainerWorkdir(step.cwdRelativeToContext ?? '.'); + return `RUN cd ${cwd} && ${formatRunStep(step.run)}`; + }); + let artifactLines = renderArtifactLines(plan); + let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); + let envLines = Object.entries(plan.runtime.env).map(([key, value]) => `ENV ${key}=${JSON.stringify(value)}`); + let runtimePackageLines = + plan.runtime.packages.length > 0 ? [`RUN apk add --no-cache ${plan.runtime.packages.join(' ')}`] : []; + let healthcheckLines = plan.runtime.healthcheck + ? [ + 'HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \\', + ` CMD ${plan.runtime.healthcheck}` + ] + : []; + + let lines = [ + '# generated by control bootstrap', + `FROM ${builderImage} AS deps`, + 'WORKDIR /app', + ...(systemPackages.length > 0 ? [`RUN apk add --no-cache ${systemPackages.join(' ')}`] : []), + ...manifestLines, + 'RUN go mod download', + '', + 'FROM deps AS build', + 'WORKDIR /app', + ...inputLines, + ...prebuildLines, + `RUN cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, + '', + 'FROM build AS workspace', + `WORKDIR ${plan.workspaceRoot}`, + 'CMD ["sleep", "infinity"]', + '', + `FROM ${plan.runtime.base_image} AS runner`, + `WORKDIR ${plan.runtime.workdir}`, + ...runtimePackageLines, + ...artifactLines, + ...envLines, + ...exposeLines, + ...healthcheckLines, + ...(plan.runtime.user ? [`USER ${plan.runtime.user}`] : []), + `CMD ${JSON.stringify([plan.runtime.command])}` + ]; + + return lines.filter(Boolean).join('\n') + '\n'; +}; + +export let goBuildBuilder: BuildBuilder = { + kind: 'go', + plan: (service, registry) => { + if (service.config.build?.builder !== 'go') return null; + return createBasePlan({ + service, + registry, + builder: 'go', + runtime: defaultRuntime(service.config.build.runtime, defaultGoRuntime) + }); + }, + generateDockerfile: plan => renderGoDockerfile(plan), + validate: plan => { + assertHasMainInputs(plan); + assertArtifactsConfigured(plan); + assertRuntimeCommand(plan); + } +}; diff --git a/src/tooling/control/src/builders/index.ts b/src/tooling/control/src/builders/index.ts new file mode 100644 index 000000000..d85995d42 --- /dev/null +++ b/src/tooling/control/src/builders/index.ts @@ -0,0 +1,70 @@ +import { mkdirSync, readFileSync, writeFileSync } from 'fs'; +import { dirname } from 'path'; +import { ControlError } from '../errors'; +import type { ControlService, GeneratedBuildPlan, ServiceRegistry } from '../types'; +import type { BuildBuilder } from './base'; +import { goBuildBuilder } from './go'; +import { nodeBuildBuilder } from './node'; +import { rustBuildBuilder } from './rust'; + +export let BUILDERS: BuildBuilder[] = [nodeBuildBuilder, rustBuildBuilder, goBuildBuilder]; + +export let getBuilderForService = (service: ControlService): BuildBuilder | null => { + let requested = service.config.build?.builder; + if (!requested) return null; + return BUILDERS.find(builder => builder.kind === requested) ?? null; +}; + +export let createBuildPlan = ( + service: ControlService, + registry: ServiceRegistry +): GeneratedBuildPlan | null => { + let builder = getBuilderForService(service); + if (!builder) return null; + + let plan = builder.plan(service, registry); + if (!plan) return null; + builder.validate?.(plan); + return plan; +}; + +export let renderDockerfileForPlan = (plan: GeneratedBuildPlan): string => { + let builder = BUILDERS.find(candidate => candidate.kind === plan.builder); + if (!builder) { + throw new ControlError({ + code: 'unknown_build_builder', + message: `No build builder registered for "${plan.builder}"` + }); + } + return builder.generateDockerfile(plan); +}; + +export let writeGeneratedDockerfile = (plan: GeneratedBuildPlan): { changed: boolean; content: string } => { + let content = renderDockerfileForPlan(plan); + mkdirSync(dirname(plan.dockerfilePath), { recursive: true }); + + let current = ''; + try { + current = readFileSync(plan.dockerfilePath, 'utf8'); + } catch { + current = ''; + } + + if (current !== content) { + writeFileSync(plan.dockerfilePath, content); + return { changed: true, content }; + } + + return { changed: false, content }; +}; + +export let collectBuildPlans = (registry: ServiceRegistry, serviceName?: string): GeneratedBuildPlan[] => { + let services = serviceName + ? registry.services.filter(service => service.name === serviceName) + : registry.services; + + return services + .map(service => createBuildPlan(service, registry)) + .filter((plan): plan is GeneratedBuildPlan => !!plan) + .sort((a, b) => a.service.name.localeCompare(b.service.name)); +}; diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts new file mode 100644 index 000000000..647ecb0ae --- /dev/null +++ b/src/tooling/control/src/builders/node.ts @@ -0,0 +1,251 @@ +import { existsSync } from 'fs'; +import { resolve } from 'path'; +import type { BuildBuilder } from './base'; +import { + assertArtifactsConfigured, + assertRuntimeCommand, + createBasePlan, + defaultRuntime, + formatContainerWorkdir, + formatRunStep, + renderArtifactLines +} from './base'; +import { + collectNxDependents, + collectNxProjectClosure, + getNxProjectRoot, + readNxProjectGraph, + renderNxRunManyCommand +} from './nx'; +import { resolveBuildPaths } from './pathing'; +import { ControlError } from '../errors'; +import type { + ControlBuildAutomation, + GeneratedBuildAutomation, + GeneratedBuildPath, + GeneratedBuildPlan +} from '../types'; + +let defaultNodeRuntime = defaultRuntime(undefined, { + base_image: 'oven/bun:1.2-alpine', + packages: [], + env: {}, + expose: [], + command: '', + healthcheck: '', + user: '', + workdir: '/app' +}); + +let renderEnvLines = (plan: GeneratedBuildPlan): string[] => { + let entries = Object.entries(plan.runtime.env); + if (entries.length === 0) return []; + return entries.map(([key, value]) => `ENV ${key}=${JSON.stringify(value)}`); +}; + +let renderRuntimePackages = (plan: GeneratedBuildPlan): string[] => { + if (plan.runtime.packages.length === 0) return []; + return [`RUN apk add --no-cache ${plan.runtime.packages.join(' ')}`]; +}; + +let renderHealthcheckLines = (plan: GeneratedBuildPlan): string[] => + plan.runtime.healthcheck + ? [ + 'HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \\', + ` CMD ${plan.runtime.healthcheck}` + ] + : []; + +let projectPackageJsonPath = (plan: GeneratedBuildPlan, projectRoot: string): GeneratedBuildPath | null => { + let absolutePath = resolve(plan.contextRoot, projectRoot, 'package.json'); + if (!existsSync(absolutePath)) return null; + + return { + pattern: `${projectRoot}/package.json`, + absolutePath, + relativeToService: projectRoot, + relativeToContext: `${projectRoot}/package.json`.replace(/\\/g, '/'), + exists: true + }; +}; + +let projectRootPath = (plan: GeneratedBuildPlan, projectRoot: string): GeneratedBuildPath => ({ + pattern: projectRoot, + absolutePath: resolve(plan.contextRoot, projectRoot), + relativeToService: projectRoot, + relativeToContext: projectRoot.replace(/\\/g, '/'), + exists: true +}); + +let resolveAutomationProjects = (opts: { + plan: GeneratedBuildPlan; + automation: ControlBuildAutomation; + graph: ReturnType; +}): string[] => { + if (opts.automation.kind === 'run-targets') { + return [...opts.automation.projects].sort((a, b) => a.localeCompare(b)); + } + + return collectNxDependents({ + graph: opts.graph, + seeds: opts.automation.projects, + projectFilter: opts.automation.project_filter + }); +}; + +let renderAutomationCommand = (automation: GeneratedBuildAutomation): string => automation.command; + +export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { + let installLinker = plan.service.config.build?.install?.linker ?? 'hoisted'; + let systemPackages = plan.service.config.build?.install?.system_packages ?? ['ca-certificates']; + let automationLines = plan.automations.map(automation => `RUN cd /app && ${renderAutomationCommand(automation)}`); + let artifactLines = renderArtifactLines(plan); + let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); + + let lines = [ + '# generated by control bootstrap', + 'FROM oven/bun:1.2 AS deps', + 'WORKDIR /app', + ...(systemPackages.length > 0 + ? [ + 'RUN apt-get update && apt-get install -y --no-install-recommends \\', + ...systemPackages.map((pkg, index) => + index === systemPackages.length - 1 + ? ` ${pkg} && rm -rf /var/lib/apt/lists/*` + : ` ${pkg} \\` + ) + ] + : []), + 'COPY _manifests/ ./', + `RUN bun install --linker=${installLinker}`, + '', + 'FROM deps AS build', + 'WORKDIR /app', + 'COPY _inputs/ ./', + ...automationLines, + `RUN cd /app && bun x nx run ${plan.project}:${plan.target}`, + '', + 'FROM build AS workspace', + `WORKDIR ${plan.workspaceRoot}`, + 'CMD ["sleep", "infinity"]', + '', + `FROM ${plan.runtime.base_image} AS runner`, + `WORKDIR ${plan.runtime.workdir}`, + ...renderRuntimePackages(plan), + ...artifactLines, + ...renderEnvLines(plan), + ...exposeLines, + ...renderHealthcheckLines(plan), + `CMD ["sh", "-c", ${JSON.stringify(plan.runtime.command)}]` + ]; + + return lines.filter(Boolean).join('\n') + '\n'; +}; + +export let nodeBuildBuilder: BuildBuilder = { + kind: 'node', + plan: (service, registry) => { + if (service.config.build?.builder !== 'node') return null; + + let runtime = defaultRuntime(service.config.build.runtime, defaultNodeRuntime); + let plan = createBasePlan({ + service, + registry, + builder: 'node', + runtime + }); + if (!plan) return null; + + let build = service.config.build; + if (!build?.project || !build.target) { + throw new ControlError({ + code: 'node_build_missing_project_target', + message: `Node service "${service.name}" must declare [build].project and [build].target` + }); + } + + if (build.manifests?.files?.length || build.inputs?.paths?.length || build.inputs?.include_paths?.length || build.inputs?.generated_paths?.length) { + throw new ControlError({ + code: 'node_build_legacy_paths_not_supported', + message: `Node service "${service.name}" still uses legacy [build.manifests] or [build.inputs] path configuration`, + hint: 'Patch control.toml to use build.project/build.target/build.automations/build.extra_paths' + }); + } + + if (build.codegen?.steps?.length || build.prebuild?.steps?.length || build.main?.steps?.length) { + throw new ControlError({ + code: 'node_build_legacy_steps_not_supported', + message: `Node service "${service.name}" still uses legacy [build.codegen], [build.prebuild], or [build.main] steps`, + hint: 'Move Node build prerequisites into build.automations and keep the main build in build.target' + }); + } + + let graph = readNxProjectGraph(plan.contextRoot); + let mainClosure = collectNxProjectClosure(graph, [build.project]); + let includedProjects = new Set(mainClosure); + let resolvedAutomations: GeneratedBuildAutomation[] = []; + + for (let automation of build.automations ?? []) { + let projects = resolveAutomationProjects({ plan, automation, graph }); + for (let project of collectNxProjectClosure(graph, projects)) { + includedProjects.add(project); + } + resolvedAutomations.push({ + name: automation.name, + kind: automation.kind, + target: automation.target, + projects, + command: renderNxRunManyCommand({ target: automation.target, projects }) + }); + } + + let manifestFiles = [...includedProjects] + .sort((a, b) => a.localeCompare(b)) + .map(project => projectPackageJsonPath(plan, getNxProjectRoot(graph, project))) + .filter((path): path is GeneratedBuildPath => !!path); + + let inputPaths = [...includedProjects] + .sort((a, b) => a.localeCompare(b)) + .map(project => projectRootPath(plan, getNxProjectRoot(graph, project))); + + let extraPaths = resolveBuildPaths({ + service, + registry, + contextRoot: plan.contextRoot, + patterns: build.extra_paths, + label: 'extra path' + }); + + for (let extraPath of extraPaths) { + inputPaths.push(extraPath); + } + + plan.project = build.project; + plan.target = build.target; + plan.manifestFiles = manifestFiles.sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); + plan.inputPaths = inputPaths.sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); + plan.automations = resolvedAutomations; + plan.codegenSteps = []; + plan.prebuildSteps = []; + plan.mainSteps = []; + + return plan; + }, + generateDockerfile: plan => renderNodePrunedDockerfile(plan), + validate: plan => { + if (!plan.project || !plan.target) { + throw new ControlError({ + code: 'node_build_missing_project_target', + message: `Node service "${plan.service.name}" must declare build.project and build.target` + }); + } + if (plan.inputPaths.length === 0) { + throw new ControlError({ + code: 'node_build_missing_projects', + message: `Node service "${plan.service.name}" resolved to an empty Nx build closure` + }); + } + assertArtifactsConfigured(plan); + assertRuntimeCommand(plan); + } +}; diff --git a/src/tooling/control/src/builders/nx.ts b/src/tooling/control/src/builders/nx.ts new file mode 100644 index 000000000..b41ca8fe6 --- /dev/null +++ b/src/tooling/control/src/builders/nx.ts @@ -0,0 +1,161 @@ +import { existsSync, readFileSync } from 'fs'; +import { join, resolve } from 'path'; +import { ControlError } from '../errors'; + +type NxGraphDependency = { + source: string; + target: string; + type: string; +}; + +type NxGraphProjectNode = { + name: string; + type: string; + data: { + root: string; + name?: string; + metadata?: Record; + }; +}; + +type NxProjectGraph = { + nodes: Record; + externalNodes?: Record; + dependencies: Record; +}; + +let normalize = (value: string) => value.replace(/\\/g, '/'); + +let graphCachePathForRoot = (workspaceRoot: string) => + join(workspaceRoot, '.nx', 'workspace-data', 'project-graph.json'); + +let ensureNxGraph = (workspaceRoot: string) => { + let cachePath = graphCachePathForRoot(workspaceRoot); + if (existsSync(cachePath)) return; + + let proc = Bun.spawnSync(['bun', 'x', 'nx', 'show', 'projects', '--json'], { + cwd: workspaceRoot, + stdout: 'ignore', + stderr: 'pipe' + }); + + if (proc.exitCode !== 0) { + throw new ControlError({ + code: 'nx_graph_unavailable', + message: `Unable to generate Nx project graph in ${workspaceRoot}`, + details: [Buffer.from(proc.stderr).toString('utf8').trim()].filter(Boolean) + }); + } +}; + +export let readNxProjectGraph = (workspaceRoot: string): NxProjectGraph => { + let root = resolve(workspaceRoot); + ensureNxGraph(root); + let cachePath = graphCachePathForRoot(root); + + if (!existsSync(cachePath)) { + throw new ControlError({ + code: 'nx_graph_missing', + message: `Nx project graph cache is missing at ${cachePath}` + }); + } + + return JSON.parse(readFileSync(cachePath, 'utf8')) as NxProjectGraph; +}; + +export let getNxProjectRoot = (graph: NxProjectGraph, project: string): string => { + let node = graph.nodes[project]; + if (!node) { + throw new ControlError({ + code: 'nx_project_missing', + message: `Nx project "${project}" is not present in the workspace graph` + }); + } + + return normalize(node.data.root); +}; + +let internalDependenciesOf = (graph: NxProjectGraph, project: string): string[] => + (graph.dependencies[project] ?? []) + .map(dep => dep.target) + .filter(target => !!graph.nodes[target]); + +export let collectNxProjectClosure = (graph: NxProjectGraph, seeds: string[]): string[] => { + let seen = new Set(); + let queue = [...seeds]; + + while (queue.length > 0) { + let project = queue.shift()!; + if (seen.has(project)) continue; + if (!graph.nodes[project]) { + throw new ControlError({ + code: 'nx_project_missing', + message: `Nx project "${project}" is not present in the workspace graph` + }); + } + + seen.add(project); + for (let dep of internalDependenciesOf(graph, project)) { + if (!seen.has(dep)) queue.push(dep); + } + } + + return [...seen].sort((a, b) => a.localeCompare(b)); +}; + +let wildcardToRegex = (pattern: string): RegExp => + new RegExp( + '^' + + pattern + .replace(/[|\\{}()[\]^$+?.]/g, '\\$&') + .replace(/\*/g, '.*') + + '$' + ); + +export let collectNxDependents = (opts: { + graph: NxProjectGraph; + seeds: string[]; + projectFilter?: string; +}): string[] => { + let reverse = new Map>(); + + for (let [source, deps] of Object.entries(opts.graph.dependencies)) { + for (let dep of deps) { + if (!opts.graph.nodes[dep.target]) continue; + let sources = reverse.get(dep.target) ?? new Set(); + sources.add(source); + reverse.set(dep.target, sources); + } + } + + let seen = new Set(opts.seeds); + let queue = [...opts.seeds]; + let collected = new Set(); + let matcher = opts.projectFilter ? wildcardToRegex(opts.projectFilter) : null; + + while (queue.length > 0) { + let project = queue.shift()!; + for (let dependent of reverse.get(project) ?? []) { + if (seen.has(dependent)) continue; + seen.add(dependent); + queue.push(dependent); + + if (!matcher || matcher.test(dependent)) { + collected.add(dependent); + } + } + } + + return [...collected].sort((a, b) => a.localeCompare(b)); +}; + +export let renderNxRunManyCommand = (opts: { target: string; projects: string[] }): string => { + if (opts.projects.length === 0) { + throw new ControlError({ + code: 'nx_automation_missing_projects', + message: `Automation target "${opts.target}" resolved to no Nx projects` + }); + } + + return `bun x nx run-many --target=${opts.target} --projects=${opts.projects.join(',')}`; +}; diff --git a/src/tooling/control/src/builders/pathing.ts b/src/tooling/control/src/builders/pathing.ts new file mode 100644 index 000000000..5bddcc927 --- /dev/null +++ b/src/tooling/control/src/builders/pathing.ts @@ -0,0 +1,211 @@ +import { existsSync, statSync } from 'fs'; +import { relative, resolve } from 'path'; +import { ControlError } from '../errors'; +import type { + ControlBuildCopy, + ControlBuildConfig, + ControlBuildStep, + ControlService, + GeneratedBuildArtifact, + GeneratedBuildPath, + GeneratedBuildStep, + ServiceRegistry +} from '../types'; + +let hasGlob = (input: string): boolean => /[*?[\]{}]/.test(input); + +let normalizeSlashes = (input: string): string => input.replace(/\\/g, '/'); + +let assertInsideRoot = (absPath: string, root: string, label: string) => { + let normalizedRoot = normalizeSlashes(resolve(root)); + let normalizedPath = normalizeSlashes(resolve(absPath)); + if (normalizedPath === normalizedRoot || normalizedPath.startsWith(normalizedRoot + '/')) return; + + throw new ControlError({ + code: 'build_path_outside_root', + message: `Resolved ${label} path escapes the workspace root`, + details: [`Path: ${normalizedPath}`, `Root: ${normalizedRoot}`], + hint: 'Use paths relative to control.toml and keep them inside the repository' + }); +}; + +export let resolveBuildContextRoot = ( + service: ControlService, + registry: ServiceRegistry, + build: ControlBuildConfig +): { kind: 'oss' | 'repo' | 'relative'; root: string } => { + if (build.context === 'repo') { + return { kind: 'repo', root: registry.controlRoot }; + } + + if (!build.context || build.context === 'oss') { + return { kind: 'oss', root: registry.ossRoot }; + } + + let root = resolve(service.dir, build.context); + assertInsideRoot(root, registry.controlRoot, 'build context'); + return { kind: 'relative', root }; +}; + +let resolvePatternBase = ( + service: ControlService, + registry: ServiceRegistry, + rawPattern: string +): { cwd: string; pattern: string } => { + if (rawPattern.startsWith('//')) { + return { + cwd: registry.controlRoot, + pattern: rawPattern.slice(2) + }; + } + + return { + cwd: service.dir, + pattern: rawPattern + }; +}; + +let tryResolveDirectoryPattern = ( + service: ControlService, + registry: ServiceRegistry, + rawPattern: string +): string[] | null => { + let resolvedBase = resolvePatternBase(service, registry, rawPattern); + let normalized = normalizeSlashes(rawPattern); + if (!normalized.endsWith('/**') && !normalized.endsWith('/**/*')) return null; + + let absBase = resolve(resolvedBase.cwd, resolvedBase.pattern.replace(/\/\*\*(\/\*)?$/, '')); + if (!existsSync(absBase)) return []; + return [absBase]; +}; + +let expandGlob = ( + service: ControlService, + registry: ServiceRegistry, + rawPattern: string +): string[] => { + let maybeDir = tryResolveDirectoryPattern(service, registry, rawPattern); + if (maybeDir) return maybeDir; + + let base = resolvePatternBase(service, registry, rawPattern); + let glob = new Bun.Glob(base.pattern); + let results = [...glob.scanSync({ cwd: base.cwd, absolute: true, dot: true })]; + results.sort((a, b) => a.localeCompare(b)); + return results; +}; + +export let resolveBuildPaths = (opts: { + service: ControlService; + registry: ServiceRegistry; + contextRoot: string; + patterns?: string[]; + label: string; + allowMissing?: boolean; +}): GeneratedBuildPath[] => { + let patterns = opts.patterns ?? []; + let files = new Map(); + + for (let pattern of patterns) { + let base = resolvePatternBase(opts.service, opts.registry, pattern); + let matches = hasGlob(pattern) + ? expandGlob(opts.service, opts.registry, pattern) + : [resolve(base.cwd, base.pattern)]; + + if (matches.length === 0 && !opts.allowMissing) { + throw new ControlError({ + code: 'build_path_missing', + message: `No matches found for ${opts.label} pattern "${pattern}"`, + details: [`Service: ${opts.service.name}`, `control.toml: ${opts.service.controlFile}`] + }); + } + + for (let absPath of matches) { + assertInsideRoot(absPath, opts.registry.controlRoot, opts.label); + let exists = existsSync(absPath); + if (!exists && !opts.allowMissing) { + throw new ControlError({ + code: 'build_path_missing', + message: `Resolved ${opts.label} path does not exist`, + details: [`Pattern: ${pattern}`, `Path: ${absPath}`] + }); + } + + let relService = normalizeSlashes(relative(opts.service.dir, absPath) || '.'); + let relContext = normalizeSlashes(relative(opts.contextRoot, absPath) || '.'); + files.set(absPath, { + pattern, + absolutePath: absPath, + relativeToService: relService, + relativeToContext: relContext, + exists + }); + } + } + + return [...files.values()].sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); +}; + +export let resolveBuildSteps = (opts: { + service: ControlService; + registry: ServiceRegistry; + contextRoot: string; + steps?: ControlBuildStep[]; +}): GeneratedBuildStep[] => { + let steps = opts.steps ?? []; + + return steps.map(step => { + let cwdBase = step.cwd ? resolvePatternBase(opts.service, opts.registry, step.cwd) : null; + let cwdAbsolute = cwdBase ? resolve(cwdBase.cwd, cwdBase.pattern) : opts.service.dir; + assertInsideRoot(cwdAbsolute, opts.registry.controlRoot, 'build step cwd'); + + return { + run: step.run, + cwd: step.cwd, + cwdAbsolute, + cwdRelativeToContext: normalizeSlashes(relative(opts.contextRoot, cwdAbsolute) || '.'), + mode: step.mode ?? 'default' + }; + }); +}; + +export let resolveBuildArtifacts = (opts: { + service: ControlService; + registry: ServiceRegistry; + contextRoot: string; + artifacts?: ControlBuildCopy[]; +}): GeneratedBuildArtifact[] => { + let artifacts = opts.artifacts ?? []; + + return artifacts.map(artifact => { + let isContainerAbsolute = artifact.from.startsWith('/') && !artifact.from.startsWith('//'); + let fromBase = isContainerAbsolute + ? null + : resolvePatternBase(opts.service, opts.registry, artifact.from); + let fromAbsolute = isContainerAbsolute + ? artifact.from + : resolve(fromBase!.cwd, fromBase!.pattern); + + if (!isContainerAbsolute) { + assertInsideRoot(fromAbsolute, opts.registry.controlRoot, 'artifact'); + } + + let fromRelativeToContext = isContainerAbsolute + ? artifact.from + : normalizeSlashes(relative(opts.contextRoot, fromAbsolute) || '.'); + + return { + from: artifact.from, + to: artifact.to, + fromAbsolute, + fromRelativeToContext + }; + }); +}; + +export let isDirectoryPath = (path: string): boolean => { + try { + return statSync(path).isDirectory(); + } catch { + return false; + } +}; diff --git a/src/tooling/control/src/builders/rust.ts b/src/tooling/control/src/builders/rust.ts new file mode 100644 index 000000000..eabca67d2 --- /dev/null +++ b/src/tooling/control/src/builders/rust.ts @@ -0,0 +1,108 @@ +import type { BuildBuilder } from './base'; +import { + assertArtifactsConfigured, + assertHasMainInputs, + assertRuntimeCommand, + buildCommandForPlan, + createBasePlan, + defaultRuntime, + formatContainerWorkdir, + formatRunStep, + renderArtifactLines, + renderCopyLines +} from './base'; +import type { GeneratedBuildPlan } from '../types'; + +let defaultRustRuntime = defaultRuntime(undefined, { + base_image: 'debian:trixie-slim', + packages: ['ca-certificates'], + env: {}, + expose: [], + command: '', + healthcheck: '', + user: '', + workdir: '/app' +}); + +let renderAptPackages = (packages: string[]): string[] => { + if (packages.length === 0) return []; + return [ + 'RUN apt-get update && apt-get install -y --no-install-recommends \\', + ...packages.map((pkg, index) => + index === packages.length - 1 ? ` ${pkg} && rm -rf /var/lib/apt/lists/*` : ` ${pkg} \\` + ) + ]; +}; + +let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { + let builderImage = plan.service.config.build?.builder_image?.image ?? 'rust:1.91-slim'; + let systemPackages = plan.service.config.build?.install?.system_packages ?? ['pkg-config', 'libssl-dev']; + let manifestLines = renderCopyLines(plan.manifestFiles); + let inputLines = renderCopyLines(plan.inputPaths); + let prebuildLines = plan.prebuildSteps.map(step => { + let cwd = formatContainerWorkdir(step.cwdRelativeToContext ?? '.'); + return `RUN cd ${cwd} && ${formatRunStep(step.run)}`; + }); + let artifactLines = renderArtifactLines(plan); + let runtimePackageLines = renderAptPackages(plan.runtime.packages); + let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); + let healthcheckLines = plan.runtime.healthcheck + ? [ + 'HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \\', + ` CMD ${plan.runtime.healthcheck}` + ] + : []; + let envLines = Object.entries(plan.runtime.env).map(([key, value]) => `ENV ${key}=${JSON.stringify(value)}`); + + let lines = [ + '# generated by control bootstrap', + `FROM ${builderImage} AS builder-base`, + 'WORKDIR /app', + ...renderAptPackages(systemPackages), + '', + 'FROM builder-base AS deps', + 'WORKDIR /app', + ...manifestLines, + ...prebuildLines, + '', + 'FROM deps AS build', + 'WORKDIR /app', + ...inputLines, + `RUN cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, + '', + 'FROM build AS workspace', + `WORKDIR ${plan.workspaceRoot}`, + 'CMD ["sleep", "infinity"]', + '', + `FROM ${plan.runtime.base_image} AS runner`, + `WORKDIR ${plan.runtime.workdir}`, + ...runtimePackageLines, + ...artifactLines, + ...envLines, + ...exposeLines, + ...healthcheckLines, + ...(plan.runtime.user ? [`USER ${plan.runtime.user}`] : []), + `CMD ${JSON.stringify([plan.runtime.command])}` + ]; + + return lines.filter(Boolean).join('\n') + '\n'; +}; + +export let rustBuildBuilder: BuildBuilder = { + kind: 'rust', + plan: (service, registry) => { + if (service.config.build?.builder !== 'rust') return null; + return createBasePlan({ + service, + registry, + builder: 'rust', + runtime: defaultRuntime(service.config.build.runtime, defaultRustRuntime) + }); + }, + generateDockerfile: plan => renderRustDockerfile(plan), + validate: plan => { + assertHasMainInputs(plan); + assertArtifactsConfigured(plan); + assertRuntimeCommand(plan); + } +}; diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index db92d2aad..005d35577 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -19,6 +19,7 @@ import { formatRunPlan } from './log/formatRunPlan'; import { resolveControlCwd } from './entrypoint'; import { withWorkspaceSession } from './staging/session'; import type { WorkspaceSession } from './types'; +import { runBootstrap } from './bootstrap'; type StagedCliOpts = { entrypoint?: string; @@ -51,8 +52,26 @@ let runCommand = async (fn: () => Promise, opts?: { verbose?: bool } }; +let readNoStageOption = (opts: StagedCliOpts): boolean => + opts['no-stage'] === true || + (opts as StagedCliOpts & { noStage?: boolean; stage?: boolean }).noStage === true || + (opts as StagedCliOpts & { noStage?: boolean; stage?: boolean }).stage === false; + let prog = sade('control'); +prog + .command('bootstrap') + .describe('Generate Nx config and Dockerfiles from control build configs') + .option('--entrypoint, -e', 'Workspace entrypoint') + .option('--check', 'Fail if generated files are out of date') + .option('--print', 'Print generated files instead of writing them') + .option('--service, -s', 'Only generate for one service') + .action(async (opts: { entrypoint?: string; check?: boolean; print?: boolean; service?: string }) => { + await runCommand(async () => { + await runBootstrap(opts); + }); + }); + prog .command('ls') .describe('List all control-managed services') @@ -251,7 +270,7 @@ prog entrypoint: opts.entrypoint, verbose: opts.verbose, keep: opts.keep, - noStage: opts['no-stage'] + noStage: readNoStageOption(opts) }, async (session: WorkspaceSession | null) => { let registry = getRegistry({ @@ -277,7 +296,7 @@ prog verbose: opts.verbose, tagPrefix: opts['tag-prefix'], keep: opts.keep, - noStage: opts['no-stage'], + noStage: readNoStageOption(opts), session, services: ordered }); @@ -311,7 +330,7 @@ prog entrypoint: opts.entrypoint, verbose, keep: opts.keep, - noStage: opts['no-stage'] + noStage: readNoStageOption(opts) }, async (session: WorkspaceSession | null) => { let registry = getRegistry({ @@ -340,7 +359,7 @@ prog ci: true, verbose, keep: opts.keep, - noStage: opts['no-stage'], + noStage: readNoStageOption(opts), session, services: ordered }); diff --git a/src/tooling/control/src/compose/builds.ts b/src/tooling/control/src/compose/builds.ts index 3df5cfe84..fee69940a 100644 --- a/src/tooling/control/src/compose/builds.ts +++ b/src/tooling/control/src/compose/builds.ts @@ -1,4 +1,4 @@ -import { resolve } from 'path'; +import { relative, resolve } from 'path'; import type { ResolvedDep, ResolvedGraph } from '../types'; export type DockerBuildConfig = { @@ -16,13 +16,34 @@ export let resolveBuild = ( opts?: { role: 'test-runner' | 'service' } ): DockerBuildConfig => { let svc = graph.config.service!; - let dockerfile = svc.dockerfile ?? 'Dockerfile'; + let usesGeneratedDockerfile = !!(graph.config.build?.mode && graph.config.build.mode !== 'custom'); + let generatedDockerfile = usesGeneratedDockerfile + ? graph.config.build?.dockerfile ?? 'Dockerfile.generated' + : undefined; + let dockerfile = generatedDockerfile ?? svc.dockerfile ?? 'Dockerfile'; let target = svc.docker_target ?? (opts?.role === 'test-runner' ? 'workspace' : 'runner'); + let normalizeDockerfile = (context: string): string => { + if (!usesGeneratedDockerfile) { + return dockerfile.startsWith('./') ? dockerfile : `./${dockerfile.replace(/^\.\//, '')}`; + } + + let absoluteDockerfile = resolve(graph.dir, dockerfile); + let relativeDockerfile = relative(context, absoluteDockerfile).replace(/\\/g, '/'); + return relativeDockerfile.startsWith('.') ? relativeDockerfile : `./${relativeDockerfile}`; + }; + + if (graph.config.build?.context === 'repo') { + return { + context: graph.entrypoint, + dockerfile: normalizeDockerfile(graph.entrypoint), + target + }; + } if (svc.build_context === 'oss') { return { context: graph.ossRoot, - dockerfile: dockerfile.startsWith('./') ? dockerfile : `./${dockerfile.replace(/^\.\//, '')}`, + dockerfile: normalizeDockerfile(graph.ossRoot), target }; } diff --git a/src/tooling/control/src/discovery.ts b/src/tooling/control/src/discovery.ts index 89b43f127..1afcacb28 100644 --- a/src/tooling/control/src/discovery.ts +++ b/src/tooling/control/src/discovery.ts @@ -7,7 +7,7 @@ export let SKIP_DIRS = new Set([ 'node_modules', '.git', 'dist', - '.turbo', + '.nx', '.control', 'out', 'generated', diff --git a/src/tooling/control/src/run/build.ts b/src/tooling/control/src/run/build.ts index 0c0a85b25..7d896f147 100644 --- a/src/tooling/control/src/run/build.ts +++ b/src/tooling/control/src/run/build.ts @@ -1,4 +1,6 @@ import { resolve } from 'path'; +import { createBuildPlan, renderDockerfileForPlan } from '../builders'; +import { materializeBuildContext } from '../builders/context'; import { collectRunnerBuilds } from '../compose/builds'; import { resolveGraph } from '../graph/resolver'; import { resolveControlDir, resolveEntrypoint, resolveControlCwd } from '../entrypoint'; @@ -49,10 +51,33 @@ let runBuildForService = async ( for (let spec of specs) { let dockerfilePath = resolve(spec.context, spec.dockerfile); + let dockerContext = spec.context; let tag = imageTag({ tagPrefix, rootName: graph.name, specName: spec.name }); + let targetService = registry.byName.get(spec.name); logger.info(`Building ${spec.name} (${spec.target}) ...`); + if (targetService?.config.build?.mode && targetService.config.build.mode !== 'custom') { + let plan = createBuildPlan(targetService, registry); + if (!plan) { + throw new DockerError({ + service: graph.name, + phase: 'build', + message: `Unable to create build plan for ${targetService.name}` + }); + } + + let renderedDockerfile = renderDockerfileForPlan(plan); + let materialized = await materializeBuildContext({ + plan, + registry, + session: opts.session ?? null, + renderedDockerfile + }); + dockerContext = materialized.root; + dockerfilePath = materialized.dockerfilePath; + } + let cmd = [ 'docker', 'build', @@ -68,7 +93,7 @@ let runBuildForService = async ( cmd.push('--build-arg', `SENTRY_AUTH_TOKEN=${process.env.SENTRY_AUTH_TOKEN}`); } - cmd.push(spec.context); + cmd.push(dockerContext); await runShell(cmd, { phase: 'build', diff --git a/src/tooling/control/src/staging/copyTree.ts b/src/tooling/control/src/staging/copyTree.ts index 965295eb1..bd0193c33 100644 --- a/src/tooling/control/src/staging/copyTree.ts +++ b/src/tooling/control/src/staging/copyTree.ts @@ -88,15 +88,23 @@ let copyFilesFromGitRoot = async (opts: { destRoot: string; pathPrefix?: string; skipPaths?: Set; + includePaths?: Set; }): Promise => { let files = await listGitFiles(opts.sourceRoot); let count = 0; let prefix = opts.pathPrefix ?? ''; let skipPaths = opts.skipPaths ?? new Set(); + let includePaths = opts.includePaths; for (let rel of files) { if (shouldSkipRelativePath(rel)) continue; if ([...skipPaths].some(skip => rel === skip || rel.startsWith(`${skip}/`))) continue; + if ( + includePaths && + ![...includePaths].some(include => rel === include || rel.startsWith(`${include}/`)) + ) { + continue; + } let src = join(opts.sourceRoot, rel); if (!existsSync(src)) continue; @@ -181,6 +189,70 @@ export let copyGitAwareTree = async (opts: { return { fileCount, durationMs: Date.now() - started }; }; +export let copyGitAwareSelection = async (opts: { + sourceRoot: string; + destRoot: string; + includePaths: string[]; + verbose?: boolean; +}): Promise => { + let sourceRoot = resolve(opts.sourceRoot); + let destRoot = resolve(opts.destRoot); + let started = Date.now(); + + if (!(await isGitRepo(sourceRoot))) { + throw new Error(`Cannot stage workspace selection: ${sourceRoot} is not a git repository`); + } + + mkdirSync(destRoot, { recursive: true }); + + let normalizedIncludes = new Set( + opts.includePaths + .map(path => path.replace(/\\/g, '/').replace(/^\.\/+/, '').replace(/\/+$/, '')) + .filter(Boolean) + ); + + let submodulePaths = await listSubmodulePaths(sourceRoot); + let skipPaths = new Set(submodulePaths); + + let fileCount = await copyFilesFromGitRoot({ + sourceRoot, + destRoot, + skipPaths, + includePaths: normalizedIncludes + }); + + for (let subPath of submodulePaths) { + let selectedInSubmodule = [...normalizedIncludes] + .filter(include => include === subPath || include.startsWith(`${subPath}/`)) + .map(include => include === subPath ? '' : include.slice(subPath.length + 1)) + .filter(include => include !== ''); + + if (selectedInSubmodule.length === 0) continue; + + let subSource = join(sourceRoot, subPath); + if (!existsSync(subSource)) { + throw new Error( + `Submodule "${subPath}" is not initialized. Run: git submodule update --init --recursive` + ); + } + + fileCount += await copyFilesFromGitRoot({ + sourceRoot: subSource, + destRoot, + pathPrefix: subPath, + includePaths: new Set(selectedInSubmodule) + }); + } + + if (opts.verbose) { + console.error( + `[control:stage] Copied ${fileCount} selected files from ${sourceRoot} to ${destRoot} (${Date.now() - started}ms)` + ); + } + + return { fileCount, durationMs: Date.now() - started }; +}; + export let mapPathToStaged = (opts: { repoRoot: string; stagedRoot: string; diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts index fd6d3ddc9..7a14db197 100644 --- a/src/tooling/control/src/types.ts +++ b/src/tooling/control/src/types.ts @@ -36,6 +36,80 @@ export type ControlDep = { } | boolean; }; +export type ControlBuildStep = { + run: string; + cwd?: string; + mode?: 'default' | 'cache-warm'; +}; + +export type ControlBuildCopy = { + from: string; + to: string; +}; + +export type ControlBuildAutomation = { + name: string; + kind: 'run-targets' | 'run-dependents'; + target: string; + projects: string[]; + project_filter?: string; +}; + +export type ControlBuildRuntime = { + base_image?: string; + packages?: string[]; + env?: Record; + expose?: number[]; + command?: string; + healthcheck?: string; + user?: string; + workdir?: string; +}; + +export type ControlBuildConfig = { + builder: 'node' | 'rust' | 'go'; + mode?: 'generated' | 'custom' | 'generated-with-overlay'; + context?: string; + project?: string; + target?: string; + automations?: ControlBuildAutomation[]; + extra_paths?: string[]; + dockerfile?: string; + runner_stage?: 'generated' | 'custom'; + workspace_root?: string; + builder_image?: { + image?: string; + }; + install?: { + strategy?: string; + linker?: string; + lockfile?: string; + system_packages?: string[]; + }; + manifests?: { + files?: string[]; + }; + inputs?: { + paths?: string[]; + packages?: string[]; + include_paths?: string[]; + generated_paths?: string[]; + }; + codegen?: { + steps?: ControlBuildStep[]; + }; + prebuild?: { + steps?: ControlBuildStep[]; + }; + main?: { + steps?: ControlBuildStep[]; + }; + artifacts?: { + copy?: ControlBuildCopy[]; + }; + runtime?: ControlBuildRuntime; +}; + export type ControlConfig = { control: { name: string; @@ -66,6 +140,7 @@ export type ControlConfig = { env?: Record; databases?: ControlDatabase[]; deps?: ControlDep[]; + build?: ControlBuildConfig; }; export type ResolvedDep = { @@ -162,6 +237,58 @@ export type BuildOptions = { noStage?: boolean; }; +export type GeneratedBuildPath = { + pattern: string; + absolutePath: string; + relativeToService: string; + relativeToContext: string; + exists: boolean; +}; + +export type GeneratedBuildStep = { + run: string; + cwd?: string; + cwdAbsolute?: string; + cwdRelativeToContext?: string; + mode: 'default' | 'cache-warm'; +}; + +export type GeneratedBuildAutomation = { + name: string; + kind: 'run-targets' | 'run-dependents'; + target: string; + projects: string[]; + command: string; +}; + +export type GeneratedBuildArtifact = { + from: string; + to: string; + fromAbsolute: string; + fromRelativeToContext: string; +}; + +export type GeneratedBuildPlan = { + builder: 'node' | 'rust' | 'go'; + service: ControlService; + mode: 'generated' | 'custom' | 'generated-with-overlay'; + contextKind: 'oss' | 'repo' | 'relative'; + contextRoot: string; + dockerfilePath: string; + workspaceRoot: string; + manifestFiles: GeneratedBuildPath[]; + inputPaths: GeneratedBuildPath[]; + automations: GeneratedBuildAutomation[]; + codegenSteps: GeneratedBuildStep[]; + prebuildSteps: GeneratedBuildStep[]; + mainSteps: GeneratedBuildStep[]; + artifacts: GeneratedBuildArtifact[]; + runtime: Required; + project?: string; + target?: string; + serviceDockerfile?: string; +}; + export type RunOptions = { target?: string; mode: 'e2e' | 'unit'; diff --git a/turbo.json b/turbo.json deleted file mode 100644 index 6d953e31d..000000000 --- a/turbo.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "$schema": "https://turborepo.com/schema.json", - "ui": "tui", - "tasks": { - "enterprise:dev": { - "cache": false, - "persistent": true - }, - "build": { - "dependsOn": [ - "^build" - ] - }, - "prisma:generate": { - "dependsOn": [ - "^prisma:generate" - ] - }, - "prisma:push": { - "cache": false, - "dependsOn": [ - "^prisma:push" - ], - "env": [ - "DATABASE_URL", - "PAYMENT_DATABASE_URL", - "FEDERATION_CORE_DATABASE_URL" - ] - }, - "generate:client": { - "dependsOn": [ - "^generate:client" - ], - "cache": false, - "env": [ - "API_URL" - ] - }, - "generate:client:dashboard": { - "dependsOn": [ - "^generate:client:dashboard" - ], - "cache": false, - "env": [ - "API_URL" - ] - }, - "generate:client:consumer": { - "dependsOn": [ - "^generate:client:consumer" - ], - "cache": false, - "env": [ - "API_URL" - ] - }, - "frontend:build": { - "dependsOn": [ - "^frontend:build" - ], - "env": [ - "SENTRY_AUTH_TOKEN", - "METORIAL_ENV", - "VITE_*" - ] - }, - "deploy:only": { - "env": [ - "SENTRY_AUTH_TOKEN", - "METORIAL_ENV", - "VITE_*", - "CLOUDFLARE_API_TOKEN", - "CLOUDFLARE_ACCOUNT_ID" - ] - }, - "deploy": { - "env": [ - "SENTRY_AUTH_TOKEN", - "METORIAL_ENV", - "VITE_*", - "CLOUDFLARE_API_TOKEN", - "CLOUDFLARE_ACCOUNT_ID" - ] - }, - "server:build": { - "dependsOn": [ - "^build", - "^server:build" - ], - "env": [ - "SENTRY_AUTH_TOKEN", - "METORIAL_ENV" - ] - }, - "oss:server:build": { - "dependsOn": [ - "^build", - "^server:build", - "^oss:server:build" - ], - "env": [ - "METORIAL_ENV" - ] - }, - "test": { - "dependsOn": [ - "^test" - ] - }, - "check-types": { - "dependsOn": [ - "^check-types" - ] - }, - "dev": { - "cache": false, - "persistent": true - } - } -} \ No newline at end of file From aecc9f4a5889764a17af8c9e6c30ad8bd34a7ba8 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 12:47:11 +0200 Subject: [PATCH 19/69] wip --- .github/workflows/reusable-control.yml | 12 +- bun.lock | 15 +- src/systems/ares/service/Dockerfile | 20 +- src/systems/ares/service/Dockerfile.generated | 34 --- src/systems/ares/service/control.toml | 4 +- src/systems/cargo/service/Dockerfile | 18 +- .../cargo/service/Dockerfile.generated | 28 --- src/systems/cargo/service/control.toml | 5 +- src/systems/forge/service/Dockerfile | 18 +- .../forge/service/Dockerfile.generated | 27 --- src/systems/forge/service/control.toml | 4 +- src/systems/function-bay/deflector/Dockerfile | 41 ++-- .../deflector/Dockerfile.generated | 23 -- .../function-bay/deflector/control.toml | 2 +- src/systems/function-bay/service/Dockerfile | 18 +- .../function-bay/service/Dockerfile.generated | 27 --- src/systems/function-bay/service/control.toml | 4 +- src/systems/object-storage/service/Dockerfile | 89 +++---- .../service/Dockerfile.generated | 35 --- .../object-storage/service/control.toml | 2 +- .../origin/apps/code-bucket/Dockerfile | 96 +++----- .../apps/code-bucket/Dockerfile.generated | 37 --- .../origin/apps/code-bucket/control.toml | 29 ++- .../origin/apps/code-workspace/package.json | 5 +- .../origin/apps/code-workspace/tsconfig.json | 3 +- src/systems/origin/apps/service/Dockerfile | 18 +- .../origin/apps/service/Dockerfile.generated | 28 --- src/systems/origin/apps/service/control.toml | 4 +- .../origin/scripts/build-code-workspace.sh | 19 -- src/systems/relay/service/Dockerfile | 18 +- .../relay/service/Dockerfile.generated | 27 --- src/systems/relay/service/control.toml | 4 +- src/systems/shuttle/service/Dockerfile | 18 +- .../shuttle/service/Dockerfile.generated | 28 --- src/systems/shuttle/service/control.toml | 4 +- .../shuttle/service/src/lib/http/sse.ts | 2 + src/systems/signal/service/Dockerfile | 18 +- .../signal/service/Dockerfile.generated | 27 --- src/systems/signal/service/control.toml | 4 +- src/systems/slates/apps/hub/Dockerfile | 22 +- .../slates/apps/hub/Dockerfile.generated | 30 --- src/systems/slates/apps/hub/control.toml | 6 +- src/systems/slates/apps/registry/Dockerfile | 22 +- .../slates/apps/registry/Dockerfile.generated | 30 --- src/systems/slates/apps/registry/control.toml | 6 +- .../subspace/apps/controller/Dockerfile | 18 +- .../apps/controller/Dockerfile.generated | 26 -- .../subspace/apps/controller/control.toml | 5 +- src/systems/subspace/apps/public/Dockerfile | 20 +- .../subspace/apps/public/Dockerfile.generated | 29 --- src/systems/subspace/apps/public/control.toml | 6 +- src/systems/subspace/apps/public/package.json | 3 + src/systems/subspace/apps/worker/Dockerfile | 18 +- .../subspace/apps/worker/Dockerfile.generated | 25 -- src/systems/subspace/apps/worker/control.toml | 5 +- src/systems/synthesis/service/Dockerfile | 18 +- .../synthesis/service/Dockerfile.generated | 27 --- src/systems/synthesis/service/control.toml | 4 +- src/systems/voyager/service/Dockerfile | 18 +- .../voyager/service/Dockerfile.generated | 27 --- src/systems/voyager/service/control.toml | 4 +- src/tooling/control/src/builders/base.ts | 44 +++- .../control/src/builders/builders.test.ts | 2 +- src/tooling/control/src/builders/context.ts | 72 ++++-- src/tooling/control/src/builders/go.ts | 23 +- src/tooling/control/src/builders/node.ts | 223 +++++++++++++++--- src/tooling/control/src/builders/pathing.ts | 46 ++++ src/tooling/control/src/builders/rust.ts | 22 +- src/tooling/control/src/compose/builds.ts | 8 +- src/tooling/control/src/compose/generator.ts | 30 ++- src/tooling/control/src/run/build.ts | 4 +- src/tooling/control/src/run/runner.ts | 61 ++++- src/tooling/control/src/types.ts | 20 ++ 73 files changed, 819 insertions(+), 920 deletions(-) delete mode 100644 src/systems/ares/service/Dockerfile.generated delete mode 100644 src/systems/cargo/service/Dockerfile.generated delete mode 100644 src/systems/forge/service/Dockerfile.generated delete mode 100644 src/systems/function-bay/deflector/Dockerfile.generated delete mode 100644 src/systems/function-bay/service/Dockerfile.generated delete mode 100644 src/systems/object-storage/service/Dockerfile.generated delete mode 100644 src/systems/origin/apps/code-bucket/Dockerfile.generated delete mode 100644 src/systems/origin/apps/service/Dockerfile.generated delete mode 100755 src/systems/origin/scripts/build-code-workspace.sh delete mode 100644 src/systems/relay/service/Dockerfile.generated delete mode 100644 src/systems/shuttle/service/Dockerfile.generated delete mode 100644 src/systems/signal/service/Dockerfile.generated delete mode 100644 src/systems/slates/apps/hub/Dockerfile.generated delete mode 100644 src/systems/slates/apps/registry/Dockerfile.generated delete mode 100644 src/systems/subspace/apps/controller/Dockerfile.generated delete mode 100644 src/systems/subspace/apps/public/Dockerfile.generated delete mode 100644 src/systems/subspace/apps/worker/Dockerfile.generated delete mode 100644 src/systems/synthesis/service/Dockerfile.generated delete mode 100644 src/systems/voyager/service/Dockerfile.generated diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index d3373e135..674899b11 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -63,18 +63,10 @@ jobs: run: bun i --linker=hoisted - name: Generate Prisma Clients - run: bunx turbo run --ui=stream --concurrency=1 prisma:generate + run: bun x nx run-many --target=prisma:generate --all --parallel=1 - name: Build platform system clients - run: | - if [ -f src/systems/scripts/build-workspace-clients.sh ]; then - sh src/systems/scripts/build-workspace-clients.sh - elif [ -f oss/src/systems/scripts/build-workspace-clients.sh ]; then - sh oss/src/systems/scripts/build-workspace-clients.sh - else - echo "build-workspace-clients.sh not found" >&2 - exit 1 - fi + run: bun x nx run-many --target=build --projects=@metorial-platform-systems/origin-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/synthesis-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/ares-client,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/subspace-client - name: Run control env: diff --git a/bun.lock b/bun.lock index 8eba7f646..8072f9bb1 100644 --- a/bun.lock +++ b/bun.lock @@ -2880,7 +2880,7 @@ "vscode-textmate": "^9.2.0", }, "devDependencies": { - "@types/node": "*", + "@types/node": "20.x", "@types/vscode": "*", "rollup": "^4.28.1", "typescript": "~5.8.3", @@ -3514,6 +3514,8 @@ "@metorial-subspace/module-tenant": "^1.0.0", "@metorial-subspace/presenters": "^1.0.0", "@metorial-subspace/provider-native": "^1.0.0", + "@metorial/data-hooks": "workspace:*", + "@metorial/ui": "workspace:*", "@mtsrc/api-key": "1.0.0", "@mtsrc/api-mux": "1.0.0", "@mtsrc/error": "1.0.0", @@ -3521,6 +3523,7 @@ "@mtsrc/rpc-server": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", + "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.34.0", "@sentry/cli": "^3.2.0", "@types/react-dom": "^19.2.3", @@ -9882,7 +9885,7 @@ "@metorial/code-editor/vitest": ["vitest@0.34.6", "", { "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", "@vitest/expect": "0.34.6", "@vitest/runner": "0.34.6", "@vitest/snapshot": "0.34.6", "@vitest/spy": "0.34.6", "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", "jsdom": "*", "playwright": "*", "safaridriver": "*", "webdriverio": "*" }, "optionalPeers": ["@edge-runtime/vm", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom", "playwright", "safaridriver", "webdriverio"], "bin": { "vitest": "vitest.mjs" } }, "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q=="], - "@metorial/code-workspace/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@metorial/code-workspace/@types/node": ["@types/node@20.19.39", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw=="], "@metorial/code-workspace/typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], @@ -10026,8 +10029,6 @@ "@metorial/origin/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@metorial/origin/axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], - "@metorial/pages/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], "@metorial/presenter/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -12262,8 +12263,6 @@ "@metorial/code-editor/vitest/vite-node": ["vite-node@0.34.6", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA=="], - "@metorial/code-workspace/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/code/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], "@metorial/code/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], @@ -13080,10 +13079,6 @@ "@metorial/origin/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "@metorial/origin/axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], - - "@metorial/origin/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "@metorial/pages/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], "@metorial/pages/vitest/@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index adbb974c6..5720bad0c 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -1,22 +1,28 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares -RUN cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares -RUN cd /app && bun x nx run @metorial/ares:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/ares:server:build FROM build AS workspace WORKDIR /app/src/systems/ares/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/ares/service/dist /app/dist COPY --from=build /app/src/systems/ares/service/prisma /app/prisma COPY --from=build /app/src/systems/ares/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/ares/service/Dockerfile.generated b/src/systems/ares/service/Dockerfile.generated deleted file mode 100644 index adbb974c6..000000000 --- a/src/systems/ares/service/Dockerfile.generated +++ /dev/null @@ -1,34 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares -RUN cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares -RUN cd /app && bun x nx run @metorial/ares:server:build -FROM build AS workspace -WORKDIR /app/src/systems/ares/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/ares/service/dist /app/dist -COPY --from=build /app/src/systems/ares/service/prisma /app/prisma -COPY --from=build /app/src/systems/ares/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/src/systems/ares/service/frontend/auth/dist /app/frontend/auth/dist -COPY --from=build /app/src/systems/ares/service/frontend/admin/dist /app/frontend/admin/dist -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52120 -EXPOSE 52121 -EXPOSE 52122 -EXPOSE 52123 -EXPOSE 12121 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52120/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/ares/service/control.toml b/src/systems/ares/service/control.toml index eb03c8277..fed8045ae 100644 --- a/src/systems/ares/service/control.toml +++ b/src/systems/ares/service/control.toml @@ -3,7 +3,7 @@ name = "ares" [service] port = 52120 -dockerfile = "src/systems/ares/service/Dockerfile.generated" +dockerfile = "src/systems/ares/service/Dockerfile" build_context = "oss" health = { cmd = "bun -e \"fetch('http://localhost:12121/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } @@ -13,7 +13,7 @@ mode = "generated" context = "oss" project = "@metorial/ares" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "ares-prisma" diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index 17e776e74..e7eccf173 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db -RUN cd /app && bun x nx run @metorial-cargo/service:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial-cargo/service:server:build FROM build AS workspace WORKDIR /app/src/systems/cargo/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/cargo/service/dist /app/dist COPY --from=build /app/src/systems/cargo/db/prisma /app/prisma COPY --from=build /app/src/systems/cargo/db/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/cargo/service/Dockerfile.generated b/src/systems/cargo/service/Dockerfile.generated deleted file mode 100644 index 17e776e74..000000000 --- a/src/systems/cargo/service/Dockerfile.generated +++ /dev/null @@ -1,28 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db -RUN cd /app && bun x nx run @metorial-cargo/service:server:build -FROM build AS workspace -WORKDIR /app/src/systems/cargo/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/cargo/service/dist /app/dist -COPY --from=build /app/src/systems/cargo/db/prisma /app/prisma -COPY --from=build /app/src/systems/cargo/db/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52150 -EXPOSE 52151 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52151/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss --schema prisma/schema --config prisma.config.ts && bun /app/dist/index.js"] diff --git a/src/systems/cargo/service/control.toml b/src/systems/cargo/service/control.toml index ffcd7cb35..d0154a538 100644 --- a/src/systems/cargo/service/control.toml +++ b/src/systems/cargo/service/control.toml @@ -3,7 +3,7 @@ name = "cargo" [service] port = 52150 -dockerfile = "src/systems/cargo/service/Dockerfile.generated" +dockerfile = "src/systems/cargo/service/Dockerfile" build_context = "oss" health = { path = "/ping", cmd = "bun -e \"fetch('http://localhost:52151/ping').then(()=>process.exit(0)).catch(()=>process.exit(1))\"" } @@ -13,7 +13,8 @@ mode = "generated" context = "oss" project = "@metorial-cargo/service" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" +extra_paths = ["//oss/src/systems/_shared/entityImage.ts"] [[build.automations]] name = "cargo-db-prisma" diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index f935c6625..ab287d99a 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge -RUN cd /app && bun x nx run @metorial/forge:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/forge:server:build FROM build AS workspace WORKDIR /app/src/systems/forge/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/forge/service/dist /app/dist COPY --from=build /app/src/systems/forge/service/prisma /app/prisma COPY --from=build /app/src/systems/forge/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/forge/service/Dockerfile.generated b/src/systems/forge/service/Dockerfile.generated deleted file mode 100644 index f935c6625..000000000 --- a/src/systems/forge/service/Dockerfile.generated +++ /dev/null @@ -1,27 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge -RUN cd /app && bun x nx run @metorial/forge:server:build -FROM build AS workspace -WORKDIR /app/src/systems/forge/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/forge/service/dist /app/dist -COPY --from=build /app/src/systems/forge/service/prisma /app/prisma -COPY --from=build /app/src/systems/forge/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52020 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52020/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/forge/service/control.toml b/src/systems/forge/service/control.toml index df00db40a..23d39fe3d 100644 --- a/src/systems/forge/service/control.toml +++ b/src/systems/forge/service/control.toml @@ -3,7 +3,7 @@ name = "forge" [service] port = 52020 -dockerfile = "src/systems/forge/service/Dockerfile.generated" +dockerfile = "src/systems/forge/service/Dockerfile" build_context = "oss" [build] @@ -12,7 +12,7 @@ mode = "generated" context = "oss" project = "@metorial/forge" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "forge-prisma" diff --git a/src/systems/function-bay/deflector/Dockerfile b/src/systems/function-bay/deflector/Dockerfile index 189855ae9..354bb14ea 100644 --- a/src/systems/function-bay/deflector/Dockerfile +++ b/src/systems/function-bay/deflector/Dockerfile @@ -1,28 +1,25 @@ -FROM golang:1.23-alpine AS builder - +# syntax=docker/dockerfile:1.7 +# generated by control bootstrap +FROM golang:1.24-alpine AS deps WORKDIR /app - -RUN apk add --no-cache git ca-certificates - -COPY src/systems/function-bay/deflector/go.mod src/systems/function-bay/deflector/go.sum* ./src/systems/function-bay/deflector/ -RUN cd src/systems/function-bay/deflector && go mod download - -COPY src/systems/function-bay/deflector/ ./src/systems/function-bay/deflector/ -RUN cd src/systems/function-bay/deflector && \ - CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/deflector ./cmd/deflector - -FROM builder AS workspace - +ENV GOTOOLCHAIN=auto +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk git ca-certificates +COPY src/systems/function-bay/deflector/go.mod ./src/systems/function-bay/deflector/ +COPY src/systems/function-bay/deflector/go.sum ./src/systems/function-bay/deflector/ +RUN --mount=type=cache,target=/go/pkg/mod cd /app/src/systems/function-bay/deflector && go mod download +FROM deps AS build +WORKDIR /app +COPY src/systems/function-bay/deflector/cmd ./src/systems/function-bay/deflector/cmd/ +COPY src/systems/function-bay/deflector/internal ./src/systems/function-bay/deflector/internal/ +RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build cd /app/src/systems/function-bay/deflector && CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /tmp/deflector ./cmd/deflector +FROM build AS workspace WORKDIR /app/src/systems/function-bay/deflector CMD ["sleep", "infinity"] - FROM alpine:3.22 AS runner - -RUN apk add --no-cache ca-certificates -COPY --from=builder /out/deflector /usr/local/bin/deflector - +WORKDIR /app +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk ca-certificates wget +COPY --from=build /tmp/deflector /usr/local/bin/deflector EXPOSE 8080 -HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget -qO- http://localhost:8080/healthz >/dev/null || exit 1 - -ENTRYPOINT ["/usr/local/bin/deflector"] +CMD ["/usr/local/bin/deflector"] diff --git a/src/systems/function-bay/deflector/Dockerfile.generated b/src/systems/function-bay/deflector/Dockerfile.generated deleted file mode 100644 index 69422ca45..000000000 --- a/src/systems/function-bay/deflector/Dockerfile.generated +++ /dev/null @@ -1,23 +0,0 @@ -# generated by control bootstrap -FROM golang:1.24-alpine AS deps -WORKDIR /app -RUN apk add --no-cache git ca-certificates -COPY src/systems/function-bay/deflector/go.mod ./src/systems/function-bay/deflector/ -COPY src/systems/function-bay/deflector/go.sum ./src/systems/function-bay/deflector/ -RUN go mod download -FROM deps AS build -WORKDIR /app -COPY src/systems/function-bay/deflector/cmd ./src/systems/function-bay/deflector/ -COPY src/systems/function-bay/deflector/internal ./src/systems/function-bay/deflector/ -RUN cd /app/src/systems/function-bay/deflector && CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /tmp/deflector ./cmd/deflector -FROM build AS workspace -WORKDIR /app/src/systems/function-bay/deflector -CMD ["sleep", "infinity"] -FROM alpine:3.22 AS runner -WORKDIR /app -RUN apk add --no-cache ca-certificates wget -COPY --from=build /tmp/deflector /usr/local/bin/deflector -EXPOSE 8080 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD wget -qO- http://localhost:8080/healthz >/dev/null || exit 1 -CMD ["/usr/local/bin/deflector"] diff --git a/src/systems/function-bay/deflector/control.toml b/src/systems/function-bay/deflector/control.toml index 9fd46ca1f..837df5ef9 100644 --- a/src/systems/function-bay/deflector/control.toml +++ b/src/systems/function-bay/deflector/control.toml @@ -11,7 +11,7 @@ health = { path = "/healthz" } builder = "go" mode = "generated" context = "oss" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [build.manifests] files = [ diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 54b7f87fe..16f551b68 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay -RUN cd /app && bun x nx run @metorial/function-bay:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/function-bay:server:build FROM build AS workspace WORKDIR /app/src/systems/function-bay/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/function-bay/service/dist /app/dist COPY --from=build /app/src/systems/function-bay/service/prisma /app/prisma COPY --from=build /app/src/systems/function-bay/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/function-bay/service/Dockerfile.generated b/src/systems/function-bay/service/Dockerfile.generated deleted file mode 100644 index 54b7f87fe..000000000 --- a/src/systems/function-bay/service/Dockerfile.generated +++ /dev/null @@ -1,27 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay -RUN cd /app && bun x nx run @metorial/function-bay:server:build -FROM build AS workspace -WORKDIR /app/src/systems/function-bay/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/function-bay/service/dist /app/dist -COPY --from=build /app/src/systems/function-bay/service/prisma /app/prisma -COPY --from=build /app/src/systems/function-bay/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52030 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52030/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/function-bay/service/control.toml b/src/systems/function-bay/service/control.toml index 3135f71a1..9b46128ef 100644 --- a/src/systems/function-bay/service/control.toml +++ b/src/systems/function-bay/service/control.toml @@ -3,7 +3,7 @@ name = "function-bay" [service] port = 52030 -dockerfile = "src/systems/function-bay/service/Dockerfile.generated" +dockerfile = "src/systems/function-bay/service/Dockerfile" build_context = "oss" [build] @@ -12,7 +12,7 @@ mode = "generated" context = "oss" project = "@metorial/function-bay" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "function-bay-prisma" diff --git a/src/systems/object-storage/service/Dockerfile b/src/systems/object-storage/service/Dockerfile index 4a7ae28fb..49c5b72e8 100644 --- a/src/systems/object-storage/service/Dockerfile +++ b/src/systems/object-storage/service/Dockerfile @@ -1,61 +1,40 @@ -# Build stage -FROM rust:1.91-slim AS builder - -RUN apt-get update && apt-get install -y \ - pkg-config \ - libssl-dev \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /app/src/systems/object-storage/service - -COPY src/systems/object-storage/service/Cargo.toml src/systems/object-storage/service/Cargo.lock ./ -COPY src/systems/object-storage/service/object-store/Cargo.toml ./object-store/ -COPY src/systems/object-storage/service/object-store-backends/Cargo.toml ./object-store-backends/ - -RUN mkdir -p object-store/src object-store-backends/src && \ - echo "fn main() {}" > object-store/src/main.rs && \ - echo "pub fn dummy() {}" > object-store/src/lib.rs && \ - echo "pub fn dummy() {}" > object-store-backends/src/lib.rs && \ - cargo build --release && \ - rm -rf object-store/src object-store-backends/src - -COPY src/systems/object-storage/service/object-store ./object-store -COPY src/systems/object-storage/service/object-store-backends ./object-store-backends - -RUN rm -rf target/release/object-store-service target/release/deps/object_store_service* target/release/.fingerprint/object-store-* && \ - cargo build --release --bin object-store-service - -FROM builder AS workspace - +# syntax=docker/dockerfile:1.7 +# generated by control bootstrap +FROM rust:1.91-slim AS builder-base +WORKDIR /app +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ + pkg-config \ + libssl-dev && rm -rf /var/lib/apt/lists/* +FROM builder-base AS deps +WORKDIR /app +COPY src/systems/object-storage/service/Cargo.lock ./src/systems/object-storage/service/ +COPY src/systems/object-storage/service/Cargo.toml ./src/systems/object-storage/service/ +COPY src/systems/object-storage/service/object-store-backends/Cargo.toml ./src/systems/object-storage/service/object-store-backends/ +COPY src/systems/object-storage/service/object-store/Cargo.toml ./src/systems/object-storage/service/object-store/ +RUN --mount=type=cache,target=/usr/local/cargo/registry --mount=type=cache,target=/usr/local/cargo/git cd /app/src/systems/object-storage/service && mkdir -p object-store/src object-store-backends/src && echo "fn main() {}" > object-store/src/main.rs && echo "pub fn dummy() {}" > object-store/src/lib.rs && echo "pub fn dummy() {}" > object-store-backends/src/lib.rs && cargo build --release && rm -rf object-store/src object-store-backends/src +FROM deps AS build +WORKDIR /app +COPY src/systems/object-storage/service/object-store ./src/systems/object-storage/service/object-store/ +COPY src/systems/object-storage/service/object-store-backends ./src/systems/object-storage/service/object-store-backends/ +RUN --mount=type=cache,target=/usr/local/cargo/registry --mount=type=cache,target=/usr/local/cargo/git cd /app/src/systems/object-storage/service && cargo build --release --bin object-store-service +FROM build AS workspace WORKDIR /app/src/systems/object-storage/service CMD ["sleep", "infinity"] - -# Production stage FROM debian:trixie-slim AS runner - -RUN apt-get update && apt-get install -y \ - ca-certificates \ - libssl3 \ - curl \ - && rm -rf /var/lib/apt/lists/* - -RUN useradd -m -u 1000 appuser - WORKDIR /app - -COPY --from=builder /app/src/systems/object-storage/service/target/release/object-store-service /app/object-store-service - -RUN mkdir -p /app/data && chown -R appuser:appuser /app - -USER appuser - +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + libssl3 \ + curl && rm -rf /var/lib/apt/lists/* +COPY --from=build /app/src/systems/object-storage/service/target/release/object-store-service /app/object-store-service +ENV RUST_LOG="info" +ENV OBJECT_STORE_BACKEND_TYPE="local" +ENV OBJECT_STORE_BACKEND_ROOT_PATH="/app/data" EXPOSE 52010 - -ENV RUST_LOG=info -ENV OBJECT_STORE_BACKEND_TYPE=local -ENV OBJECT_STORE_BACKEND_ROOT_PATH=/app/data - -HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52010/health || exit 1 - +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:52010/health || exit 1 CMD ["/app/object-store-service"] diff --git a/src/systems/object-storage/service/Dockerfile.generated b/src/systems/object-storage/service/Dockerfile.generated deleted file mode 100644 index f1e236654..000000000 --- a/src/systems/object-storage/service/Dockerfile.generated +++ /dev/null @@ -1,35 +0,0 @@ -# generated by control bootstrap -FROM rust:1.91-slim AS builder-base -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - pkg-config \ - libssl-dev && rm -rf /var/lib/apt/lists/* -FROM builder-base AS deps -WORKDIR /app -COPY src/systems/object-storage/service/Cargo.lock ./src/systems/object-storage/service/ -COPY src/systems/object-storage/service/Cargo.toml ./src/systems/object-storage/service/ -COPY src/systems/object-storage/service/object-store-backends/Cargo.toml ./src/systems/object-storage/service/object-store-backends/ -COPY src/systems/object-storage/service/object-store/Cargo.toml ./src/systems/object-storage/service/object-store/ -RUN cd /app/src/systems/object-storage/service && mkdir -p object-store/src object-store-backends/src && echo "fn main() {}" > object-store/src/main.rs && echo "pub fn dummy() {}" > object-store/src/lib.rs && echo "pub fn dummy() {}" > object-store-backends/src/lib.rs && cargo build --release && rm -rf object-store/src object-store-backends/src -FROM deps AS build -WORKDIR /app -COPY src/systems/object-storage/service/object-store ./src/systems/object-storage/service/ -COPY src/systems/object-storage/service/object-store-backends ./src/systems/object-storage/service/ -RUN cd /app/src/systems/object-storage/service && cargo build --release --bin object-store-service -FROM build AS workspace -WORKDIR /app/src/systems/object-storage/service -CMD ["sleep", "infinity"] -FROM debian:trixie-slim AS runner -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates \ - libssl3 \ - curl && rm -rf /var/lib/apt/lists/* -COPY --from=build /app/src/systems/object-storage/service/target/release/object-store-service /app/object-store-service -ENV RUST_LOG="info" -ENV OBJECT_STORE_BACKEND_TYPE="local" -ENV OBJECT_STORE_BACKEND_ROOT_PATH="/app/data" -EXPOSE 52010 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52010/health || exit 1 -CMD ["/app/object-store-service"] diff --git a/src/systems/object-storage/service/control.toml b/src/systems/object-storage/service/control.toml index 1cee7d626..3706a5f21 100644 --- a/src/systems/object-storage/service/control.toml +++ b/src/systems/object-storage/service/control.toml @@ -11,7 +11,7 @@ health = { path = "/health" } builder = "rust" mode = "generated" context = "oss" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [build.install] system_packages = ["pkg-config", "libssl-dev"] diff --git a/src/systems/origin/apps/code-bucket/Dockerfile b/src/systems/origin/apps/code-bucket/Dockerfile index cdfbd10a1..71eb38f1b 100644 --- a/src/systems/origin/apps/code-bucket/Dockerfile +++ b/src/systems/origin/apps/code-bucket/Dockerfile @@ -1,68 +1,40 @@ -# Multi-stage build for Code Bucket service with embedded VSCode workspace. -# Docker context is the OSS monorepo root (./oss). - -# Stage 1: Build VSCode workspace -FROM oven/bun:1.2-alpine AS workspace-builder - -WORKDIR /workspace - -COPY src/systems/origin/apps/code-workspace/package.json ./ -RUN bun install - -COPY src/systems/origin/apps/code-workspace/ ./ - -RUN mkdir -p ./public/vscode && \ - mkdir -p ./public/extensions/memfs && \ - cp -r node_modules/vscode-web/dist/* ./public/vscode/ && \ - mkdir -p ./public/vscode/vscode-textmate/release && \ - cp node_modules/vscode-textmate/release/main.js ./public/vscode/vscode-textmate/release/ && \ - mkdir -p ./public/vscode/vscode-oniguruma/release && \ - cp node_modules/vscode-oniguruma/release/main.js ./public/vscode/vscode-oniguruma/release/ && \ - cp node_modules/vscode-oniguruma/release/onig.wasm ./public/vscode/vscode-oniguruma/release/ - -RUN cd extensions/memfs && \ - bun install && \ - bun run package && \ - cd ../.. && \ - cp -r extensions/memfs/dist/* ./public/extensions/memfs/ && \ - cp extensions/memfs/package.json ./public/extensions/memfs/package.json && \ - cp extensions/memfs/package.nls.json ./public/extensions/memfs/package.nls.json - -RUN bun x tsc && bun x vite build - -# Stage 2: Build Go service (monorepo paths for control test cwd) -FROM golang:1.24-alpine AS go-builder - +# syntax=docker/dockerfile:1.7 +# generated by control bootstrap +FROM oven/bun:1.2-alpine AS deps WORKDIR /app - -RUN apk add --no-cache git ca-certificates - -COPY src/systems/origin/apps/code-bucket/go.mod src/systems/origin/apps/code-bucket/go.sum ./src/systems/origin/apps/code-bucket/ -RUN cd src/systems/origin/apps/code-bucket && go mod download - -COPY src/systems/origin/apps/code-bucket/ ./src/systems/origin/apps/code-bucket/ - -COPY --from=workspace-builder /workspace/dist ./src/systems/origin/apps/code-bucket/pkg/workspace/dist - -RUN cd src/systems/origin/apps/code-bucket && \ - CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /out/code-bucket ./cmd/server - -FROM go-builder AS workspace - -WORKDIR /app/src/systems/origin/apps/code-bucket +ENV GOTOOLCHAIN=auto +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk go git ca-certificates nodejs +COPY oss/src/systems/origin/apps/code-bucket/go.mod ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/go.sum ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/package.json ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-workspace/extensions/memfs/package.json ./oss/src/systems/origin/apps/code-workspace/extensions/memfs/ +COPY oss/src/systems/origin/apps/code-workspace/package.json ./oss/src/systems/origin/apps/code-workspace/ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked cd /app/oss/src/systems/origin/apps/code-workspace && bun install --linker=hoisted +RUN --mount=type=cache,target=/go/pkg/mod cd /app/oss/src/systems/origin/apps/code-bucket && go mod download +FROM deps AS build +WORKDIR /app +COPY oss/src/systems/origin/apps/code-bucket/cmd ./oss/src/systems/origin/apps/code-bucket/cmd/ +COPY oss/src/systems/origin/apps/code-bucket/gen ./oss/src/systems/origin/apps/code-bucket/gen/ +COPY oss/src/systems/origin/apps/code-bucket/index.ts ./oss/src/systems/origin/apps/code-bucket/ +COPY oss/src/systems/origin/apps/code-bucket/internal ./oss/src/systems/origin/apps/code-bucket/internal/ +COPY oss/src/systems/origin/apps/code-bucket/pkg ./oss/src/systems/origin/apps/code-bucket/pkg/ +COPY oss/src/systems/origin/apps/code-bucket/proto ./oss/src/systems/origin/apps/code-bucket/proto/ +COPY oss/src/systems/origin/apps/code-bucket/scripts ./oss/src/systems/origin/apps/code-bucket/scripts/ +COPY oss/src/systems/origin/apps/code-bucket/ts-proto-gen ./oss/src/systems/origin/apps/code-bucket/ts-proto-gen/ +COPY oss/src/systems/origin/apps/code-workspace ./oss/src/systems/origin/apps/code-workspace/ +RUN cd /app/oss/src/systems/origin/apps/code-workspace && bunx tsc && bunx vite build +RUN cd /app/oss/src/systems/origin/apps/code-bucket && rm -rf pkg/workspace/dist && mkdir -p pkg/workspace && cp -R ../code-workspace/dist pkg/workspace/dist +RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build cd /app/oss/src/systems/origin/apps/code-bucket && CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /tmp/code-bucket ./cmd/server +FROM build AS workspace +WORKDIR /app/oss/src/systems/origin/apps/code-bucket CMD ["sleep", "infinity"] - -# Stage 3: Final minimal image FROM alpine:latest AS runner - -RUN apk --no-cache add ca-certificates tzdata netcat-openbsd - -WORKDIR /root/ - -COPY --from=go-builder /out/code-bucket . - +WORKDIR /app +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk ca-certificates tzdata netcat-openbsd +COPY --from=build /tmp/code-bucket /app/code-bucket EXPOSE 52091 EXPOSE 52092 EXPOSE 5050 - -CMD ["./code-bucket"] +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD nc -z localhost 52091 || exit 1 +CMD ["/app/code-bucket"] diff --git a/src/systems/origin/apps/code-bucket/Dockerfile.generated b/src/systems/origin/apps/code-bucket/Dockerfile.generated deleted file mode 100644 index 0421e2552..000000000 --- a/src/systems/origin/apps/code-bucket/Dockerfile.generated +++ /dev/null @@ -1,37 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2-alpine AS deps -WORKDIR /app -RUN apk add --no-cache go git ca-certificates -COPY oss/src/systems/origin/apps/code-bucket/go.mod ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-bucket/go.sum ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-bucket/package.json ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-workspace/extensions/memfs/package.json ./oss/src/systems/origin/apps/code-workspace/extensions/memfs/ -COPY oss/src/systems/origin/apps/code-workspace/package.json ./oss/src/systems/origin/apps/code-workspace/ -RUN go mod download -FROM deps AS build -WORKDIR /app -COPY oss/src/systems/origin/apps/code-bucket/cmd ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-bucket/gen ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-bucket/index.ts ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-bucket/internal ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-bucket/pkg ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-bucket/proto ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-bucket/scripts ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-bucket/ts-proto-gen ./oss/src/systems/origin/apps/code-bucket/ -COPY oss/src/systems/origin/apps/code-workspace ./oss/src/systems/origin/apps/ -COPY oss/src/systems/origin/scripts/build-code-workspace.sh ./oss/src/systems/origin/scripts/ -RUN cd /app/oss/src/systems/origin/apps/code-bucket && sh ../../scripts/build-code-workspace.sh -RUN cd /app/oss/src/systems/origin/apps/code-bucket && CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /tmp/code-bucket ./cmd/server -FROM build AS workspace -WORKDIR /app/oss/src/systems/origin/apps/code-bucket -CMD ["sleep", "infinity"] -FROM alpine:latest AS runner -WORKDIR /app -RUN apk add --no-cache ca-certificates tzdata netcat-openbsd -COPY --from=build /tmp/code-bucket /app/code-bucket -EXPOSE 52091 -EXPOSE 52092 -EXPOSE 5050 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD nc -z localhost 52091 || exit 1 -CMD ["/app/code-bucket"] diff --git a/src/systems/origin/apps/code-bucket/control.toml b/src/systems/origin/apps/code-bucket/control.toml index 381007c20..e46c9f9de 100644 --- a/src/systems/origin/apps/code-bucket/control.toml +++ b/src/systems/origin/apps/code-bucket/control.toml @@ -11,21 +11,29 @@ health = { cmd = "nc -z localhost 52091" } builder = "go" mode = "generated" context = "repo" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [build.builder_image] image = "oven/bun:1.2-alpine" [build.install] -system_packages = ["go", "git", "ca-certificates"] +system_packages = ["go", "git", "ca-certificates", "nodejs"] + +[[build.install.layers]] +name = "code-workspace" +tool = "bun" +cwd = "../code-workspace" +manifests = [ + "../code-workspace/package.json", + "../code-workspace/extensions/memfs/package.json" +] +command = "bun install --linker=hoisted" [build.manifests] files = [ "go.mod", "go.sum", - "package.json", - "../code-workspace/package.json", - "../code-workspace/extensions/memfs/package.json" + "package.json" ] [build.inputs] @@ -38,13 +46,13 @@ paths = [ "index.ts", "scripts/**", "ts-proto-gen/**", - "../code-workspace/**", - "../../scripts/build-code-workspace.sh" + "../code-workspace/**" ] [build.prebuild] steps = [ - { run = "sh ../../scripts/build-code-workspace.sh" } + { cwd = "../code-workspace", run = "bunx tsc && bunx vite build" }, + { run = "rm -rf pkg/workspace/dist && mkdir -p pkg/workspace && cp -R ../code-workspace/dist pkg/workspace/dist" } ] [build.main] @@ -66,7 +74,10 @@ healthcheck = "nc -z localhost 52091 || exit 1" [test.unit] command = "go test ./..." -setup = ["sh ../../scripts/build-code-workspace.sh"] +setup = [ + "cd ../code-workspace && bun install --linker=hoisted && bunx tsc && bunx vite build", + "rm -rf pkg/workspace/dist && mkdir -p pkg/workspace && cp -R ../code-workspace/dist pkg/workspace/dist" +] cwd = "/app/src/systems/origin/apps/code-bucket" [test.e2e] diff --git a/src/systems/origin/apps/code-workspace/package.json b/src/systems/origin/apps/code-workspace/package.json index f4aab7401..cf3d5e53f 100644 --- a/src/systems/origin/apps/code-workspace/package.json +++ b/src/systems/origin/apps/code-workspace/package.json @@ -3,6 +3,9 @@ "private": true, "version": "0.0.0", "type": "module", + "workspaces": [ + "extensions/*" + ], "scripts": { "setup_vscode": "FORCE_SETUP=true ./setup.sh", "enterprise:dev": "./setup.sh && vite --port 3302 || true", @@ -11,7 +14,7 @@ "preview": "vite preview" }, "devDependencies": { - "@types/node": "*", + "@types/node": "20.x", "@types/vscode": "*", "rollup": "^4.28.1", "typescript": "~5.8.3", diff --git a/src/systems/origin/apps/code-workspace/tsconfig.json b/src/systems/origin/apps/code-workspace/tsconfig.json index 6a6f85a9c..3ddad43f7 100644 --- a/src/systems/origin/apps/code-workspace/tsconfig.json +++ b/src/systems/origin/apps/code-workspace/tsconfig.json @@ -21,7 +21,8 @@ "noFallthroughCasesInSwitch": false, "noUncheckedSideEffectImports": true, - "types": ["node"] + "types": ["node"], + "typeRoots": ["./node_modules/@types"] }, "include": ["src", "extensions"], } diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index c09795a2b..4172d4266 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin -RUN cd /app && bun x nx run @metorial/origin:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/origin:server:build FROM build AS workspace WORKDIR /app/src/systems/origin/apps/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/origin/apps/service/dist /app/dist COPY --from=build /app/src/systems/origin/apps/service/prisma /app/prisma COPY --from=build /app/src/systems/origin/apps/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/origin/apps/service/Dockerfile.generated b/src/systems/origin/apps/service/Dockerfile.generated deleted file mode 100644 index c09795a2b..000000000 --- a/src/systems/origin/apps/service/Dockerfile.generated +++ /dev/null @@ -1,28 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin -RUN cd /app && bun x nx run @metorial/origin:server:build -FROM build AS workspace -WORKDIR /app/src/systems/origin/apps/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/origin/apps/service/dist /app/dist -COPY --from=build /app/src/systems/origin/apps/service/prisma /app/prisma -COPY --from=build /app/src/systems/origin/apps/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52090 -EXPOSE 52093 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52090/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/origin/apps/service/control.toml b/src/systems/origin/apps/service/control.toml index fe3ec9594..3d2101bfd 100644 --- a/src/systems/origin/apps/service/control.toml +++ b/src/systems/origin/apps/service/control.toml @@ -3,7 +3,7 @@ name = "origin" [service] port = 52090 -dockerfile = "src/systems/origin/apps/service/Dockerfile.generated" +dockerfile = "src/systems/origin/apps/service/Dockerfile" build_context = "oss" health = { path = "/ping" } @@ -13,7 +13,7 @@ mode = "generated" context = "oss" project = "@metorial/origin" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "origin-prisma" diff --git a/src/systems/origin/scripts/build-code-workspace.sh b/src/systems/origin/scripts/build-code-workspace.sh deleted file mode 100755 index cb4930b18..000000000 --- a/src/systems/origin/scripts/build-code-workspace.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -set -eu - -ROOT="$(cd "$(dirname "$0")/../apps" && pwd)" -WORKSPACE="$ROOT/code-workspace" -TARGET="$ROOT/code-bucket/pkg/workspace/dist" - -cd "$WORKSPACE" - -if [ ! -d node_modules ]; then - bun install -fi - -bun x tsc -bun x vite build - -rm -rf "$TARGET" -mkdir -p "$(dirname "$TARGET")" -cp -R dist "$TARGET" diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 4f4c87185..0c6ec5bfa 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/relay -RUN cd /app && bun x nx run @metorial/relay:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/relay +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/relay:server:build FROM build AS workspace WORKDIR /app/src/systems/relay/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/relay/service/dist /app/dist COPY --from=build /app/src/systems/relay/service/prisma /app/prisma COPY --from=build /app/src/systems/relay/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/relay/service/Dockerfile.generated b/src/systems/relay/service/Dockerfile.generated deleted file mode 100644 index 4f4c87185..000000000 --- a/src/systems/relay/service/Dockerfile.generated +++ /dev/null @@ -1,27 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/relay -RUN cd /app && bun x nx run @metorial/relay:server:build -FROM build AS workspace -WORKDIR /app/src/systems/relay/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/relay/service/dist /app/dist -COPY --from=build /app/src/systems/relay/service/prisma /app/prisma -COPY --from=build /app/src/systems/relay/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52110 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52110/metorial-relay && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/relay/service/control.toml b/src/systems/relay/service/control.toml index 5cc2b6621..a7dd2b280 100644 --- a/src/systems/relay/service/control.toml +++ b/src/systems/relay/service/control.toml @@ -3,7 +3,7 @@ name = "relay" [service] port = 52110 -dockerfile = "src/systems/relay/service/Dockerfile.generated" +dockerfile = "src/systems/relay/service/Dockerfile" build_context = "oss" health = { cmd = "bun -e \"fetch('http://localhost:12121/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } @@ -13,7 +13,7 @@ mode = "generated" context = "oss" project = "@metorial/relay" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "relay-prisma" diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index 5eece85e3..b814836f6 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle -RUN cd /app && bun x nx run @metorial/shuttle:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/shuttle:server:build FROM build AS workspace WORKDIR /app/src/systems/shuttle/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/shuttle/service/dist /app/dist COPY --from=build /app/src/systems/shuttle/service/prisma /app/prisma COPY --from=build /app/src/systems/shuttle/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/shuttle/service/Dockerfile.generated b/src/systems/shuttle/service/Dockerfile.generated deleted file mode 100644 index 5eece85e3..000000000 --- a/src/systems/shuttle/service/Dockerfile.generated +++ /dev/null @@ -1,28 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle -RUN cd /app && bun x nx run @metorial/shuttle:server:build -FROM build AS workspace -WORKDIR /app/src/systems/shuttle/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/shuttle/service/dist /app/dist -COPY --from=build /app/src/systems/shuttle/service/prisma /app/prisma -COPY --from=build /app/src/systems/shuttle/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52080 -EXPOSE 52081 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52080/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/shuttle/service/control.toml b/src/systems/shuttle/service/control.toml index 54d80197e..f6b76cecd 100644 --- a/src/systems/shuttle/service/control.toml +++ b/src/systems/shuttle/service/control.toml @@ -3,7 +3,7 @@ name = "shuttle" [service] port = 52080 -dockerfile = "src/systems/shuttle/service/Dockerfile.generated" +dockerfile = "src/systems/shuttle/service/Dockerfile" build_context = "oss" [build] @@ -12,7 +12,7 @@ mode = "generated" context = "oss" project = "@metorial/shuttle" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "shuttle-prisma" diff --git a/src/systems/shuttle/service/src/lib/http/sse.ts b/src/systems/shuttle/service/src/lib/http/sse.ts index 94c96a401..8c4aa6dcc 100644 --- a/src/systems/shuttle/service/src/lib/http/sse.ts +++ b/src/systems/shuttle/service/src/lib/http/sse.ts @@ -20,6 +20,8 @@ export async function axiosWithoutSse( let response = await axios.request(requestConfig); let contentType = response.headers['content-type'] ?? ''; + if (typeof contentType !== 'string') contentType = ''; + if (contentType.includes('text/event-stream')) { source.cancel(`Aborted: SSE stream detected from ${url}`); response.data.destroy(); diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index 60a530626..e1e6c0b0b 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/signal -RUN cd /app && bun x nx run @metorial/signal:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/signal +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/signal:server:build FROM build AS workspace WORKDIR /app/src/systems/signal/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/signal/service/dist /app/dist COPY --from=build /app/src/systems/signal/service/prisma /app/prisma COPY --from=build /app/src/systems/signal/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/signal/service/Dockerfile.generated b/src/systems/signal/service/Dockerfile.generated deleted file mode 100644 index 60a530626..000000000 --- a/src/systems/signal/service/Dockerfile.generated +++ /dev/null @@ -1,27 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/signal -RUN cd /app && bun x nx run @metorial/signal:server:build -FROM build AS workspace -WORKDIR /app/src/systems/signal/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/signal/service/dist /app/dist -COPY --from=build /app/src/systems/signal/service/prisma /app/prisma -COPY --from=build /app/src/systems/signal/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52030 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52050/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/signal/service/control.toml b/src/systems/signal/service/control.toml index df974f50c..1744937bd 100644 --- a/src/systems/signal/service/control.toml +++ b/src/systems/signal/service/control.toml @@ -3,7 +3,7 @@ name = "signal" [service] port = 52050 -dockerfile = "src/systems/signal/service/Dockerfile.generated" +dockerfile = "src/systems/signal/service/Dockerfile" build_context = "oss" [build] @@ -12,7 +12,7 @@ mode = "generated" context = "oss" project = "@metorial/signal" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "signal-prisma" diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index 7f264b123..9ba79df6e 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -1,24 +1,30 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates -RUN cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates -RUN cd /app && bun x nx run @metorial/slates:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/slates:server:build FROM build AS workspace WORKDIR /app/src/systems/slates/apps/hub CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/slates/apps/hub/dist /app/dist -COPY --from=build /app/src/systems/slates/apps/hub/admin/dist /app/admin/dist +COPY --from=build /app/src/systems/slates/apps/hub/dist/admin /app/dist/admin COPY --from=build /app/src/systems/slates/apps/hub/prisma /app/prisma COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" diff --git a/src/systems/slates/apps/hub/Dockerfile.generated b/src/systems/slates/apps/hub/Dockerfile.generated deleted file mode 100644 index 7f264b123..000000000 --- a/src/systems/slates/apps/hub/Dockerfile.generated +++ /dev/null @@ -1,30 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates -RUN cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates -RUN cd /app && bun x nx run @metorial/slates:server:build -FROM build AS workspace -WORKDIR /app/src/systems/slates/apps/hub -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/slates/apps/hub/dist /app/dist -COPY --from=build /app/src/systems/slates/apps/hub/admin/dist /app/admin/dist -COPY --from=build /app/src/systems/slates/apps/hub/prisma /app/prisma -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52045 -EXPOSE 52046 -EXPOSE 52047 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52045/ping && curl -f http://localhost:52046/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml index f2a963190..b80c9f83f 100644 --- a/src/systems/slates/apps/hub/control.toml +++ b/src/systems/slates/apps/hub/control.toml @@ -3,7 +3,7 @@ name = "slates-hub" [service] port = 52045 -dockerfile = "src/systems/slates/apps/hub/Dockerfile.generated" +dockerfile = "src/systems/slates/apps/hub/Dockerfile" build_context = "oss" [build] @@ -12,7 +12,7 @@ mode = "generated" context = "oss" project = "@metorial/slates" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "slates-hub-prisma" @@ -29,7 +29,7 @@ projects = ["@metorial/slates"] [build.artifacts] copy = [ { from = "dist", to = "/app/dist" }, - { from = "admin/dist", to = "/app/admin/dist" }, + { from = "dist/admin", to = "/app/dist/admin" }, { from = "prisma", to = "/app/prisma" }, { from = "/app/node_modules", to = "/app/node_modules" } ] diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index d463fe93c..6fecec762 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -1,24 +1,30 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry -RUN cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry -RUN cd /app && bun x nx run @metorial/slates-registry:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/slates-registry:server:build FROM build AS workspace WORKDIR /app/src/systems/slates/apps/registry CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/slates/apps/registry/dist /app/dist -COPY --from=build /app/src/systems/slates/apps/registry/admin/dist /app/admin/dist +COPY --from=build /app/src/systems/slates/apps/registry/dist/admin /app/dist/admin COPY --from=build /app/src/systems/slates/apps/registry/prisma /app/prisma COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" diff --git a/src/systems/slates/apps/registry/Dockerfile.generated b/src/systems/slates/apps/registry/Dockerfile.generated deleted file mode 100644 index d463fe93c..000000000 --- a/src/systems/slates/apps/registry/Dockerfile.generated +++ /dev/null @@ -1,30 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry -RUN cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry -RUN cd /app && bun x nx run @metorial/slates-registry:server:build -FROM build AS workspace -WORKDIR /app/src/systems/slates/apps/registry -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/slates/apps/registry/dist /app/dist -COPY --from=build /app/src/systems/slates/apps/registry/admin/dist /app/admin/dist -COPY --from=build /app/src/systems/slates/apps/registry/prisma /app/prisma -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52040 -EXPOSE 52041 -EXPOSE 52042 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52040/ping && curl -f http://localhost:52041/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --schema prisma/schema.prisma --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/slates/apps/registry/control.toml b/src/systems/slates/apps/registry/control.toml index d52db7bba..472232a8e 100644 --- a/src/systems/slates/apps/registry/control.toml +++ b/src/systems/slates/apps/registry/control.toml @@ -3,7 +3,7 @@ name = "slates-registry" [service] port = 52040 -dockerfile = "src/systems/slates/apps/registry/Dockerfile.generated" +dockerfile = "src/systems/slates/apps/registry/Dockerfile" build_context = "oss" health = { path = "/ping" } @@ -13,7 +13,7 @@ mode = "generated" context = "oss" project = "@metorial/slates-registry" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "slates-registry-prisma" @@ -30,7 +30,7 @@ projects = ["@metorial/slates-registry"] [build.artifacts] copy = [ { from = "dist", to = "/app/dist" }, - { from = "admin/dist", to = "/app/admin/dist" }, + { from = "dist/admin", to = "/app/dist/admin" }, { from = "prisma", to = "/app/prisma" }, { from = "/app/node_modules", to = "/app/node_modules" } ] diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index e63fe7f5f..52bae4cca 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis -RUN cd /app && bun x nx run @metorial-subspace/app-controller:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial-subspace/app-controller:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/controller CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/subspace/apps/controller/dist /app/dist COPY --from=build /app/src/systems/subspace/db /app/db COPY --from=build /app/node_modules /app/node_modules diff --git a/src/systems/subspace/apps/controller/Dockerfile.generated b/src/systems/subspace/apps/controller/Dockerfile.generated deleted file mode 100644 index e63fe7f5f..000000000 --- a/src/systems/subspace/apps/controller/Dockerfile.generated +++ /dev/null @@ -1,26 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis -RUN cd /app && bun x nx run @metorial-subspace/app-controller:server:build -FROM build AS workspace -WORKDIR /app/src/systems/subspace/apps/controller -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/subspace/apps/controller/dist /app/dist -COPY --from=build /app/src/systems/subspace/db /app/db -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52070 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52070/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index 5627a0a42..4a3d15405 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -3,7 +3,7 @@ name = "subspace-controller" [service] port = 52070 -dockerfile = "src/systems/subspace/apps/controller/Dockerfile.generated" +dockerfile = "src/systems/subspace/apps/controller/Dockerfile" build_context = "oss" [build] @@ -12,7 +12,8 @@ mode = "generated" context = "oss" project = "@metorial-subspace/app-controller" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" +extra_paths = ["//oss/src/systems/_shared/entityImage.ts"] [[build.automations]] name = "subspace-controller-prisma" diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index d85ef3c79..d2fde4bf2 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -1,22 +1,28 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis -RUN cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public -RUN cd /app && bun x nx run @metorial-subspace/app-public:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial-subspace/app-public:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/public CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/subspace/apps/public/dist /app/dist COPY --from=build /app/src/systems/subspace/apps/public/frontend/dist /app/frontend/dist COPY --from=build /app/src/systems/subspace/db /app/db diff --git a/src/systems/subspace/apps/public/Dockerfile.generated b/src/systems/subspace/apps/public/Dockerfile.generated deleted file mode 100644 index d85ef3c79..000000000 --- a/src/systems/subspace/apps/public/Dockerfile.generated +++ /dev/null @@ -1,29 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis -RUN cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public -RUN cd /app && bun x nx run @metorial-subspace/app-public:server:build -FROM build AS workspace -WORKDIR /app/src/systems/subspace/apps/public -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/subspace/apps/public/dist /app/dist -COPY --from=build /app/src/systems/subspace/apps/public/frontend/dist /app/frontend/dist -COPY --from=build /app/src/systems/subspace/db /app/db -COPY --from=build /app/src/packages/frontend/ui /app/src/packages/frontend/ui -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52071 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52071/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] diff --git a/src/systems/subspace/apps/public/control.toml b/src/systems/subspace/apps/public/control.toml index 40bc3d065..4a8123ab1 100644 --- a/src/systems/subspace/apps/public/control.toml +++ b/src/systems/subspace/apps/public/control.toml @@ -3,7 +3,7 @@ name = "subspace-public" [service] port = 52071 -dockerfile = "src/systems/subspace/apps/public/Dockerfile.generated" +dockerfile = "src/systems/subspace/apps/public/Dockerfile" build_context = "oss" health = { path = "/ping" } @@ -13,8 +13,8 @@ mode = "generated" context = "oss" project = "@metorial-subspace/app-public" target = "server:build" -dockerfile = "Dockerfile.generated" -extra_paths = ["//oss/src/packages/frontend/ui"] +dockerfile = "Dockerfile" +extra_paths = ["//oss/src/packages/frontend/ui", "//oss/src/systems/_shared/entityImage.ts"] [[build.automations]] name = "subspace-public-prisma" diff --git a/src/systems/subspace/apps/public/package.json b/src/systems/subspace/apps/public/package.json index f91c7a690..dea26d40d 100644 --- a/src/systems/subspace/apps/public/package.json +++ b/src/systems/subspace/apps/public/package.json @@ -33,14 +33,17 @@ "@aws-sdk/client-lambda": "^3.958.0", "@hono/zod-validator": "^0.7.6", "@hookform/resolvers": "^5.2.2", + "@metorial/data-hooks": "workspace:*", "@metorial-io/data-hooks": "^1.0.1", "@metorial-io/pages": "^1.0.0", + "@metorial/ui": "workspace:*", "@metorial-subspace/app-controller": "workspace:*", "@metorial-subspace/module-auth": "^1.0.0", "@metorial-subspace/module-integration": "^1.0.0", "@metorial-subspace/module-tenant": "^1.0.0", "@metorial-subspace/presenters": "^1.0.0", "@metorial-subspace/provider-native": "^1.0.0", + "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.34.0", "@sentry/cli": "^3.2.0", "@types/react-dom": "^19.2.3", diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index f5009d709..2a69871e8 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis -RUN cd /app && bun x nx run @metorial-subspace/app-worker:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial-subspace/app-worker:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/worker CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/subspace/apps/worker/dist /app/dist COPY --from=build /app/src/systems/subspace/db /app/db COPY --from=build /app/node_modules /app/node_modules diff --git a/src/systems/subspace/apps/worker/Dockerfile.generated b/src/systems/subspace/apps/worker/Dockerfile.generated deleted file mode 100644 index f5009d709..000000000 --- a/src/systems/subspace/apps/worker/Dockerfile.generated +++ /dev/null @@ -1,25 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis -RUN cd /app && bun x nx run @metorial-subspace/app-worker:server:build -FROM build AS workspace -WORKDIR /app/src/systems/subspace/apps/worker -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/subspace/apps/worker/dist /app/dist -COPY --from=build /app/src/systems/subspace/db /app/db -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js"] diff --git a/src/systems/subspace/apps/worker/control.toml b/src/systems/subspace/apps/worker/control.toml index 885d2fcf6..2563381db 100644 --- a/src/systems/subspace/apps/worker/control.toml +++ b/src/systems/subspace/apps/worker/control.toml @@ -2,7 +2,7 @@ name = "subspace-worker" [service] -dockerfile = "src/systems/subspace/apps/worker/Dockerfile.generated" +dockerfile = "src/systems/subspace/apps/worker/Dockerfile" build_context = "oss" health = { cmd = "curl -f http://localhost:12121/ || exit 1" } @@ -12,7 +12,8 @@ mode = "generated" context = "oss" project = "@metorial-subspace/app-worker" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" +extra_paths = ["//oss/src/systems/_shared/entityImage.ts"] [[build.automations]] name = "subspace-worker-prisma" diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index 04cfec381..ef9b1103b 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis -RUN cd /app && bun x nx run @metorial/synthesis:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/synthesis:server:build FROM build AS workspace WORKDIR /app/src/systems/synthesis/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/synthesis/service/dist /app/dist COPY --from=build /app/src/systems/synthesis/service/prisma /app/prisma COPY --from=build /app/src/systems/synthesis/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/synthesis/service/Dockerfile.generated b/src/systems/synthesis/service/Dockerfile.generated deleted file mode 100644 index 04cfec381..000000000 --- a/src/systems/synthesis/service/Dockerfile.generated +++ /dev/null @@ -1,27 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis -RUN cd /app && bun x nx run @metorial/synthesis:server:build -FROM build AS workspace -WORKDIR /app/src/systems/synthesis/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/synthesis/service/dist /app/dist -COPY --from=build /app/src/systems/synthesis/service/prisma /app/prisma -COPY --from=build /app/src/systems/synthesis/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52160 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52160/ping && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --config /app/prisma.config.ts --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/synthesis/service/control.toml b/src/systems/synthesis/service/control.toml index 174071b06..1fb803e5d 100644 --- a/src/systems/synthesis/service/control.toml +++ b/src/systems/synthesis/service/control.toml @@ -3,7 +3,7 @@ name = "synthesis" [service] port = 52160 -dockerfile = "src/systems/synthesis/service/Dockerfile.generated" +dockerfile = "src/systems/synthesis/service/Dockerfile" build_context = "oss" health = { path = "/ping" } @@ -13,7 +13,7 @@ mode = "generated" context = "oss" project = "@metorial/synthesis" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "synthesis-prisma" diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index eabd0fcb5..fff44967a 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -1,21 +1,27 @@ +# syntax=docker/dockerfile:1.7 # generated by control bootstrap FROM oven/bun:1.2 AS deps WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/voyager -RUN cd /app && bun x nx run @metorial/voyager:server:build +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/voyager +RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/voyager:server:build FROM build AS workspace WORKDIR /app/src/systems/voyager/service CMD ["sleep", "infinity"] FROM oven/bun:1.2-alpine AS runner WORKDIR /app -RUN apk add --no-cache curl +RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/voyager/service/dist /app/dist COPY --from=build /app/src/systems/voyager/service/prisma /app/prisma COPY --from=build /app/src/systems/voyager/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/voyager/service/Dockerfile.generated b/src/systems/voyager/service/Dockerfile.generated deleted file mode 100644 index eabd0fcb5..000000000 --- a/src/systems/voyager/service/Dockerfile.generated +++ /dev/null @@ -1,27 +0,0 @@ -# generated by control bootstrap -FROM oven/bun:1.2 AS deps -WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates && rm -rf /var/lib/apt/lists/* -COPY _manifests/ ./ -RUN bun install --linker=hoisted -FROM deps AS build -WORKDIR /app -COPY _inputs/ ./ -RUN cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/voyager -RUN cd /app && bun x nx run @metorial/voyager:server:build -FROM build AS workspace -WORKDIR /app/src/systems/voyager/service -CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner -WORKDIR /app -RUN apk add --no-cache curl -COPY --from=build /app/src/systems/voyager/service/dist /app/dist -COPY --from=build /app/src/systems/voyager/service/prisma /app/prisma -COPY --from=build /app/src/systems/voyager/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" -EXPOSE 52060 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52060/metorial-voyager && curl -f http://localhost:12121/ || exit 1 -CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/voyager/service/control.toml b/src/systems/voyager/service/control.toml index 7d93bfbd3..87b842993 100644 --- a/src/systems/voyager/service/control.toml +++ b/src/systems/voyager/service/control.toml @@ -3,7 +3,7 @@ name = "voyager" [service] port = 52060 -dockerfile = "src/systems/voyager/service/Dockerfile.generated" +dockerfile = "src/systems/voyager/service/Dockerfile" build_context = "oss" health = { cmd = "bun -e \"fetch('http://localhost:12121/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } @@ -13,7 +13,7 @@ mode = "generated" context = "oss" project = "@metorial/voyager" target = "server:build" -dockerfile = "Dockerfile.generated" +dockerfile = "Dockerfile" [[build.automations]] name = "voyager-prisma" diff --git a/src/tooling/control/src/builders/base.ts b/src/tooling/control/src/builders/base.ts index e6c47b92a..660375ebd 100644 --- a/src/tooling/control/src/builders/base.ts +++ b/src/tooling/control/src/builders/base.ts @@ -11,6 +11,7 @@ import { resolveBuildArtifacts, resolveBuildContextRoot, resolveBuildPaths, + resolveBuildInstallLayers, resolveBuildSteps } from './pathing'; @@ -37,7 +38,7 @@ export let defaultRuntime = ( }); export let defaultDockerfilePath = (service: ControlService, configured?: string): string => - resolve(service.dir, configured ?? 'Dockerfile.generated'); + resolve(service.dir, configured ?? 'Dockerfile'); export let defaultWorkspaceRoot = ( service: ControlService, @@ -65,6 +66,19 @@ export let createBasePlan = (opts: { patterns: build.manifests?.files, label: 'manifest' }); + let installLayers = resolveBuildInstallLayers({ + service: opts.service, + registry: opts.registry, + contextRoot: context.root, + install: build.install + }); + let manifestByPath = new Map(); + for (let manifest of manifests) manifestByPath.set(manifest.relativeToContext, manifest); + for (let layer of installLayers) { + for (let manifest of layer.manifestFiles) { + manifestByPath.set(manifest.relativeToContext, manifest); + } + } let inputs = resolveBuildPaths({ service: opts.service, registry: opts.registry, @@ -85,8 +99,11 @@ export let createBasePlan = (opts: { contextRoot: context.root, dockerfilePath, workspaceRoot, - manifestFiles: manifests, + manifestFiles: [...manifestByPath.values()].sort((a, b) => + a.relativeToContext.localeCompare(b.relativeToContext) + ), inputPaths: inputs, + installLayers, automations: [], codegenSteps: resolveBuildSteps({ service: opts.service, @@ -130,12 +147,35 @@ export let formatContainerWorkdir = (relPath: string): string => formatContainer export let formatRunStep = (run: string): string => run.replace(/\n+/g, ' ').trim(); +export let renderAptInstall = (packages: string[]): string[] => { + if (packages.length === 0) return []; + return [ + 'RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \\', + ' --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \\', + ' apt-get update && apt-get install -y --no-install-recommends \\', + ...packages.map((pkg, index) => + index === packages.length - 1 ? ` ${pkg} && rm -rf /var/lib/apt/lists/*` : ` ${pkg} \\` + ) + ]; +}; + +export let renderApkInstall = (packages: string[]): string[] => { + if (packages.length === 0) return []; + return [ + `RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk ${packages.join(' ')}` + ]; +}; + export let renderCopyLines = (paths: { relativeToContext: string; absolutePath: string }[]): string[] => { let lines: string[] = []; for (let path of paths) { let from = path.relativeToContext.replace(/^\.\//, ''); if (!from || from === '.') continue; + if (isDirectoryPath(path.absolutePath)) { + lines.push(`COPY ${from} ./${from}/`); + continue; + } let to = dirname(from).replace(/\\/g, '/'); let target = to === '.' ? './' : `./${to}/`; lines.push(`COPY ${from} ${target}`); diff --git a/src/tooling/control/src/builders/builders.test.ts b/src/tooling/control/src/builders/builders.test.ts index 377e9088d..4316f5d84 100644 --- a/src/tooling/control/src/builders/builders.test.ts +++ b/src/tooling/control/src/builders/builders.test.ts @@ -138,7 +138,7 @@ describe('builder plans', () => { let plan = createBuildPlan(service, registry); expect(plan?.builder).toBe('node'); expect(plan?.project).toBe('@demo/node-svc'); - expect(plan?.dockerfilePath.endsWith('Dockerfile.generated')).toBe(true); + expect(plan?.dockerfilePath.endsWith('Dockerfile')).toBe(true); expect(plan?.automations[0]?.command).toContain('prisma:generate'); expect(plan?.inputPaths.some(path => path.relativeToContext === 'src/systems/demo/service')).toBe(true); }); diff --git a/src/tooling/control/src/builders/context.ts b/src/tooling/control/src/builders/context.ts index fd9b9d683..615120342 100644 --- a/src/tooling/control/src/builders/context.ts +++ b/src/tooling/control/src/builders/context.ts @@ -2,7 +2,13 @@ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs'; import { dirname, join, relative, resolve } from 'path'; import { ControlError } from '../errors'; import { copyGitAwareSelection } from '../staging/copyTree'; -import type { GeneratedBuildPlan, ServiceRegistry, WorkspaceSession } from '../types'; +import type { + GeneratedBuildInstallLayer, + GeneratedBuildPath, + GeneratedBuildPlan, + ServiceRegistry, + WorkspaceSession +} from '../types'; import { renderNodePrunedDockerfile } from './node'; export type MaterializedBuildContext = { @@ -51,7 +57,7 @@ let resolveSourceRoot = (opts: { }; let renderSyntheticWorkspacePackageJson = (opts: { - plan: GeneratedBuildPlan; + manifestFiles: GeneratedBuildPath[]; sourceRoot: string; }): string => { let packageJsonPath = resolve(opts.sourceRoot, 'package.json'); @@ -65,7 +71,7 @@ let renderSyntheticWorkspacePackageJson = (opts: { let base = JSON.parse(readFileSync(packageJsonPath, 'utf8')) as Record; let workspaces = new Set(); - for (let manifest of opts.plan.manifestFiles) { + for (let manifest of opts.manifestFiles) { let dir = dirname(manifest.relativeToContext).replace(/\\/g, '/'); if (!dir || dir === '.') continue; workspaces.add(dir); @@ -76,36 +82,56 @@ let renderSyntheticWorkspacePackageJson = (opts: { return `${JSON.stringify(base, null, 2)}\n`; }; +let cumulativeManifestFiles = ( + layers: GeneratedBuildInstallLayer[], + index: number +): GeneratedBuildPath[] => { + let files = new Map(); + for (let i = 0; i <= index; i++) { + for (let file of layers[i]?.manifestFiles ?? []) { + files.set(file.relativeToContext, file); + } + } + return [...files.values()].sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); +}; + let materializeNodeContext = async (opts: { plan: GeneratedBuildPlan; contextRoot: string; sourceRoot: string; }): Promise => { - let manifestPaths = new Set(); - - for (let file of rootFilesForPlan(opts.sourceRoot)) { - manifestPaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); - } - - for (let file of opts.plan.manifestFiles) { - manifestPaths.add(file.relativeToContext); - } - let inputPaths = new Set(opts.plan.inputPaths.map(path => path.relativeToContext)); for (let file of rootInputFilesForPlan(opts.sourceRoot)) { inputPaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); } - await copyGitAwareSelection({ - sourceRoot: opts.sourceRoot, - destRoot: join(opts.contextRoot, '_manifests'), - includePaths: [...manifestPaths].sort((a, b) => a.localeCompare(b)) - }); + for (let i = 0; i < opts.plan.installLayers.length; i++) { + let layer = opts.plan.installLayers[i]!; + let manifestPaths = new Set(); - writeFileSync( - join(opts.contextRoot, '_manifests', 'package.json'), - renderSyntheticWorkspacePackageJson(opts) - ); + for (let file of rootFilesForPlan(opts.sourceRoot)) { + manifestPaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); + } + + for (let file of layer.manifestFiles) { + manifestPaths.add(file.relativeToContext); + } + + let layerRoot = join(opts.contextRoot, '_manifests', layer.name); + await copyGitAwareSelection({ + sourceRoot: opts.sourceRoot, + destRoot: layerRoot, + includePaths: [...manifestPaths].sort((a, b) => a.localeCompare(b)) + }); + + writeFileSync( + join(layerRoot, 'package.json'), + renderSyntheticWorkspacePackageJson({ + sourceRoot: opts.sourceRoot, + manifestFiles: cumulativeManifestFiles(opts.plan.installLayers, i) + }) + ); + } await copyGitAwareSelection({ sourceRoot: opts.sourceRoot, @@ -177,7 +203,7 @@ export let materializeBuildContext = async (opts: { renderedDockerfile }); - let dockerfileName = opts.plan.dockerfilePath.split('/').pop() ?? 'Dockerfile.generated'; + let dockerfileName = opts.plan.dockerfilePath.split('/').pop() ?? 'Dockerfile'; let dockerfilePath = join(contextRoot, dockerfileName); writeFileSync(dockerfilePath, dockerfileContent); diff --git a/src/tooling/control/src/builders/go.ts b/src/tooling/control/src/builders/go.ts index 18f46b214..71583061c 100644 --- a/src/tooling/control/src/builders/go.ts +++ b/src/tooling/control/src/builders/go.ts @@ -8,6 +8,7 @@ import { defaultRuntime, formatContainerWorkdir, formatRunStep, + renderApkInstall, renderArtifactLines, renderCopyLines } from './base'; @@ -29,6 +30,16 @@ let renderGoDockerfile = (plan: GeneratedBuildPlan): string => { let systemPackages = plan.service.config.build?.install?.system_packages ?? ['git', 'ca-certificates']; let manifestLines = renderCopyLines(plan.manifestFiles); let inputLines = renderCopyLines(plan.inputPaths); + let installLayerLines = plan.installLayers.map(layer => { + let cwd = formatContainerWorkdir(layer.cwdRelativeToContext ?? '.'); + let cacheMount = + layer.tool === 'bun' + ? '--mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked ' + : layer.tool === 'go' + ? '--mount=type=cache,target=/go/pkg/mod ' + : ''; + return `RUN ${cacheMount}cd ${cwd} && ${formatRunStep(layer.command)}`; + }); let prebuildLines = plan.prebuildSteps.map(step => { let cwd = formatContainerWorkdir(step.cwdRelativeToContext ?? '.'); return `RUN cd ${cwd} && ${formatRunStep(step.run)}`; @@ -36,8 +47,7 @@ let renderGoDockerfile = (plan: GeneratedBuildPlan): string => { let artifactLines = renderArtifactLines(plan); let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); let envLines = Object.entries(plan.runtime.env).map(([key, value]) => `ENV ${key}=${JSON.stringify(value)}`); - let runtimePackageLines = - plan.runtime.packages.length > 0 ? [`RUN apk add --no-cache ${plan.runtime.packages.join(' ')}`] : []; + let runtimePackageLines = renderApkInstall(plan.runtime.packages); let healthcheckLines = plan.runtime.healthcheck ? [ 'HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \\', @@ -46,18 +56,21 @@ let renderGoDockerfile = (plan: GeneratedBuildPlan): string => { : []; let lines = [ + '# syntax=docker/dockerfile:1.7', '# generated by control bootstrap', `FROM ${builderImage} AS deps`, 'WORKDIR /app', - ...(systemPackages.length > 0 ? [`RUN apk add --no-cache ${systemPackages.join(' ')}`] : []), + 'ENV GOTOOLCHAIN=auto', + ...renderApkInstall(systemPackages), ...manifestLines, - 'RUN go mod download', + ...installLayerLines, + `RUN --mount=type=cache,target=/go/pkg/mod cd ${plan.workspaceRoot} && go mod download`, '', 'FROM deps AS build', 'WORKDIR /app', ...inputLines, ...prebuildLines, - `RUN cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, + `RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, '', 'FROM build AS workspace', `WORKDIR ${plan.workspaceRoot}`, diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 647ecb0ae..4db3d25f8 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -6,8 +6,8 @@ import { assertRuntimeCommand, createBasePlan, defaultRuntime, - formatContainerWorkdir, - formatRunStep, + renderApkInstall, + renderAptInstall, renderArtifactLines } from './base'; import { @@ -22,8 +22,10 @@ import { ControlError } from '../errors'; import type { ControlBuildAutomation, GeneratedBuildAutomation, + GeneratedBuildInstallLayer, GeneratedBuildPath, - GeneratedBuildPlan + GeneratedBuildPlan, + ServiceRegistry } from '../types'; let defaultNodeRuntime = defaultRuntime(undefined, { @@ -43,10 +45,7 @@ let renderEnvLines = (plan: GeneratedBuildPlan): string[] => { return entries.map(([key, value]) => `ENV ${key}=${JSON.stringify(value)}`); }; -let renderRuntimePackages = (plan: GeneratedBuildPlan): string[] => { - if (plan.runtime.packages.length === 0) return []; - return [`RUN apk add --no-cache ${plan.runtime.packages.join(' ')}`]; -}; +let renderRuntimePackages = (plan: GeneratedBuildPlan): string[] => renderApkInstall(plan.runtime.packages); let renderHealthcheckLines = (plan: GeneratedBuildPlan): string[] => plan.runtime.healthcheck @@ -95,35 +94,194 @@ let resolveAutomationProjects = (opts: { let renderAutomationCommand = (automation: GeneratedBuildAutomation): string => automation.command; +let renderNxRun = (command: string): string => + `RUN --mount=type=cache,target=/app/.nx/cache cd /app && ${command}`; + +let collectNodeProjectUseCounts = (opts: { + registry: ServiceRegistry; + graph: ReturnType; + contextRoot: string; +}): Map => { + let counts = new Map(); + + for (let service of opts.registry.services) { + let build = service.config.build; + if (build?.builder !== 'node' || !build.project) continue; + + let servicePlan = createBasePlan({ + service, + registry: opts.registry, + builder: 'node', + runtime: defaultNodeRuntime + }); + if (!servicePlan || servicePlan.contextRoot !== opts.contextRoot) continue; + + let serviceProjects = new Set(); + + for (let project of collectNxProjectClosure(opts.graph, [build.project])) { + serviceProjects.add(project); + } + + for (let automation of build.automations ?? []) { + let automationProjects = resolveAutomationProjects({ + plan: servicePlan, + automation, + graph: opts.graph + }); + for (let project of collectNxProjectClosure(opts.graph, automationProjects)) { + serviceProjects.add(project); + } + } + + for (let project of serviceProjects) { + counts.set(project, (counts.get(project) ?? 0) + 1); + } + } + + return counts; +}; + +let projectManifestFiles = ( + plan: GeneratedBuildPlan, + graph: ReturnType, + projects: Iterable +): GeneratedBuildPath[] => + [...projects] + .sort((a, b) => a.localeCompare(b)) + .map(project => projectPackageJsonPath(plan, getNxProjectRoot(graph, project))) + .filter((path): path is GeneratedBuildPath => !!path); + +let internalDependenciesOf = ( + graph: ReturnType, + project: string +): string[] => + (graph.dependencies[project] ?? []) + .map(dep => dep.target) + .filter(target => !!graph.nodes[target]); + +let closeInstallLayerOrder = (opts: { + graph: ReturnType; + includedProjects: Set; + baseProjects: Set; + dependencyProjects: Set; + serviceProjects: Set; +}) => { + let changed = true; + + while (changed) { + changed = false; + + for (let project of [...opts.baseProjects]) { + let deps = internalDependenciesOf(opts.graph, project).filter(dep => + opts.includedProjects.has(dep) + ); + + if (deps.some(dep => !opts.baseProjects.has(dep))) { + opts.baseProjects.delete(project); + opts.dependencyProjects.add(project); + changed = true; + } + } + + for (let project of [...opts.dependencyProjects]) { + let deps = internalDependenciesOf(opts.graph, project).filter(dep => + opts.includedProjects.has(dep) + ); + + if (deps.some(dep => !opts.baseProjects.has(dep) && !opts.dependencyProjects.has(dep))) { + opts.dependencyProjects.delete(project); + opts.serviceProjects.add(project); + changed = true; + } + } + } +}; + +let createNodeInstallLayers = (opts: { + plan: GeneratedBuildPlan; + graph: ReturnType; + registry: ServiceRegistry; + includedProjects: Set; + serviceProjects: Set; + installLinker: string; +}): GeneratedBuildInstallLayer[] => { + let useCounts = collectNodeProjectUseCounts({ + registry: opts.registry, + graph: opts.graph, + contextRoot: opts.plan.contextRoot + }); + let baseProjects = new Set(); + let dependencyProjects = new Set(); + let serviceProjects = new Set(); + + for (let project of opts.includedProjects) { + if (opts.serviceProjects.has(project)) { + serviceProjects.add(project); + continue; + } + if ((useCounts.get(project) ?? 0) > 1) { + baseProjects.add(project); + continue; + } + dependencyProjects.add(project); + } + + closeInstallLayerOrder({ + graph: opts.graph, + includedProjects: opts.includedProjects, + baseProjects, + dependencyProjects, + serviceProjects + }); + + let command = `bun install --linker=${opts.installLinker}`; + + return [ + { + name: 'base', + tool: 'bun', + command, + manifestFiles: projectManifestFiles(opts.plan, opts.graph, baseProjects) + }, + { + name: 'dependencies', + tool: 'bun', + command, + manifestFiles: projectManifestFiles(opts.plan, opts.graph, dependencyProjects) + }, + { + name: 'service', + tool: 'bun', + command, + manifestFiles: projectManifestFiles(opts.plan, opts.graph, serviceProjects) + } + ].filter(layer => layer.manifestFiles.length > 0); +}; + export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { let installLinker = plan.service.config.build?.install?.linker ?? 'hoisted'; let systemPackages = plan.service.config.build?.install?.system_packages ?? ['ca-certificates']; - let automationLines = plan.automations.map(automation => `RUN cd /app && ${renderAutomationCommand(automation)}`); + let automationLines = plan.automations.map(automation => renderAutomationCommand(automation)); let artifactLines = renderArtifactLines(plan); let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); let lines = [ + '# syntax=docker/dockerfile:1.7', '# generated by control bootstrap', 'FROM oven/bun:1.2 AS deps', 'WORKDIR /app', - ...(systemPackages.length > 0 - ? [ - 'RUN apt-get update && apt-get install -y --no-install-recommends \\', - ...systemPackages.map((pkg, index) => - index === systemPackages.length - 1 - ? ` ${pkg} && rm -rf /var/lib/apt/lists/*` - : ` ${pkg} \\` - ) - ] - : []), - 'COPY _manifests/ ./', - `RUN bun install --linker=${installLinker}`, + 'ENV NX_CACHE_DIRECTORY=/app/.nx/cache', + ...renderAptInstall(systemPackages), + ...plan.installLayers.flatMap(layer => [ + `COPY _manifests/${layer.name}/ ./`, + `RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked ${layer.command}` + ]), '', 'FROM deps AS build', 'WORKDIR /app', 'COPY _inputs/ ./', - ...automationLines, - `RUN cd /app && bun x nx run ${plan.project}:${plan.target}`, + ...automationLines.map(renderNxRun), + renderNxRun(`bun x nx run ${plan.project}:${plan.target}`), '', 'FROM build AS workspace', `WORKDIR ${plan.workspaceRoot}`, @@ -183,10 +341,14 @@ export let nodeBuildBuilder: BuildBuilder = { let graph = readNxProjectGraph(plan.contextRoot); let mainClosure = collectNxProjectClosure(graph, [build.project]); let includedProjects = new Set(mainClosure); + let serviceProjects = new Set([build.project]); let resolvedAutomations: GeneratedBuildAutomation[] = []; for (let automation of build.automations ?? []) { let projects = resolveAutomationProjects({ plan, automation, graph }); + for (let project of projects) { + serviceProjects.add(project); + } for (let project of collectNxProjectClosure(graph, projects)) { includedProjects.add(project); } @@ -199,11 +361,6 @@ export let nodeBuildBuilder: BuildBuilder = { }); } - let manifestFiles = [...includedProjects] - .sort((a, b) => a.localeCompare(b)) - .map(project => projectPackageJsonPath(plan, getNxProjectRoot(graph, project))) - .filter((path): path is GeneratedBuildPath => !!path); - let inputPaths = [...includedProjects] .sort((a, b) => a.localeCompare(b)) .map(project => projectRootPath(plan, getNxProjectRoot(graph, project))); @@ -222,7 +379,17 @@ export let nodeBuildBuilder: BuildBuilder = { plan.project = build.project; plan.target = build.target; - plan.manifestFiles = manifestFiles.sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); + plan.installLayers = createNodeInstallLayers({ + plan, + graph, + registry, + includedProjects, + serviceProjects, + installLinker: build.install?.linker ?? 'hoisted' + }); + plan.manifestFiles = plan.installLayers + .flatMap(layer => layer.manifestFiles) + .sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); plan.inputPaths = inputPaths.sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); plan.automations = resolvedAutomations; plan.codegenSteps = []; diff --git a/src/tooling/control/src/builders/pathing.ts b/src/tooling/control/src/builders/pathing.ts index 5bddcc927..de6806cac 100644 --- a/src/tooling/control/src/builders/pathing.ts +++ b/src/tooling/control/src/builders/pathing.ts @@ -4,9 +4,11 @@ import { ControlError } from '../errors'; import type { ControlBuildCopy, ControlBuildConfig, + ControlBuildInstallLayer, ControlBuildStep, ControlService, GeneratedBuildArtifact, + GeneratedBuildInstallLayer, GeneratedBuildPath, GeneratedBuildStep, ServiceRegistry @@ -168,6 +170,50 @@ export let resolveBuildSteps = (opts: { }); }; +let defaultInstallCommand = (layer: ControlBuildInstallLayer, linker?: string): string => { + if (layer.command) return layer.command; + if (layer.tool === 'bun') return `bun install --linker=${linker ?? 'hoisted'}`; + if (layer.tool === 'go') return 'go mod download'; + if (layer.tool === 'cargo') return 'cargo fetch'; + throw new ControlError({ + code: 'build_install_layer_missing_command', + message: `Install layer "${layer.name ?? 'unnamed'}" must declare a command`, + hint: 'Set command or use a supported tool: bun, go, cargo' + }); +}; + +export let resolveBuildInstallLayers = (opts: { + service: ControlService; + registry: ServiceRegistry; + contextRoot: string; + install?: ControlBuildConfig['install']; +}): GeneratedBuildInstallLayer[] => { + let layers = opts.install?.layers ?? []; + + return layers.map((layer, index) => { + let name = (layer.name ?? `${layer.tool ?? 'custom'}-${index + 1}`).replace(/[^a-zA-Z0-9._-]+/g, '-'); + let cwdBase = layer.cwd ? resolvePatternBase(opts.service, opts.registry, layer.cwd) : null; + let cwdAbsolute = cwdBase ? resolve(cwdBase.cwd, cwdBase.pattern) : opts.service.dir; + assertInsideRoot(cwdAbsolute, opts.registry.controlRoot, 'install layer cwd'); + + return { + name, + tool: layer.tool ?? 'custom', + command: defaultInstallCommand(layer, opts.install?.linker), + cwd: layer.cwd, + cwdAbsolute, + cwdRelativeToContext: normalizeSlashes(relative(opts.contextRoot, cwdAbsolute) || '.'), + manifestFiles: resolveBuildPaths({ + service: opts.service, + registry: opts.registry, + contextRoot: opts.contextRoot, + patterns: layer.manifests, + label: `install layer "${name}" manifest` + }) + }; + }); +}; + export let resolveBuildArtifacts = (opts: { service: ControlService; registry: ServiceRegistry; diff --git a/src/tooling/control/src/builders/rust.ts b/src/tooling/control/src/builders/rust.ts index eabca67d2..b9becf9b3 100644 --- a/src/tooling/control/src/builders/rust.ts +++ b/src/tooling/control/src/builders/rust.ts @@ -8,6 +8,7 @@ import { defaultRuntime, formatContainerWorkdir, formatRunStep, + renderAptInstall, renderArtifactLines, renderCopyLines } from './base'; @@ -24,15 +25,8 @@ let defaultRustRuntime = defaultRuntime(undefined, { workdir: '/app' }); -let renderAptPackages = (packages: string[]): string[] => { - if (packages.length === 0) return []; - return [ - 'RUN apt-get update && apt-get install -y --no-install-recommends \\', - ...packages.map((pkg, index) => - index === packages.length - 1 ? ` ${pkg} && rm -rf /var/lib/apt/lists/*` : ` ${pkg} \\` - ) - ]; -}; +let renderCargoCacheMounts = () => + '--mount=type=cache,target=/usr/local/cargo/registry --mount=type=cache,target=/usr/local/cargo/git'; let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { let builderImage = plan.service.config.build?.builder_image?.image ?? 'rust:1.91-slim'; @@ -41,10 +35,9 @@ let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { let inputLines = renderCopyLines(plan.inputPaths); let prebuildLines = plan.prebuildSteps.map(step => { let cwd = formatContainerWorkdir(step.cwdRelativeToContext ?? '.'); - return `RUN cd ${cwd} && ${formatRunStep(step.run)}`; + return `RUN ${renderCargoCacheMounts()} cd ${cwd} && ${formatRunStep(step.run)}`; }); let artifactLines = renderArtifactLines(plan); - let runtimePackageLines = renderAptPackages(plan.runtime.packages); let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); let healthcheckLines = plan.runtime.healthcheck ? [ @@ -55,10 +48,11 @@ let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { let envLines = Object.entries(plan.runtime.env).map(([key, value]) => `ENV ${key}=${JSON.stringify(value)}`); let lines = [ + '# syntax=docker/dockerfile:1.7', '# generated by control bootstrap', `FROM ${builderImage} AS builder-base`, 'WORKDIR /app', - ...renderAptPackages(systemPackages), + ...renderAptInstall(systemPackages), '', 'FROM builder-base AS deps', 'WORKDIR /app', @@ -68,7 +62,7 @@ let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { 'FROM deps AS build', 'WORKDIR /app', ...inputLines, - `RUN cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, + `RUN ${renderCargoCacheMounts()} cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, '', 'FROM build AS workspace', `WORKDIR ${plan.workspaceRoot}`, @@ -76,7 +70,7 @@ let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { '', `FROM ${plan.runtime.base_image} AS runner`, `WORKDIR ${plan.runtime.workdir}`, - ...runtimePackageLines, + ...renderAptInstall(plan.runtime.packages), ...artifactLines, ...envLines, ...exposeLines, diff --git a/src/tooling/control/src/compose/builds.ts b/src/tooling/control/src/compose/builds.ts index fee69940a..423898187 100644 --- a/src/tooling/control/src/compose/builds.ts +++ b/src/tooling/control/src/compose/builds.ts @@ -18,7 +18,7 @@ export let resolveBuild = ( let svc = graph.config.service!; let usesGeneratedDockerfile = !!(graph.config.build?.mode && graph.config.build.mode !== 'custom'); let generatedDockerfile = usesGeneratedDockerfile - ? graph.config.build?.dockerfile ?? 'Dockerfile.generated' + ? graph.config.build?.dockerfile ?? 'Dockerfile' : undefined; let dockerfile = generatedDockerfile ?? svc.dockerfile ?? 'Dockerfile'; let target = svc.docker_target ?? (opts?.role === 'test-runner' ? 'workspace' : 'runner'); @@ -101,3 +101,9 @@ export let collectRunnerBuilds = (graph: ResolvedGraph): DockerBuildSpec[] => { return [...specs.values()].sort((a, b) => a.name.localeCompare(b.name)); }; + +export let collectServiceRunnerBuilds = (graph: ResolvedGraph): DockerBuildSpec[] => { + let specs = new Map(); + addRunnerBuild(specs, graph.name, graph); + return [...specs.values()]; +}; diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index b99f14ed4..913867b6b 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -5,9 +5,11 @@ import { MOCK_DEFINITIONS } from '../types'; import { controlToolingDir } from '../entrypoint'; import { interpolateEnv, mergeEnv } from '../graph/env'; import { resolveBuild } from './builds'; +import type { DockerBuildConfig } from './builds'; export type ComposeOptions = { postgresInitScripts?: Record; + buildContexts?: Record>; }; let networkConfig = (alias: string) => ({ @@ -79,11 +81,26 @@ let resolveControlDependsOn = ( return dependsOn; }; -let buildControlService = (dep: ResolvedDep, graph: ResolvedGraph, containerName: string) => { +let applyBuildContext = ( + name: string, + build: DockerBuildConfig, + composeOptions?: ComposeOptions +): DockerBuildConfig => { + let override = composeOptions?.buildContexts?.[name]; + if (!override) return build; + return { ...build, ...override }; +}; + +let buildControlService = ( + dep: ResolvedDep, + graph: ResolvedGraph, + containerName: string, + composeOptions?: ComposeOptions +) => { if (!dep.children) throw new Error(`Control dependency "${dep.name}" is missing resolved child graph`); let child = dep.children; - let build = resolveBuild(child, { role: 'service' }); + let build = applyBuildContext(child.name, resolveBuild(child, { role: 'service' }), composeOptions); let health = resolveServiceHealth(child); let dependsOn = resolveControlDependsOn(dep, graph); @@ -289,7 +306,7 @@ export let generateComposeServices = ( if (scope === 'service') { seen.add(dep.name); - let built = buildControlService(dep, graph, containerName); + let built = buildControlService(dep, graph, containerName, composeOptions); services[dep.composeName] = built; dependsOn[dep.composeName] = depWaitCondition(dep, !!built.healthcheck); continue; @@ -313,7 +330,8 @@ export let generateComposeServices = ( sourceDir: dep.children!.dir }, dep.children!, - childContainerName + childContainerName, + composeOptions ); services[childComposeName] = built; dependsOn[childComposeName] = depWaitCondition(childDep, !!built.healthcheck); @@ -336,7 +354,7 @@ export let generateComposeServices = ( dependsOn[childComposeName] = depWaitCondition(childDep, leaf.hasHealth ?? true); } - let childService = buildControlService(dep, graph, containerName); + let childService = buildControlService(dep, graph, containerName, composeOptions); services[dep.composeName] = childService; dependsOn[dep.composeName] = depWaitCondition(dep, !!childService.healthcheck); seen.add(dep.name); @@ -350,7 +368,7 @@ export let generateComposeServices = ( dependsOn[dep.composeName] = depWaitCondition(dep, built.hasHealth ?? true); } - let build = resolveBuild(graph, { role: 'test-runner' }); + let build = applyBuildContext(graph.name, resolveBuild(graph, { role: 'test-runner' }), composeOptions); let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; let runnerKey = graph.testRunnerComposeName; let runnerContainer = isSidecar diff --git a/src/tooling/control/src/run/build.ts b/src/tooling/control/src/run/build.ts index 7d896f147..8b2ca0634 100644 --- a/src/tooling/control/src/run/build.ts +++ b/src/tooling/control/src/run/build.ts @@ -1,7 +1,7 @@ import { resolve } from 'path'; import { createBuildPlan, renderDockerfileForPlan } from '../builders'; import { materializeBuildContext } from '../builders/context'; -import { collectRunnerBuilds } from '../compose/builds'; +import { collectServiceRunnerBuilds } from '../compose/builds'; import { resolveGraph } from '../graph/resolver'; import { resolveControlDir, resolveEntrypoint, resolveControlCwd } from '../entrypoint'; import { resolveStagedEntrypoint } from '../staging/session'; @@ -46,7 +46,7 @@ let runBuildForService = async ( ); } - let specs = collectRunnerBuilds(graph); + let specs = collectServiceRunnerBuilds(graph); logger.info(`Building ${specs.length} runner image(s) for ${graph.name}...`); for (let spec of specs) { diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index 70f8cdcb9..fefe30597 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -1,6 +1,8 @@ import { mkdirSync, writeFileSync, chmodSync } from 'fs'; -import { join } from 'path'; +import { join, relative } from 'path'; import { generateCompose, collectContainerNames } from '../compose/generator'; +import { createBuildPlan, renderDockerfileForPlan } from '../builders'; +import { materializeBuildContext } from '../builders/context'; import { generatePostgresInitScript } from '../compose/databaseInit'; import { postgresDatabasesForDep } from '../graph/databases'; import { resolveGraph } from '../graph/resolver'; @@ -16,10 +18,14 @@ import type { BatchServiceResult, ControlService, RunOptions, - RunPhase + RunPhase, + ResolvedGraph, + ServiceRegistry, + WorkspaceSession } from '../types'; import { runShell } from './shell'; import { runUnitTargets } from './unit'; +import type { DockerBuildConfig } from '../compose/builds'; type RunControlContext = { index: number; @@ -80,6 +86,49 @@ let waitForServices = async (opts: { throw new HealthTimeoutError({ containers: finalStatuses }); }; +let collectMaterializedBuildContexts = async (opts: { + graph: ResolvedGraph; + registry: ServiceRegistry; + session?: WorkspaceSession | null; +}): Promise>> => { + let contexts: Record> = {}; + let seen = new Set(); + + let visit = async (graph: ResolvedGraph) => { + if (!seen.has(graph.name)) { + seen.add(graph.name); + let service = opts.registry.byName.get(graph.name); + + if (service?.config.build?.mode && service.config.build.mode !== 'custom') { + let plan = createBuildPlan(service, opts.registry); + if (plan) { + let renderedDockerfile = renderDockerfileForPlan(plan); + let materialized = await materializeBuildContext({ + plan, + registry: opts.registry, + session: opts.session ?? null, + renderedDockerfile + }); + + contexts[graph.name] = { + context: materialized.root, + dockerfile: `./${relative(materialized.root, materialized.dockerfilePath).replace(/\\/g, '/')}` + }; + } + } + } + + for (let dep of graph.deps) { + if (dep.kind === 'control' && dep.children) { + await visit(dep.children); + } + } + }; + + await visit(opts.graph); + return contexts; +}; + export let runControl = async ( opts: RunOptions & { target: string; context?: RunControlContext } ) => { @@ -112,6 +161,12 @@ export let runControl = async ( let runDir = join(repoRoot, '.control', 'runs', runId); mkdirSync(runDir, { recursive: true }); + let buildContexts = await collectMaterializedBuildContexts({ + graph, + registry, + session: opts.session ?? null + }); + let postgresInitScripts: Record = {}; for (let dep of graph.deps) { if (dep.kind !== 'preset' || dep.config.preset !== 'postgres') continue; @@ -127,7 +182,7 @@ export let runControl = async ( let composeFile = join(runDir, 'compose.yml'); let envFile = join(runDir, '.env.control'); - writeFileSync(composeFile, generateCompose(graph, projectName, { postgresInitScripts })); + writeFileSync(composeFile, generateCompose(graph, projectName, { postgresInitScripts, buildContexts })); let envLines = Object.entries(graph.env).map(([k, v]) => `${k}=${JSON.stringify(v).slice(1, -1)}`); writeFileSync(envFile, envLines.join('\n') + '\n'); diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts index 7a14db197..97d0378d0 100644 --- a/src/tooling/control/src/types.ts +++ b/src/tooling/control/src/types.ts @@ -66,6 +66,14 @@ export type ControlBuildRuntime = { workdir?: string; }; +export type ControlBuildInstallLayer = { + name?: string; + tool?: 'bun' | 'go' | 'cargo' | 'custom'; + cwd?: string; + manifests?: string[]; + command?: string; +}; + export type ControlBuildConfig = { builder: 'node' | 'rust' | 'go'; mode?: 'generated' | 'custom' | 'generated-with-overlay'; @@ -85,6 +93,7 @@ export type ControlBuildConfig = { linker?: string; lockfile?: string; system_packages?: string[]; + layers?: ControlBuildInstallLayer[]; }; manifests?: { files?: string[]; @@ -261,6 +270,16 @@ export type GeneratedBuildAutomation = { command: string; }; +export type GeneratedBuildInstallLayer = { + name: string; + tool: 'bun' | 'go' | 'cargo' | 'custom'; + command: string; + cwd?: string; + cwdAbsolute?: string; + cwdRelativeToContext?: string; + manifestFiles: GeneratedBuildPath[]; +}; + export type GeneratedBuildArtifact = { from: string; to: string; @@ -278,6 +297,7 @@ export type GeneratedBuildPlan = { workspaceRoot: string; manifestFiles: GeneratedBuildPath[]; inputPaths: GeneratedBuildPath[]; + installLayers: GeneratedBuildInstallLayer[]; automations: GeneratedBuildAutomation[]; codegenSteps: GeneratedBuildStep[]; prebuildSteps: GeneratedBuildStep[]; From 9b04bb8fe698ee0d076b36400e5166a378227847 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 14:52:46 +0200 Subject: [PATCH 20/69] Move to nx and generated docker files --- nx.json | 9 +- src/systems/ares/service/Dockerfile | 13 +- src/systems/cargo/service/Dockerfile | 11 +- src/systems/cargo/service/control.toml | 5 +- src/systems/forge/service/Dockerfile | 12 +- src/systems/forge/service/control.toml | 5 +- src/systems/function-bay/deflector/Dockerfile | 4 +- src/systems/function-bay/service/Dockerfile | 13 +- src/systems/function-bay/service/control.toml | 5 +- .../service/src/providers/local/runtime.ts | 4 + src/systems/object-storage/service/Dockerfile | 4 +- .../origin/apps/code-bucket/Dockerfile | 4 +- .../origin/apps/code-bucket/control.toml | 2 +- src/systems/origin/apps/service/Dockerfile | 10 +- src/systems/relay/service/Dockerfile | 10 +- src/systems/shuttle/service/Dockerfile | 11 +- src/systems/signal/service/Dockerfile | 10 +- src/systems/slates/apps/hub/Dockerfile | 14 +- src/systems/slates/apps/registry/Dockerfile | 11 +- .../subspace/apps/controller/Dockerfile | 10 +- .../subspace/apps/controller/control.toml | 5 +- src/systems/subspace/apps/public/Dockerfile | 14 +- src/systems/subspace/apps/worker/Dockerfile | 12 +- src/systems/subspace/apps/worker/package.json | 2 +- src/systems/synthesis/service/Dockerfile | 7 +- src/systems/voyager/service/Dockerfile | 10 +- src/tooling/control/src/bootstrap.ts | 6 +- src/tooling/control/src/builders/base.ts | 1 + src/tooling/control/src/builders/context.ts | 23 +- src/tooling/control/src/builders/go.ts | 6 +- src/tooling/control/src/builders/node.ts | 224 ++++++++++++++++-- src/tooling/control/src/builders/nx.ts | 7 + src/tooling/control/src/builders/rust.ts | 2 +- src/tooling/control/src/compose/generator.ts | 53 ++++- src/tooling/control/src/run/build.ts | 27 ++- src/tooling/control/src/run/runner.ts | 15 +- src/tooling/control/src/types.ts | 10 + 37 files changed, 451 insertions(+), 140 deletions(-) diff --git a/nx.json b/nx.json index 340cb080d..1f7d2c3b9 100644 --- a/nx.json +++ b/nx.json @@ -34,8 +34,7 @@ "cache": true, "dependsOn": [ "prisma:generate", - "^build", - "^server:build" + "^build" ], "inputs": [ "production", @@ -48,8 +47,7 @@ "frontend:build": { "cache": true, "dependsOn": [ - "^build", - "^frontend:build" + "^build" ], "inputs": [ "production", @@ -64,8 +62,7 @@ "cache": true, "dependsOn": [ "prisma:generate", - "^build", - "^worker:build" + "^build" ], "inputs": [ "production", diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index 5720bad0c..1e7a38412 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -9,14 +9,15 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/ares:server:build +COPY _inputs/shared/ ./ +COPY _inputs/clients/ ./ +COPY _inputs/dependencies/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/ares:server:build FROM build AS workspace WORKDIR /app/src/systems/ares/service CMD ["sleep", "infinity"] diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index e7eccf173..c0658f561 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -9,13 +9,14 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial-cargo/service:server:build +COPY _inputs/shared/ ./ +COPY _inputs/clients/ ./ +COPY _inputs/dependencies/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-cargo/service:server:build FROM build AS workspace WORKDIR /app/src/systems/cargo/service CMD ["sleep", "infinity"] diff --git a/src/systems/cargo/service/control.toml b/src/systems/cargo/service/control.toml index d0154a538..e47016290 100644 --- a/src/systems/cargo/service/control.toml +++ b/src/systems/cargo/service/control.toml @@ -14,7 +14,10 @@ context = "oss" project = "@metorial-cargo/service" target = "server:build" dockerfile = "Dockerfile" -extra_paths = ["//oss/src/systems/_shared/entityImage.ts"] +extra_paths = [ + "//oss/src/systems/_clients/cargo/src/index.ts", + "//oss/src/systems/_shared/entityImage.ts" +] [[build.automations]] name = "cargo-db-prisma" diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index ab287d99a..da87e3a8d 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -9,13 +9,13 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/forge:server:build +COPY _inputs/shared/ ./ +COPY _inputs/clients/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/forge:server:build FROM build AS workspace WORKDIR /app/src/systems/forge/service CMD ["sleep", "infinity"] @@ -26,7 +26,7 @@ COPY --from=build /app/src/systems/forge/service/dist /app/dist COPY --from=build /app/src/systems/forge/service/prisma /app/prisma COPY --from=build /app/src/systems/forge/service/prisma.config.ts /app/prisma.config.ts COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" +ENV NODE_ENV="development" EXPOSE 52020 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:52020/ping && curl -f http://localhost:12121/ || exit 1 diff --git a/src/systems/forge/service/control.toml b/src/systems/forge/service/control.toml index 23d39fe3d..b5a27d613 100644 --- a/src/systems/forge/service/control.toml +++ b/src/systems/forge/service/control.toml @@ -31,7 +31,7 @@ copy = [ [build.runtime] base_image = "oven/bun:1.2-alpine" packages = ["curl"] -env = { NODE_ENV = "production" } +env = { NODE_ENV = "development" } expose = [52020] command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" healthcheck = "curl -f http://localhost:52020/ping && curl -f http://localhost:12121/ || exit 1" @@ -56,8 +56,9 @@ OBJECT_STORAGE_URL = "http://$deps.object-store.52010" ARTIFACT_BUCKET_NAME = "artifacts-test" LOG_BUCKET_NAME = "logs-test" ENCRYPTION_KEY = "test-encryption-key-32-bytes!!" -DEFAULT_PROVIDER = "aws.code-build" +DEFAULT_PROVIDER = "local" CODE_BUILD_AWS_REGION = "us-east-1" +NODE_ENV = "development" [[deps]] name = "postgres" diff --git a/src/systems/function-bay/deflector/Dockerfile b/src/systems/function-bay/deflector/Dockerfile index 354bb14ea..2df8b12a6 100644 --- a/src/systems/function-bay/deflector/Dockerfile +++ b/src/systems/function-bay/deflector/Dockerfile @@ -6,12 +6,12 @@ ENV GOTOOLCHAIN=auto RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk git ca-certificates COPY src/systems/function-bay/deflector/go.mod ./src/systems/function-bay/deflector/ COPY src/systems/function-bay/deflector/go.sum ./src/systems/function-bay/deflector/ -RUN --mount=type=cache,target=/go/pkg/mod cd /app/src/systems/function-bay/deflector && go mod download +RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked cd /app/src/systems/function-bay/deflector && go mod download FROM deps AS build WORKDIR /app COPY src/systems/function-bay/deflector/cmd ./src/systems/function-bay/deflector/cmd/ COPY src/systems/function-bay/deflector/internal ./src/systems/function-bay/deflector/internal/ -RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build cd /app/src/systems/function-bay/deflector && CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /tmp/deflector ./cmd/deflector +RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked --mount=type=cache,id=control-go-build,target=/root/.cache/go-build,sharing=locked cd /app/src/systems/function-bay/deflector && CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /tmp/deflector ./cmd/deflector FROM build AS workspace WORKDIR /app/src/systems/function-bay/deflector CMD ["sleep", "infinity"] diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 16f551b68..edad55b01 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -9,13 +9,14 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/function-bay:server:build +COPY _inputs/shared/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types +COPY _inputs/clients/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/function-bay:server:build FROM build AS workspace WORKDIR /app/src/systems/function-bay/service CMD ["sleep", "infinity"] @@ -26,7 +27,7 @@ COPY --from=build /app/src/systems/function-bay/service/dist /app/dist COPY --from=build /app/src/systems/function-bay/service/prisma /app/prisma COPY --from=build /app/src/systems/function-bay/service/prisma.config.ts /app/prisma.config.ts COPY --from=build /app/node_modules /app/node_modules -ENV NODE_ENV="production" +ENV NODE_ENV="development" EXPOSE 52030 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:52030/ping && curl -f http://localhost:12121/ || exit 1 diff --git a/src/systems/function-bay/service/control.toml b/src/systems/function-bay/service/control.toml index 9b46128ef..5d9f1519c 100644 --- a/src/systems/function-bay/service/control.toml +++ b/src/systems/function-bay/service/control.toml @@ -31,7 +31,7 @@ copy = [ [build.runtime] base_image = "oven/bun:1.2-alpine" packages = ["curl"] -env = { NODE_ENV = "production" } +env = { NODE_ENV = "development" } expose = [52030] command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" healthcheck = "curl -f http://localhost:52030/ping && curl -f http://localhost:12121/ || exit 1" @@ -56,8 +56,9 @@ OBJECT_STORAGE_URL = "http://$deps.object-store.52010" BUNDLE_BUCKET_NAME = "bundles" ENCRYPTION_KEY = "ci-encryption-key-32-bytes!!!!" FORGE_API_URL = "http://$deps.forge.52020/metorial-forge" -DEFAULT_PROVIDER = "aws.lambda" +DEFAULT_PROVIDER = "local" LAMBDA_AWS_REGION = "us-east-1" +NODE_ENV = "development" [[deps]] name = "postgres" diff --git a/src/systems/function-bay/service/src/providers/local/runtime.ts b/src/systems/function-bay/service/src/providers/local/runtime.ts index 41214ca6f..9b14a0882 100644 --- a/src/systems/function-bay/service/src/providers/local/runtime.ts +++ b/src/systems/function-bay/service/src/providers/local/runtime.ts @@ -42,6 +42,10 @@ export let getRuntime = async ( )}`; let runtime = persistedRuntimes.get(identifier); + if (runtime && !(await db.runtime.findUnique({ where: { oid: runtime.oid } }))) { + persistedRuntimes.delete(identifier); + runtime = undefined; + } if (!runtime) { let name = getRuntimeName(spec); diff --git a/src/systems/object-storage/service/Dockerfile b/src/systems/object-storage/service/Dockerfile index 49c5b72e8..ccb645832 100644 --- a/src/systems/object-storage/service/Dockerfile +++ b/src/systems/object-storage/service/Dockerfile @@ -13,12 +13,12 @@ COPY src/systems/object-storage/service/Cargo.lock ./src/systems/object-storage/ COPY src/systems/object-storage/service/Cargo.toml ./src/systems/object-storage/service/ COPY src/systems/object-storage/service/object-store-backends/Cargo.toml ./src/systems/object-storage/service/object-store-backends/ COPY src/systems/object-storage/service/object-store/Cargo.toml ./src/systems/object-storage/service/object-store/ -RUN --mount=type=cache,target=/usr/local/cargo/registry --mount=type=cache,target=/usr/local/cargo/git cd /app/src/systems/object-storage/service && mkdir -p object-store/src object-store-backends/src && echo "fn main() {}" > object-store/src/main.rs && echo "pub fn dummy() {}" > object-store/src/lib.rs && echo "pub fn dummy() {}" > object-store-backends/src/lib.rs && cargo build --release && rm -rf object-store/src object-store-backends/src +RUN --mount=type=cache,id=control-cargo-registry,target=/usr/local/cargo/registry,sharing=locked --mount=type=cache,id=control-cargo-git,target=/usr/local/cargo/git,sharing=locked --mount=type=cache,id=control-cargo-target,target=/app/target,sharing=locked cd /app/src/systems/object-storage/service && mkdir -p object-store/src object-store-backends/src && echo "fn main() {}" > object-store/src/main.rs && echo "pub fn dummy() {}" > object-store/src/lib.rs && echo "pub fn dummy() {}" > object-store-backends/src/lib.rs && cargo build --release && rm -rf object-store/src object-store-backends/src FROM deps AS build WORKDIR /app COPY src/systems/object-storage/service/object-store ./src/systems/object-storage/service/object-store/ COPY src/systems/object-storage/service/object-store-backends ./src/systems/object-storage/service/object-store-backends/ -RUN --mount=type=cache,target=/usr/local/cargo/registry --mount=type=cache,target=/usr/local/cargo/git cd /app/src/systems/object-storage/service && cargo build --release --bin object-store-service +RUN --mount=type=cache,id=control-cargo-registry,target=/usr/local/cargo/registry,sharing=locked --mount=type=cache,id=control-cargo-git,target=/usr/local/cargo/git,sharing=locked --mount=type=cache,id=control-cargo-target,target=/app/target,sharing=locked cd /app/src/systems/object-storage/service && cargo build --release --bin object-store-service FROM build AS workspace WORKDIR /app/src/systems/object-storage/service CMD ["sleep", "infinity"] diff --git a/src/systems/origin/apps/code-bucket/Dockerfile b/src/systems/origin/apps/code-bucket/Dockerfile index 71eb38f1b..d79770dc3 100644 --- a/src/systems/origin/apps/code-bucket/Dockerfile +++ b/src/systems/origin/apps/code-bucket/Dockerfile @@ -10,7 +10,7 @@ COPY oss/src/systems/origin/apps/code-bucket/package.json ./oss/src/systems/orig COPY oss/src/systems/origin/apps/code-workspace/extensions/memfs/package.json ./oss/src/systems/origin/apps/code-workspace/extensions/memfs/ COPY oss/src/systems/origin/apps/code-workspace/package.json ./oss/src/systems/origin/apps/code-workspace/ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked cd /app/oss/src/systems/origin/apps/code-workspace && bun install --linker=hoisted -RUN --mount=type=cache,target=/go/pkg/mod cd /app/oss/src/systems/origin/apps/code-bucket && go mod download +RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked cd /app/oss/src/systems/origin/apps/code-bucket && go mod download FROM deps AS build WORKDIR /app COPY oss/src/systems/origin/apps/code-bucket/cmd ./oss/src/systems/origin/apps/code-bucket/cmd/ @@ -24,7 +24,7 @@ COPY oss/src/systems/origin/apps/code-bucket/ts-proto-gen ./oss/src/systems/orig COPY oss/src/systems/origin/apps/code-workspace ./oss/src/systems/origin/apps/code-workspace/ RUN cd /app/oss/src/systems/origin/apps/code-workspace && bunx tsc && bunx vite build RUN cd /app/oss/src/systems/origin/apps/code-bucket && rm -rf pkg/workspace/dist && mkdir -p pkg/workspace && cp -R ../code-workspace/dist pkg/workspace/dist -RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build cd /app/oss/src/systems/origin/apps/code-bucket && CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /tmp/code-bucket ./cmd/server +RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked --mount=type=cache,id=control-go-build,target=/root/.cache/go-build,sharing=locked cd /app/oss/src/systems/origin/apps/code-bucket && CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /tmp/code-bucket ./cmd/server FROM build AS workspace WORKDIR /app/oss/src/systems/origin/apps/code-bucket CMD ["sleep", "infinity"] diff --git a/src/systems/origin/apps/code-bucket/control.toml b/src/systems/origin/apps/code-bucket/control.toml index e46c9f9de..01f55e657 100644 --- a/src/systems/origin/apps/code-bucket/control.toml +++ b/src/systems/origin/apps/code-bucket/control.toml @@ -82,7 +82,7 @@ cwd = "/app/src/systems/origin/apps/code-bucket" [test.e2e] command = "go test ./pkg/util -run TestNormalizePath" -cwd = "/app/src/systems/origin/apps/code-bucket" +cwd = "/app/oss/src/systems/origin/apps/code-bucket" runner = "service" [env] diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index 4172d4266..c3d75a9c2 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -9,13 +9,13 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/origin:server:build +COPY _inputs/shared/ ./ +COPY _inputs/clients/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/origin:server:build FROM build AS workspace WORKDIR /app/src/systems/origin/apps/service CMD ["sleep", "infinity"] diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 0c6ec5bfa..7df80d84d 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -9,13 +9,13 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/relay -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/relay:server:build +COPY _inputs/shared/ ./ +COPY _inputs/clients/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/relay +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/relay:server:build FROM build AS workspace WORKDIR /app/src/systems/relay/service CMD ["sleep", "infinity"] diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index b814836f6..26d2bf2c0 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -9,13 +9,14 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/shuttle:server:build +COPY _inputs/shared/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory +COPY _inputs/clients/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/shuttle:server:build FROM build AS workspace WORKDIR /app/src/systems/shuttle/service CMD ["sleep", "infinity"] diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index e1e6c0b0b..0da6fb0b9 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -9,13 +9,13 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/signal -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/signal:server:build +COPY _inputs/shared/ ./ +COPY _inputs/clients/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/signal +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/signal:server:build FROM build AS workspace WORKDIR /app/src/systems/signal/service CMD ["sleep", "infinity"] diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index 9ba79df6e..bc2e6b4b6 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -9,14 +9,16 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/slates:server:build +COPY _inputs/shared/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types +COPY _inputs/clients/ ./ +COPY _inputs/dependencies/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/slates:server:build FROM build AS workspace WORKDIR /app/src/systems/slates/apps/hub CMD ["sleep", "infinity"] diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 6fecec762..24dad60c5 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -13,10 +13,13 @@ COPY _manifests/service/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/slates-registry:server:build +COPY _inputs/shared/ ./ +COPY _inputs/clients/ ./ +COPY _inputs/dependencies/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/slates-registry:server:build FROM build AS workspace WORKDIR /app/src/systems/slates/apps/registry CMD ["sleep", "infinity"] diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index 52bae4cca..ecfc6ab50 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -13,9 +13,13 @@ COPY _manifests/service/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial-subspace/app-controller:server:build +COPY _inputs/shared/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory +COPY _inputs/clients/ ./ +COPY _inputs/dependencies/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-controller:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/controller CMD ["sleep", "infinity"] diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index 4a3d15405..def6905f4 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -13,7 +13,10 @@ context = "oss" project = "@metorial-subspace/app-controller" target = "server:build" dockerfile = "Dockerfile" -extra_paths = ["//oss/src/systems/_shared/entityImage.ts"] +extra_paths = [ + "//oss/src/systems/_shared/entityImage.ts", + "//oss/src/systems/subspace/test-servers" +] [[build.automations]] name = "subspace-controller-prisma" diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index d2fde4bf2..d26f54974 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -9,14 +9,20 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/dependencies/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted COPY _manifests/service/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial-subspace/app-public:server:build +COPY _inputs/shared/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory +COPY _inputs/clients/ ./ +COPY _inputs/dependencies/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-public:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/public CMD ["sleep", "infinity"] diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index 2a69871e8..85bd873dd 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -9,13 +9,19 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +COPY _manifests/dependencies/ ./ +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted COPY _manifests/service/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial-subspace/app-worker:server:build +COPY _inputs/shared/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory +COPY _inputs/clients/ ./ +COPY _inputs/dependencies/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-worker:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/worker CMD ["sleep", "infinity"] diff --git a/src/systems/subspace/apps/worker/package.json b/src/systems/subspace/apps/worker/package.json index 27bbc0b5b..4a62ffd00 100644 --- a/src/systems/subspace/apps/worker/package.json +++ b/src/systems/subspace/apps/worker/package.json @@ -6,7 +6,7 @@ "scripts": { "start:dev": "bun --watch ./src/server.ts", "start": "bun ./src/server.ts", - "server:build": "ncc build ./src/server.ts -o ./dist --source-map --external bun:sqlite --external bun && bun run sentry:sourcemaps:if-token", + "server:build": "sh -c 'mv tsconfig.json tsconfig.json.bak && mv tsconfig.build.json tsconfig.json && ncc build ./src/server.ts -o ./dist --source-map --transpile-only --external bun:sqlite --external bun && bun run sentry:sourcemaps:if-token; BUILD_EXIT_CODE=$?; mv tsconfig.json tsconfig.build.json && mv tsconfig.json.bak tsconfig.json; exit $BUILD_EXIT_CODE'", "sentry:sourcemaps": "sentry-cli sourcemaps inject --org metorial --project mte-subspace-worker ./dist && sentry-cli sourcemaps upload --org metorial --project mte-subspace-worker ./dist", "sentry:sourcemaps:if-token": "sh -c 'if [ -n \"$SENTRY_AUTH_TOKEN\" ]; then bun run sentry:sourcemaps; else echo \"Skipping Sentry sourcemap upload\"; fi'", "test": "bun run test:unit && bun run test:e2e", diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index ef9b1103b..e28fee7cb 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -13,9 +13,10 @@ COPY _manifests/service/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/synthesis:server:build +COPY _inputs/shared/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/synthesis:server:build FROM build AS workspace WORKDIR /app/src/systems/synthesis/service CMD ["sleep", "infinity"] diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index fff44967a..87583bf88 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -9,13 +9,13 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted -COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted FROM deps AS build WORKDIR /app -COPY _inputs/ ./ -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/voyager -RUN --mount=type=cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/voyager:server:build +COPY _inputs/shared/ ./ +COPY _inputs/clients/ ./ +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/voyager:server:build FROM build AS workspace WORKDIR /app/src/systems/voyager/service CMD ["sleep", "infinity"] diff --git a/src/tooling/control/src/bootstrap.ts b/src/tooling/control/src/bootstrap.ts index 531403147..10194023c 100644 --- a/src/tooling/control/src/bootstrap.ts +++ b/src/tooling/control/src/bootstrap.ts @@ -42,19 +42,19 @@ let createNxConfig = (scope: 'repo' | 'oss' = 'repo') => ({ }, 'server:build': { cache: true, - dependsOn: ['prisma:generate', '^build', '^server:build'], + dependsOn: ['prisma:generate', '^build'], inputs: ['production', '^production'], outputs: ['{projectRoot}/dist/**'] }, 'frontend:build': { cache: true, - dependsOn: ['^build', '^frontend:build'], + dependsOn: ['^build'], inputs: ['production', '^production'], outputs: ['{projectRoot}/dist/**', '{projectRoot}/frontend/dist/**'] }, 'worker:build': { cache: true, - dependsOn: ['prisma:generate', '^build', '^worker:build'], + dependsOn: ['prisma:generate', '^build'], inputs: ['production', '^production'], outputs: ['{projectRoot}/dist-worker/**'] }, diff --git a/src/tooling/control/src/builders/base.ts b/src/tooling/control/src/builders/base.ts index 660375ebd..3d37a00db 100644 --- a/src/tooling/control/src/builders/base.ts +++ b/src/tooling/control/src/builders/base.ts @@ -104,6 +104,7 @@ export let createBasePlan = (opts: { ), inputPaths: inputs, installLayers, + sourceLayers: [], automations: [], codegenSteps: resolveBuildSteps({ service: opts.service, diff --git a/src/tooling/control/src/builders/context.ts b/src/tooling/control/src/builders/context.ts index 615120342..583babe1c 100644 --- a/src/tooling/control/src/builders/context.ts +++ b/src/tooling/control/src/builders/context.ts @@ -100,11 +100,6 @@ let materializeNodeContext = async (opts: { contextRoot: string; sourceRoot: string; }): Promise => { - let inputPaths = new Set(opts.plan.inputPaths.map(path => path.relativeToContext)); - for (let file of rootInputFilesForPlan(opts.sourceRoot)) { - inputPaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); - } - for (let i = 0; i < opts.plan.installLayers.length; i++) { let layer = opts.plan.installLayers[i]!; let manifestPaths = new Set(); @@ -133,11 +128,19 @@ let materializeNodeContext = async (opts: { ); } - await copyGitAwareSelection({ - sourceRoot: opts.sourceRoot, - destRoot: join(opts.contextRoot, '_inputs'), - includePaths: [...inputPaths].sort((a, b) => a.localeCompare(b)) - }); + for (let layer of opts.plan.sourceLayers) { + let inputPaths = new Set(layer.inputPaths.map(path => path.relativeToContext)); + + for (let file of rootInputFilesForPlan(opts.sourceRoot)) { + inputPaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); + } + + await copyGitAwareSelection({ + sourceRoot: opts.sourceRoot, + destRoot: join(opts.contextRoot, '_inputs', layer.name), + includePaths: [...inputPaths].sort((a, b) => a.localeCompare(b)) + }); + } return renderNodePrunedDockerfile(opts.plan); }; diff --git a/src/tooling/control/src/builders/go.ts b/src/tooling/control/src/builders/go.ts index 71583061c..0556e12ec 100644 --- a/src/tooling/control/src/builders/go.ts +++ b/src/tooling/control/src/builders/go.ts @@ -36,7 +36,7 @@ let renderGoDockerfile = (plan: GeneratedBuildPlan): string => { layer.tool === 'bun' ? '--mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked ' : layer.tool === 'go' - ? '--mount=type=cache,target=/go/pkg/mod ' + ? '--mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked ' : ''; return `RUN ${cacheMount}cd ${cwd} && ${formatRunStep(layer.command)}`; }); @@ -64,13 +64,13 @@ let renderGoDockerfile = (plan: GeneratedBuildPlan): string => { ...renderApkInstall(systemPackages), ...manifestLines, ...installLayerLines, - `RUN --mount=type=cache,target=/go/pkg/mod cd ${plan.workspaceRoot} && go mod download`, + `RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked cd ${plan.workspaceRoot} && go mod download`, '', 'FROM deps AS build', 'WORKDIR /app', ...inputLines, ...prebuildLines, - `RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, + `RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked --mount=type=cache,id=control-go-build,target=/root/.cache/go-build,sharing=locked cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, '', 'FROM build AS workspace', `WORKDIR ${plan.workspaceRoot}`, diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 4db3d25f8..a50e1974c 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -14,6 +14,7 @@ import { collectNxDependents, collectNxProjectClosure, getNxProjectRoot, + nxProjectHasTarget, readNxProjectGraph, renderNxRunManyCommand } from './nx'; @@ -25,6 +26,7 @@ import type { GeneratedBuildInstallLayer, GeneratedBuildPath, GeneratedBuildPlan, + GeneratedBuildSourceLayer, ServiceRegistry } from '../types'; @@ -76,6 +78,23 @@ let projectRootPath = (plan: GeneratedBuildPlan, projectRoot: string): Generated exists: true }); +let isClientProject = ( + graph: ReturnType, + project: string +): boolean => getNxProjectRoot(graph, project).startsWith('src/systems/_clients/'); + +let collectServiceBuildProjects = (registry: ServiceRegistry): Set => { + let projects = new Set(); + + for (let service of registry.services) { + let build = service.config.build; + if (build?.builder !== 'node') continue; + if (build.project) projects.add(build.project); + } + + return projects; +}; + let resolveAutomationProjects = (opts: { plan: GeneratedBuildPlan; automation: ControlBuildAutomation; @@ -95,7 +114,7 @@ let resolveAutomationProjects = (opts: { let renderAutomationCommand = (automation: GeneratedBuildAutomation): string => automation.command; let renderNxRun = (command: string): string => - `RUN --mount=type=cache,target=/app/.nx/cache cd /app && ${command}`; + `RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && ${command}`; let collectNodeProjectUseCounts = (opts: { registry: ServiceRegistry; @@ -210,58 +229,190 @@ let createNodeInstallLayers = (opts: { graph: opts.graph, contextRoot: opts.plan.contextRoot }); + let serviceBuildProjects = collectServiceBuildProjects(opts.registry); let baseProjects = new Set(); + let clientProjects = new Set(); let dependencyProjects = new Set(); let serviceProjects = new Set(); + for (let [project, count] of useCounts) { + if (count <= 1) continue; + if (serviceBuildProjects.has(project)) continue; + baseProjects.add(project); + } + + for (let project of [...baseProjects]) { + for (let dep of collectNxProjectClosure(opts.graph, [project])) { + baseProjects.add(dep); + } + } + for (let project of opts.includedProjects) { + if (baseProjects.has(project)) continue; if (opts.serviceProjects.has(project)) { serviceProjects.add(project); continue; } - if ((useCounts.get(project) ?? 0) > 1) { - baseProjects.add(project); + if (isClientProject(opts.graph, project)) { + clientProjects.add(project); continue; } dependencyProjects.add(project); } + for (let project of [...clientProjects]) { + for (let dep of collectNxProjectClosure(opts.graph, [project])) { + if (baseProjects.has(dep)) continue; + clientProjects.add(dep); + } + } + closeInstallLayerOrder({ graph: opts.graph, includedProjects: opts.includedProjects, baseProjects, + dependencyProjects: clientProjects, + serviceProjects: dependencyProjects + }); + closeInstallLayerOrder({ + graph: opts.graph, + includedProjects: opts.includedProjects, + baseProjects: new Set([...baseProjects, ...clientProjects]), dependencyProjects, serviceProjects }); let command = `bun install --linker=${opts.installLinker}`; - return [ + return ([ { name: 'base', + tier: 'shared', tool: 'bun', command, manifestFiles: projectManifestFiles(opts.plan, opts.graph, baseProjects) }, + { + name: 'clients', + tier: 'clients', + tool: 'bun', + command, + manifestFiles: projectManifestFiles(opts.plan, opts.graph, clientProjects) + }, { name: 'dependencies', + tier: 'dependencies', tool: 'bun', command, manifestFiles: projectManifestFiles(opts.plan, opts.graph, dependencyProjects) }, { name: 'service', + tier: 'service', tool: 'bun', command, manifestFiles: projectManifestFiles(opts.plan, opts.graph, serviceProjects) } - ].filter(layer => layer.manifestFiles.length > 0); + ] satisfies GeneratedBuildInstallLayer[]).filter(layer => layer.manifestFiles.length > 0); +}; + +let createSourceLayers = (opts: { + plan: GeneratedBuildPlan; + graph: ReturnType; + projectsByTier: { + shared: Set; + clients: Set; + dependencies: Set; + service: Set; + }; + extraPaths: GeneratedBuildPath[]; +}): GeneratedBuildSourceLayer[] => { + let projectPaths = (projects: Set) => + [...projects] + .sort((a, b) => a.localeCompare(b)) + .map(project => projectRootPath(opts.plan, getNxProjectRoot(opts.graph, project))); + + let layers: GeneratedBuildSourceLayer[] = [ + { + name: 'shared', + tier: 'shared', + projects: [...opts.projectsByTier.shared].sort((a, b) => a.localeCompare(b)), + inputPaths: projectPaths(opts.projectsByTier.shared), + commands: [] + }, + { + name: 'clients', + tier: 'clients', + projects: [...opts.projectsByTier.clients].sort((a, b) => a.localeCompare(b)), + inputPaths: projectPaths(opts.projectsByTier.clients), + commands: [] + }, + { + name: 'dependencies', + tier: 'dependencies', + projects: [...opts.projectsByTier.dependencies].sort((a, b) => a.localeCompare(b)), + inputPaths: projectPaths(opts.projectsByTier.dependencies), + commands: [] + }, + { + name: 'service', + tier: 'service', + projects: [...opts.projectsByTier.service].sort((a, b) => a.localeCompare(b)), + inputPaths: [...projectPaths(opts.projectsByTier.service), ...opts.extraPaths], + commands: [] + } + ]; + + return layers + .map(layer => ({ ...layer, commands: sourceLayerWarmCommands(opts.graph, layer) })) + .filter(layer => layer.inputPaths.length > 0); +}; + +let sourceLayerWarmCommands = ( + graph: ReturnType, + layer: GeneratedBuildSourceLayer +): string[] => { + if (layer.tier === 'clients' || layer.tier === 'service') return []; + + let buildableProjects = layer.projects.filter(project => + nxProjectHasTarget(graph, project, 'build') + ); + if (buildableProjects.length === 0) return []; + + return [ + renderNxRunManyCommand({ + target: 'build', + projects: buildableProjects.sort((a, b) => a.localeCompare(b)) + }) + ]; +}; + +let projectsForManifestLayer = ( + graph: ReturnType, + projects: Iterable, + layer: GeneratedBuildInstallLayer | undefined +): Set => { + let manifestPaths = new Set( + (layer?.manifestFiles ?? []).map(file => file.relativeToContext) + ); + let matched = new Set(); + + for (let project of projects) { + let manifestPath = `${getNxProjectRoot(graph, project)}/package.json`; + if (manifestPaths.has(manifestPath)) matched.add(project); + } + + return matched; }; export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { let installLinker = plan.service.config.build?.install?.linker ?? 'hoisted'; let systemPackages = plan.service.config.build?.install?.system_packages ?? ['ca-certificates']; let automationLines = plan.automations.map(automation => renderAutomationCommand(automation)); + let sourceLayerLines = plan.sourceLayers.flatMap(layer => [ + `COPY _inputs/${layer.name}/ ./`, + ...layer.commands.map(renderNxRun) + ]); let artifactLines = renderArtifactLines(plan); let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); @@ -279,7 +430,7 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { '', 'FROM deps AS build', 'WORKDIR /app', - 'COPY _inputs/ ./', + ...sourceLayerLines, ...automationLines.map(renderNxRun), renderNxRun(`bun x nx run ${plan.project}:${plan.target}`), '', @@ -361,10 +512,6 @@ export let nodeBuildBuilder: BuildBuilder = { }); } - let inputPaths = [...includedProjects] - .sort((a, b) => a.localeCompare(b)) - .map(project => projectRootPath(plan, getNxProjectRoot(graph, project))); - let extraPaths = resolveBuildPaths({ service, registry, @@ -373,10 +520,6 @@ export let nodeBuildBuilder: BuildBuilder = { label: 'extra path' }); - for (let extraPath of extraPaths) { - inputPaths.push(extraPath); - } - plan.project = build.project; plan.target = build.target; plan.installLayers = createNodeInstallLayers({ @@ -387,10 +530,61 @@ export let nodeBuildBuilder: BuildBuilder = { serviceProjects, installLinker: build.install?.linker ?? 'hoisted' }); + let serviceBuildProjects = collectServiceBuildProjects(registry); + let installLayerByName = new Map(plan.installLayers.map(layer => [layer.name, layer])); + let projectsByTier = { + shared: projectsForManifestLayer(graph, includedProjects, installLayerByName.get('base')), + clients: projectsForManifestLayer(graph, includedProjects, installLayerByName.get('clients')), + dependencies: projectsForManifestLayer( + graph, + includedProjects, + installLayerByName.get('dependencies') + ), + service: projectsForManifestLayer(graph, includedProjects, installLayerByName.get('service')) + }; + for (let project of [...projectsByTier.shared]) { + if (!serviceBuildProjects.has(project) && !isClientProject(graph, project)) continue; + projectsByTier.shared.delete(project); + if (isClientProject(graph, project)) { + projectsByTier.clients.add(project); + } else if (serviceProjects.has(project)) { + projectsByTier.service.add(project); + } else { + projectsByTier.dependencies.add(project); + } + } + for (let project of [...projectsByTier.clients]) { + if (isClientProject(graph, project)) continue; + projectsByTier.clients.delete(project); + if (serviceProjects.has(project)) { + projectsByTier.service.add(project); + } else { + projectsByTier.dependencies.add(project); + } + } + for (let project of includedProjects) { + if ( + projectsByTier.shared.has(project) || + projectsByTier.clients.has(project) || + projectsByTier.dependencies.has(project) || + projectsByTier.service.has(project) + ) { + continue; + } + projectsByTier.service.add(project); + } + plan.sourceLayers = createSourceLayers({ + plan, + graph, + projectsByTier, + extraPaths + }); plan.manifestFiles = plan.installLayers .flatMap(layer => layer.manifestFiles) .sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); - plan.inputPaths = inputPaths.sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); + plan.inputPaths = plan.sourceLayers + .flatMap(layer => layer.inputPaths) + .sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); plan.automations = resolvedAutomations; plan.codegenSteps = []; plan.prebuildSteps = []; diff --git a/src/tooling/control/src/builders/nx.ts b/src/tooling/control/src/builders/nx.ts index b41ca8fe6..1bc41089b 100644 --- a/src/tooling/control/src/builders/nx.ts +++ b/src/tooling/control/src/builders/nx.ts @@ -15,6 +15,7 @@ type NxGraphProjectNode = { root: string; name?: string; metadata?: Record; + targets?: Record; }; }; @@ -75,6 +76,12 @@ export let getNxProjectRoot = (graph: NxProjectGraph, project: string): string = return normalize(node.data.root); }; +export let nxProjectHasTarget = ( + graph: NxProjectGraph, + project: string, + target: string +): boolean => !!graph.nodes[project]?.data.targets?.[target]; + let internalDependenciesOf = (graph: NxProjectGraph, project: string): string[] => (graph.dependencies[project] ?? []) .map(dep => dep.target) diff --git a/src/tooling/control/src/builders/rust.ts b/src/tooling/control/src/builders/rust.ts index b9becf9b3..bb1535a19 100644 --- a/src/tooling/control/src/builders/rust.ts +++ b/src/tooling/control/src/builders/rust.ts @@ -26,7 +26,7 @@ let defaultRustRuntime = defaultRuntime(undefined, { }); let renderCargoCacheMounts = () => - '--mount=type=cache,target=/usr/local/cargo/registry --mount=type=cache,target=/usr/local/cargo/git'; + '--mount=type=cache,id=control-cargo-registry,target=/usr/local/cargo/registry,sharing=locked --mount=type=cache,id=control-cargo-git,target=/usr/local/cargo/git,sharing=locked --mount=type=cache,id=control-cargo-target,target=/app/target,sharing=locked'; let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { let builderImage = plan.service.config.build?.builder_image?.image ?? 'rust:1.91-slim'; diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index 913867b6b..c26eb9a83 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -10,6 +10,7 @@ import type { DockerBuildConfig } from './builds'; export type ComposeOptions = { postgresInitScripts?: Record; buildContexts?: Record>; + cacheRoot?: string; }; let networkConfig = (alias: string) => ({ @@ -45,9 +46,8 @@ let envContext = (graph: ResolvedGraph) => ({ let resolveControlServiceEnv = (dep: ResolvedDep, graph: ResolvedGraph): Record => { if (!dep.children) return {}; - let ctx = envContext(graph); - let childEnv = interpolateEnv(dep.children.config.env ?? {}, ctx); - let depEnv = dep.config.env ? interpolateEnv(dep.config.env, ctx) : {}; + let childEnv = interpolateEnv(dep.children.config.env ?? {}, envContext(dep.children)); + let depEnv = dep.config.env ? interpolateEnv(dep.config.env, envContext(graph)) : {}; return mergeEnv(childEnv, depEnv); }; @@ -91,6 +91,28 @@ let applyBuildContext = ( return { ...build, ...override }; }; +let buildCacheDir = (opts: { cacheRoot?: string; name: string }) => + opts.cacheRoot ? resolve(opts.cacheRoot, `${opts.name}`) : undefined; + +let composeBuild = ( + name: string, + build: DockerBuildConfig, + composeOptions?: ComposeOptions +) => { + let cacheDir = buildCacheDir({ cacheRoot: composeOptions?.cacheRoot, name }); + return { + ...build, + ...(cacheDir + ? { + cache_from: [`type=local,src=${cacheDir}`], + cache_to: [`type=local,dest=${cacheDir},mode=max`] + } + : {}) + }; +}; + +let composeImage = (name: string) => `control/${name}:local`; + let buildControlService = ( dep: ResolvedDep, graph: ResolvedGraph, @@ -105,7 +127,8 @@ let buildControlService = ( let dependsOn = resolveControlDependsOn(dep, graph); return { - build, + image: composeImage(child.name), + build: composeBuild(child.name, build, composeOptions), container_name: containerName, restart: 'unless-stopped', environment: resolveControlServiceEnv(dep, graph), @@ -212,19 +235,28 @@ let mockService = (dep: ResolvedDep, containerName: string) => { }; }; -let inlineService = (dep: ResolvedDep, graph: ResolvedGraph, containerName: string) => { +let inlineService = ( + dep: ResolvedDep, + graph: ResolvedGraph, + containerName: string, + composeOptions?: ComposeOptions +) => { let inline = typeof dep.config.inline === 'object' ? dep.config.inline : undefined; if (!inline) throw new Error(`Inline dependency ${dep.name} is missing [deps.inline] config`); let build = inline.build - ? { + ? applyBuildContext( + graph.name, + { context: inline.build.context === 'oss' ? graph.ossRoot : resolve(dep.sourceDir, inline.build.context), dockerfile: inline.build.dockerfile.startsWith('./') ? inline.build.dockerfile : `./${inline.build.dockerfile.replace(/^\.\//, '')}`, target: inline.build.target ?? 'workspace' - } + }, + composeOptions + ) : undefined; let health = inline.health?.cmd @@ -237,7 +269,7 @@ let inlineService = (dep: ResolvedDep, graph: ResolvedGraph, containerName: stri volumes: {}, service: { ...(inline.image ? { image: inline.image } : {}), - ...(build ? { build } : {}), + ...(build ? { build: composeBuild(`${graph.name}-${dep.name}`, build, composeOptions) } : {}), container_name: containerName, restart: 'unless-stopped', ...(dep.config.env @@ -269,7 +301,7 @@ let buildLeafDep = ( if (dep.config.preset === 'nats') return presetNats(dep, containerName); } if (dep.kind === 'mock') return mockService(dep, containerName); - if (dep.kind === 'inline') return inlineService(dep, graph, containerName); + if (dep.kind === 'inline') return inlineService(dep, graph, containerName, composeOptions); throw new Error(`Unhandled dependency ${dep.name}`); }; @@ -376,7 +408,8 @@ export let generateComposeServices = ( : containerNameFor(projectName, 'service'); services[runnerKey] = { - build, + image: composeImage(graph.name), + build: composeBuild(graph.name, build, composeOptions), container_name: runnerContainer, restart: 'unless-stopped', command: ['sh', '-c', 'sleep infinity'], diff --git a/src/tooling/control/src/run/build.ts b/src/tooling/control/src/run/build.ts index 8b2ca0634..1e90b1133 100644 --- a/src/tooling/control/src/run/build.ts +++ b/src/tooling/control/src/run/build.ts @@ -1,4 +1,5 @@ -import { resolve } from 'path'; +import { existsSync, mkdirSync } from 'fs'; +import { dirname, resolve } from 'path'; import { createBuildPlan, renderDockerfileForPlan } from '../builders'; import { materializeBuildContext } from '../builders/context'; import { collectServiceRunnerBuilds } from '../compose/builds'; @@ -9,7 +10,7 @@ import { getRegistry } from '../registry'; import { planExecutionOrder } from '../graph/planner'; import { createLogger } from '../log'; import { formatBatchSummary, formatRunPlan, formatServiceHeader } from '../log/formatRunPlan'; -import { DockerError } from '../errors'; +import { ControlError, DockerError } from '../errors'; import type { BatchResult, BatchServiceResult, BuildOptions, ControlService } from '../types'; import { runShell } from './shell'; @@ -22,6 +23,11 @@ type BuildContext = { let imageTag = (opts: { tagPrefix: string; rootName: string; specName: string }) => `${opts.tagPrefix}/${opts.rootName}-${opts.specName}:local`; +let buildCacheDir = (opts: { controlRoot: string; rootName: string; specName: string }) => + resolve(opts.controlRoot, '.control', 'cache', 'buildkit', `${opts.rootName}-${opts.specName}`); + +let shouldUseBuildCacheExport = () => process.env.CONTROL_BUILDKIT_CACHE === '1'; + let runBuildForService = async ( opts: BuildOptions & { service: ControlService; context?: BuildContext } ) => { @@ -60,9 +66,8 @@ let runBuildForService = async ( if (targetService?.config.build?.mode && targetService.config.build.mode !== 'custom') { let plan = createBuildPlan(targetService, registry); if (!plan) { - throw new DockerError({ - service: graph.name, - phase: 'build', + throw new ControlError({ + code: 'build_plan_unavailable', message: `Unable to create build plan for ${targetService.name}` }); } @@ -88,6 +93,18 @@ let runBuildForService = async ( '-t', tag ]; + if (shouldUseBuildCacheExport()) { + let cacheDir = buildCacheDir({ + controlRoot: registry.controlRoot, + rootName: graph.name, + specName: spec.name + }); + mkdirSync(dirname(cacheDir), { recursive: true }); + if (existsSync(cacheDir)) { + cmd.push('--cache-from', `type=local,src=${cacheDir}`); + } + cmd.push('--cache-to', `type=local,dest=${cacheDir},mode=max`); + } if (process.env.SENTRY_AUTH_TOKEN) { cmd.push('--build-arg', `SENTRY_AUTH_TOKEN=${process.env.SENTRY_AUTH_TOKEN}`); diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index fefe30597..8851783a8 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -1,5 +1,5 @@ import { mkdirSync, writeFileSync, chmodSync } from 'fs'; -import { join, relative } from 'path'; +import { join, relative, resolve } from 'path'; import { generateCompose, collectContainerNames } from '../compose/generator'; import { createBuildPlan, renderDockerfileForPlan } from '../builders'; import { materializeBuildContext } from '../builders/context'; @@ -182,7 +182,18 @@ export let runControl = async ( let composeFile = join(runDir, 'compose.yml'); let envFile = join(runDir, '.env.control'); - writeFileSync(composeFile, generateCompose(graph, projectName, { postgresInitScripts, buildContexts })); + let cacheRoot = process.env.CONTROL_BUILDKIT_CACHE === '1' + ? resolve(opts.session?.repoRoot ?? registry.controlRoot, '.control', 'cache', 'buildkit') + : undefined; + + writeFileSync( + composeFile, + generateCompose(graph, projectName, { + postgresInitScripts, + buildContexts, + cacheRoot + }) + ); let envLines = Object.entries(graph.env).map(([k, v]) => `${k}=${JSON.stringify(v).slice(1, -1)}`); writeFileSync(envFile, envLines.join('\n') + '\n'); diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts index 97d0378d0..2b0b8a0f8 100644 --- a/src/tooling/control/src/types.ts +++ b/src/tooling/control/src/types.ts @@ -272,6 +272,7 @@ export type GeneratedBuildAutomation = { export type GeneratedBuildInstallLayer = { name: string; + tier?: 'shared' | 'clients' | 'dependencies' | 'service'; tool: 'bun' | 'go' | 'cargo' | 'custom'; command: string; cwd?: string; @@ -280,6 +281,14 @@ export type GeneratedBuildInstallLayer = { manifestFiles: GeneratedBuildPath[]; }; +export type GeneratedBuildSourceLayer = { + name: string; + tier: 'shared' | 'clients' | 'dependencies' | 'service'; + inputPaths: GeneratedBuildPath[]; + projects: string[]; + commands: string[]; +}; + export type GeneratedBuildArtifact = { from: string; to: string; @@ -298,6 +307,7 @@ export type GeneratedBuildPlan = { manifestFiles: GeneratedBuildPath[]; inputPaths: GeneratedBuildPath[]; installLayers: GeneratedBuildInstallLayer[]; + sourceLayers: GeneratedBuildSourceLayer[]; automations: GeneratedBuildAutomation[]; codegenSteps: GeneratedBuildStep[]; prebuildSteps: GeneratedBuildStep[]; From d767dc1d8063795b7b74d07dedc456538329a0d7 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 15:39:12 +0200 Subject: [PATCH 21/69] Fix docker process cleanup and tests --- src/systems/slates/apps/hub/Dockerfile | 1 + src/systems/slates/apps/hub/control.toml | 1 + src/systems/slates/apps/registry/Dockerfile | 1 + src/systems/slates/apps/registry/control.toml | 1 + .../reconciler/reconcileSkillProviderLink.ts | 9 +- src/tooling/control/src/cli.ts | 3 + src/tooling/control/src/compose/generator.ts | 5 +- src/tooling/control/src/graph/databases.ts | 2 +- src/tooling/control/src/run/lifecycle.ts | 160 ++++++++++++++++++ src/tooling/control/src/run/runner.ts | 23 ++- src/tooling/control/src/run/shell.ts | 35 ++-- 11 files changed, 214 insertions(+), 27 deletions(-) create mode 100644 src/tooling/control/src/run/lifecycle.ts diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index bc2e6b4b6..85e0ba663 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -28,6 +28,7 @@ RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk COPY --from=build /app/src/systems/slates/apps/hub/dist /app/dist COPY --from=build /app/src/systems/slates/apps/hub/dist/admin /app/dist/admin COPY --from=build /app/src/systems/slates/apps/hub/prisma /app/prisma +COPY --from=build /app/src/systems/slates/apps/hub/prisma.config.ts /app/prisma.config.ts COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52045 diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml index b80c9f83f..9c7822bed 100644 --- a/src/systems/slates/apps/hub/control.toml +++ b/src/systems/slates/apps/hub/control.toml @@ -31,6 +31,7 @@ copy = [ { from = "dist", to = "/app/dist" }, { from = "dist/admin", to = "/app/dist/admin" }, { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, { from = "/app/node_modules", to = "/app/node_modules" } ] diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 24dad60c5..15fcc9b38 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -29,6 +29,7 @@ RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk COPY --from=build /app/src/systems/slates/apps/registry/dist /app/dist COPY --from=build /app/src/systems/slates/apps/registry/dist/admin /app/dist/admin COPY --from=build /app/src/systems/slates/apps/registry/prisma /app/prisma +COPY --from=build /app/src/systems/slates/apps/registry/prisma.config.ts /app/prisma.config.ts COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52040 diff --git a/src/systems/slates/apps/registry/control.toml b/src/systems/slates/apps/registry/control.toml index 472232a8e..a83fe9aee 100644 --- a/src/systems/slates/apps/registry/control.toml +++ b/src/systems/slates/apps/registry/control.toml @@ -32,6 +32,7 @@ copy = [ { from = "dist", to = "/app/dist" }, { from = "dist/admin", to = "/app/dist/admin" }, { from = "prisma", to = "/app/prisma" }, + { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, { from = "/app/node_modules", to = "/app/node_modules" } ] diff --git a/src/systems/subspace/modules/skills/src/queues/reconciler/reconcileSkillProviderLink.ts b/src/systems/subspace/modules/skills/src/queues/reconciler/reconcileSkillProviderLink.ts index 8b3b13a30..c947d6c7a 100644 --- a/src/systems/subspace/modules/skills/src/queues/reconciler/reconcileSkillProviderLink.ts +++ b/src/systems/subspace/modules/skills/src/queues/reconciler/reconcileSkillProviderLink.ts @@ -59,13 +59,14 @@ export let reconcileSkillProviderLinks = async (d: { skillId: string }) => { }); } - for (let providerOid of skill.status === 'active' ? providerOidsToCreate : []) { - await db.skillProviderLink.create({ - data: { + if (skill.status === 'active' && providerOidsToCreate.length) { + await db.skillProviderLink.createMany({ + data: providerOidsToCreate.map(providerOid => ({ ...getId('skillProviderLink'), skillOid: skill.oid, providerOid - } + })), + skipDuplicates: true }); } }); diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index 005d35577..23c61e5fe 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -20,6 +20,9 @@ import { resolveControlCwd } from './entrypoint'; import { withWorkspaceSession } from './staging/session'; import type { WorkspaceSession } from './types'; import { runBootstrap } from './bootstrap'; +import { installShutdownHandlers } from './run/lifecycle'; + +installShutdownHandlers(); type StagedCliOpts = { entrypoint?: string; diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index c26eb9a83..8a8735ca8 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -46,8 +46,9 @@ let envContext = (graph: ResolvedGraph) => ({ let resolveControlServiceEnv = (dep: ResolvedDep, graph: ResolvedGraph): Record => { if (!dep.children) return {}; - let childEnv = interpolateEnv(dep.children.config.env ?? {}, envContext(dep.children)); - let depEnv = dep.config.env ? interpolateEnv(dep.config.env, envContext(graph)) : {}; + let ctx = envContext(graph); + let childEnv = interpolateEnv(dep.children.config.env ?? {}, ctx); + let depEnv = dep.config.env ? interpolateEnv(dep.config.env, ctx) : {}; return mergeEnv(childEnv, depEnv); }; diff --git a/src/tooling/control/src/graph/databases.ts b/src/tooling/control/src/graph/databases.ts index 09677014a..b1267aa3a 100644 --- a/src/tooling/control/src/graph/databases.ts +++ b/src/tooling/control/src/graph/databases.ts @@ -11,7 +11,7 @@ let collectFromGraph = (graph: ResolvedGraph): ControlDatabase[] => { for (let dep of graph.deps) { if (dep.kind === 'control' && dep.children && (dep.config.scope ?? 'service') === 'service') { - databases.push(...(dep.children.config.databases ?? [])); + databases.push(...collectFromGraph(dep.children)); } } diff --git a/src/tooling/control/src/run/lifecycle.ts b/src/tooling/control/src/run/lifecycle.ts new file mode 100644 index 000000000..381021482 --- /dev/null +++ b/src/tooling/control/src/run/lifecycle.ts @@ -0,0 +1,160 @@ +import { existsSync } from 'fs'; + +type ActiveProcess = { + pid: number; + command: string; + kill: (signal?: NodeJS.Signals) => void; +}; + +type ComposeStack = { + projectName: string; + composeFile: string; + cwd?: string; +}; + +let activeProcesses = new Set(); +let composeStacks = new Map(); +let handlersInstalled = false; +let shuttingDown = false; + +let stackKey = (stack: ComposeStack) => `${stack.projectName}\0${stack.composeFile}`; + +let runQuiet = async (cmd: string[], opts?: { cwd?: string }) => { + let proc = Bun.spawn(cmd, { + cwd: opts?.cwd, + stdout: 'ignore', + stderr: 'ignore' + }); + await proc.exited.catch(() => {}); +}; + +let runQuietSync = (cmd: string[], opts?: { cwd?: string }) => { + Bun.spawnSync(cmd, { + cwd: opts?.cwd, + stdout: 'ignore', + stderr: 'ignore' + }); +}; + +let killProcessGroup = (proc: ActiveProcess, signal: NodeJS.Signals) => { + try { + process.kill(-proc.pid, signal); + return; + } catch {} + + try { + proc.kill(signal); + } catch {} +}; + +export let registerProcess = (proc: ActiveProcess) => { + activeProcesses.add(proc); + return () => activeProcesses.delete(proc); +}; + +export let registerComposeStack = (stack: ComposeStack) => { + composeStacks.set(stackKey(stack), stack); + return () => composeStacks.delete(stackKey(stack)); +}; + +export let cleanupComposeStack = async (stack: ComposeStack) => { + if (!existsSync(stack.composeFile)) return; + await runQuiet( + [ + 'docker', + 'compose', + '-p', + stack.projectName, + '-f', + stack.composeFile, + 'down', + '-v', + '--remove-orphans' + ], + { cwd: stack.cwd } + ); +}; + +let cleanupComposeStackSync = (stack: ComposeStack) => { + if (!existsSync(stack.composeFile)) return; + runQuietSync( + [ + 'docker', + 'compose', + '-p', + stack.projectName, + '-f', + stack.composeFile, + 'down', + '-v', + '--remove-orphans' + ], + { cwd: stack.cwd } + ); +}; + +export let unregisterComposeStack = (stack: ComposeStack) => { + composeStacks.delete(stackKey(stack)); +}; + +let cleanupOnExitSync = () => { + if (process.env.CONTROL_SKIP_EXIT_CLEANUP === '1') return; + + for (let proc of [...activeProcesses]) { + killProcessGroup(proc, 'SIGTERM'); + } + + for (let stack of [...composeStacks.values()]) { + cleanupComposeStackSync(stack); + } + + for (let proc of [...activeProcesses]) { + killProcessGroup(proc, 'SIGKILL'); + } +}; + +export let shutdownControl = async (signal: NodeJS.Signals | 'error', exitCode: number) => { + if (shuttingDown) return; + shuttingDown = true; + + for (let proc of [...activeProcesses]) { + killProcessGroup(proc, signal === 'error' ? 'SIGTERM' : signal); + } + + await Promise.race([ + Promise.all([...composeStacks.values()].map(stack => cleanupComposeStack(stack))), + Bun.sleep(10_000) + ]).catch(() => {}); + + await Bun.sleep(2_000); + + for (let proc of [...activeProcesses]) { + killProcessGroup(proc, 'SIGKILL'); + } + + process.exit(exitCode); +}; + +export let installShutdownHandlers = () => { + if (handlersInstalled) return; + handlersInstalled = true; + + process.on('SIGINT', () => { + void shutdownControl('SIGINT', 130); + }); + process.on('SIGTERM', () => { + void shutdownControl('SIGTERM', 143); + }); + process.on('SIGHUP', () => { + void shutdownControl('SIGHUP', 129); + }); + process.on('uncaughtException', err => { + console.error(err); + void shutdownControl('error', 1); + }); + process.on('unhandledRejection', err => { + console.error(err); + void shutdownControl('error', 1); + }); + process.on('exit', cleanupOnExitSync); +}; diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index 8851783a8..ca5bedc6c 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -13,6 +13,7 @@ import { planExecutionOrder } from '../graph/planner'; import { createLogger } from '../log'; import { formatBatchSummary, formatRunPlan, formatServiceHeader } from '../log/formatRunPlan'; import { DockerError, HealthTimeoutError, NoTestError } from '../errors'; +import { cleanupComposeStack, registerComposeStack, unregisterComposeStack } from './lifecycle'; import type { BatchResult, BatchServiceResult, @@ -209,6 +210,8 @@ export let runControl = async ( let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; let runnerContainer = isSidecar ? `${projectName}-test` : `${projectName}-service`; let failedPhase: RunPhase = 'build'; + let composeStack = { projectName, composeFile, cwd: runDir }; + if (!opts.keep) registerComposeStack(composeStack); try { failedPhase = 'build'; @@ -216,7 +219,15 @@ export let runControl = async ( logger.debug(`Command: docker compose -p ${projectName} up -d --build`); await runShell( ['docker', 'compose', '-p', projectName, '-f', composeFile, '--env-file', envFile, 'up', '-d', '--build'], - { cwd: runDir, phase: 'build', service: serviceName, composeFile, keep: opts.keep, verbose: opts.verbose } + { + cwd: runDir, + env: { COMPOSE_PARALLEL_LIMIT: process.env.COMPOSE_PARALLEL_LIMIT ?? '1' }, + phase: 'build', + service: serviceName, + composeFile, + keep: opts.keep, + verbose: opts.verbose + } ); failedPhase = 'health'; @@ -276,14 +287,8 @@ export let runControl = async ( } finally { if (!opts.keep) { logger.debug('Tearing down stack...'); - await runShell(['docker', 'compose', '-p', projectName, '-f', composeFile, 'down', '-v'], { - cwd: runDir, - phase: 'teardown', - service: serviceName, - composeFile, - keep: opts.keep, - verbose: opts.verbose - }).catch(() => {}); + await cleanupComposeStack(composeStack).catch(() => {}); + unregisterComposeStack(composeStack); } } }; diff --git a/src/tooling/control/src/run/shell.ts b/src/tooling/control/src/run/shell.ts index 52b17ce0a..aeee15dad 100644 --- a/src/tooling/control/src/run/shell.ts +++ b/src/tooling/control/src/run/shell.ts @@ -1,5 +1,6 @@ import { DockerError } from '../errors'; import type { RunPhase } from '../types'; +import { registerProcess } from './lifecycle'; export type ShellOpts = { cwd?: string; @@ -16,17 +17,29 @@ export let runShell = async (cmd: string[], opts: ShellOpts) => { cwd: opts.cwd, env: { ...process.env, ...opts.env }, stdout: 'inherit', - stderr: 'inherit' + stderr: 'inherit', + stdin: 'ignore', + detached: process.platform !== 'win32' }); - let code = await proc.exited; - if (code !== 0) { - throw new DockerError({ - phase: opts.phase, - command: cmd.join(' '), - exitCode: code, - service: opts.service, - composeFile: opts.composeFile, - keep: opts.keep - }); + let unregister = registerProcess({ + pid: proc.pid, + command: cmd.join(' '), + kill: signal => proc.kill(signal) + }); + + try { + let code = await proc.exited; + if (code !== 0) { + throw new DockerError({ + phase: opts.phase, + command: cmd.join(' '), + exitCode: code, + service: opts.service, + composeFile: opts.composeFile, + keep: opts.keep + }); + } + } finally { + unregister(); } }; From 41d1873819c89781d0371403c3c116fc8807cb9a Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 16:29:14 +0200 Subject: [PATCH 22/69] Build fixes --- nx.json | 7 + src/systems/_clients/ares/package.json | 14 ++ src/systems/_clients/cargo/package.json | 15 +++ src/systems/_clients/forge/package.json | 14 ++ .../_clients/function-bay/package.json | 14 ++ .../_clients/object-storage/package.json | 9 ++ .../_clients/origin-client/package.json | 14 ++ src/systems/_clients/relay/package.json | 14 ++ src/systems/_clients/shuttle/package.json | 14 ++ src/systems/_clients/signal/package.json | 14 ++ src/systems/_clients/slates/package.json | 15 +++ src/systems/_clients/subspace/package.json | 16 +++ src/systems/_clients/synthesis/package.json | 14 ++ src/systems/_clients/voyager/package.json | 14 ++ src/systems/ares/service/Dockerfile | 1 + src/systems/cargo/service/Dockerfile | 2 + src/systems/forge/service/Dockerfile | 1 + src/systems/function-bay/service/Dockerfile | 1 + src/systems/origin/apps/service/Dockerfile | 1 + src/systems/relay/service/Dockerfile | 1 + src/systems/shuttle/service/Dockerfile | 1 + .../shuttle/service/src/lib/function/call.ts | 7 +- .../service/src/services/serverDeployment.ts | 26 +++- src/systems/signal/service/Dockerfile | 1 + src/systems/slates/apps/hub/Dockerfile | 1 + src/systems/slates/apps/registry/Dockerfile | 2 + .../subspace/apps/controller/Dockerfile | 2 + src/systems/subspace/apps/public/Dockerfile | 3 + src/systems/subspace/apps/worker/Dockerfile | 2 + src/systems/voyager/service/Dockerfile | 1 + src/tooling/control/src/bootstrap.ts | 9 ++ src/tooling/control/src/builders/node.ts | 123 +++++++++++++++++- 32 files changed, 365 insertions(+), 8 deletions(-) diff --git a/nx.json b/nx.json index 1f7d2c3b9..d0e804ad1 100644 --- a/nx.json +++ b/nx.json @@ -11,6 +11,13 @@ "!{projectRoot}/coverage/**", "!{projectRoot}/.control/**" ], + "clientProduction": [ + "{projectRoot}/**/*", + "!{projectRoot}/dist/**", + "!{projectRoot}/coverage/**", + "!{projectRoot}/.control/**", + "{workspaceRoot}/bun.lock" + ], "sharedGlobals": [ "{workspaceRoot}/package.json", "{workspaceRoot}/bun.lock" diff --git a/src/systems/_clients/ares/package.json b/src/systems/_clients/ares/package.json index 02a779494..02d941834 100644 --- a/src/systems/_clients/ares/package.json +++ b/src/systems/_clients/ares/package.json @@ -29,6 +29,20 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/ares/service/src/apis/**", + "{workspaceRoot}/src/systems/ares/service/src/controllers/**", + "{workspaceRoot}/src/systems/ares/service/src/presenters/**", + "{workspaceRoot}/src/systems/ares/service/prisma/**", + "{workspaceRoot}/src/systems/ares/service/prisma.config.ts" + ] + } + } + }, "dependencies": { "@mtsrc/rpc-client": "1.0.0" }, diff --git a/src/systems/_clients/cargo/package.json b/src/systems/_clients/cargo/package.json index f7e0bef96..652c85c2b 100644 --- a/src/systems/_clients/cargo/package.json +++ b/src/systems/_clients/cargo/package.json @@ -29,6 +29,21 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/cargo/service/src/apis/**", + "{workspaceRoot}/src/systems/cargo/service/src/controllers/**", + "{workspaceRoot}/src/systems/cargo/service/src/presenters/**", + "{workspaceRoot}/src/systems/cargo/service/prisma/**", + "{workspaceRoot}/src/systems/cargo/service/prisma.config.ts", + "{workspaceRoot}/src/systems/cargo/db/**" + ] + } + } + }, "dependencies": { "@types/bun": "^1.3.7", "@mtsrc/rpc-client": "1.0.0" diff --git a/src/systems/_clients/forge/package.json b/src/systems/_clients/forge/package.json index f503f54ad..d71ebdacc 100644 --- a/src/systems/_clients/forge/package.json +++ b/src/systems/_clients/forge/package.json @@ -29,6 +29,20 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/forge/service/src/apis/**", + "{workspaceRoot}/src/systems/forge/service/src/controllers/**", + "{workspaceRoot}/src/systems/forge/service/src/presenters/**", + "{workspaceRoot}/src/systems/forge/service/prisma/**", + "{workspaceRoot}/src/systems/forge/service/prisma.config.ts" + ] + } + } + }, "dependencies": { "@metorial/util-websocket": "^1.0.0", "@types/bun": "^1.3.7", diff --git a/src/systems/_clients/function-bay/package.json b/src/systems/_clients/function-bay/package.json index c340e4e98..de00c8053 100644 --- a/src/systems/_clients/function-bay/package.json +++ b/src/systems/_clients/function-bay/package.json @@ -29,6 +29,20 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/function-bay/service/src/apis/**", + "{workspaceRoot}/src/systems/function-bay/service/src/controllers/**", + "{workspaceRoot}/src/systems/function-bay/service/src/presenters/**", + "{workspaceRoot}/src/systems/function-bay/service/prisma/**", + "{workspaceRoot}/src/systems/function-bay/service/prisma.config.ts" + ] + } + } + }, "dependencies": { "@mtsrc/rpc-client": "1.0.0" }, diff --git a/src/systems/_clients/object-storage/package.json b/src/systems/_clients/object-storage/package.json index 0952c4ca8..b6b8b934f 100644 --- a/src/systems/_clients/object-storage/package.json +++ b/src/systems/_clients/object-storage/package.json @@ -29,6 +29,15 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction" + ] + } + } + }, "dependencies": { "axios": "^1.6.0" }, diff --git a/src/systems/_clients/origin-client/package.json b/src/systems/_clients/origin-client/package.json index 849ad5c7b..1111fa6b5 100644 --- a/src/systems/_clients/origin-client/package.json +++ b/src/systems/_clients/origin-client/package.json @@ -31,6 +31,20 @@ "build": "rm -rf ./dist && microbundle && dts-bundle-generator --config dts-bundle-generator.config.json --external-imports @mtsrc/rpc-client @mtsrc/rpc-server @mtsrc/validation", "prepublish": "bun run build" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/origin/apps/service/src/apis/**", + "{workspaceRoot}/src/systems/origin/apps/service/src/controllers/**", + "{workspaceRoot}/src/systems/origin/apps/service/src/presenters/**", + "{workspaceRoot}/src/systems/origin/apps/service/prisma/**", + "{workspaceRoot}/src/systems/origin/apps/service/prisma.config.ts" + ] + } + } + }, "dependencies": { "@mtsrc/rpc-client": "1.0.0" }, diff --git a/src/systems/_clients/relay/package.json b/src/systems/_clients/relay/package.json index dc9aac8dd..8ca72d35f 100644 --- a/src/systems/_clients/relay/package.json +++ b/src/systems/_clients/relay/package.json @@ -29,6 +29,20 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/relay/service/src/apis/**", + "{workspaceRoot}/src/systems/relay/service/src/controllers/**", + "{workspaceRoot}/src/systems/relay/service/src/presenters/**", + "{workspaceRoot}/src/systems/relay/service/prisma/**", + "{workspaceRoot}/src/systems/relay/service/prisma.config.ts" + ] + } + } + }, "dependencies": { "@react-email/components": "^1.0.7", "react": "^19.2.4", diff --git a/src/systems/_clients/shuttle/package.json b/src/systems/_clients/shuttle/package.json index aa5f64fec..307990d8c 100644 --- a/src/systems/_clients/shuttle/package.json +++ b/src/systems/_clients/shuttle/package.json @@ -29,6 +29,20 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/shuttle/service/src/apis/**", + "{workspaceRoot}/src/systems/shuttle/service/src/controllers/**", + "{workspaceRoot}/src/systems/shuttle/service/src/presenters/**", + "{workspaceRoot}/src/systems/shuttle/service/prisma/**", + "{workspaceRoot}/src/systems/shuttle/service/prisma.config.ts" + ] + } + } + }, "dependencies": { "@metorial/util-websocket": "^1.0.0", "@types/bun": "^1.3.7", diff --git a/src/systems/_clients/signal/package.json b/src/systems/_clients/signal/package.json index 9e708121e..47e4e8d25 100644 --- a/src/systems/_clients/signal/package.json +++ b/src/systems/_clients/signal/package.json @@ -29,6 +29,20 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/signal/service/src/apis/**", + "{workspaceRoot}/src/systems/signal/service/src/controllers/**", + "{workspaceRoot}/src/systems/signal/service/src/presenters/**", + "{workspaceRoot}/src/systems/signal/service/prisma/**", + "{workspaceRoot}/src/systems/signal/service/prisma.config.ts" + ] + } + } + }, "dependencies": { "@mtsrc/rpc-client": "1.0.0", "@mtsrc/validation": "1.0.0" diff --git a/src/systems/_clients/slates/package.json b/src/systems/_clients/slates/package.json index a75c2ebea..f29715400 100644 --- a/src/systems/_clients/slates/package.json +++ b/src/systems/_clients/slates/package.json @@ -29,6 +29,21 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/slates/apps/hub/src/apis/**", + "{workspaceRoot}/src/systems/slates/apps/hub/src/controllers/**", + "{workspaceRoot}/src/systems/slates/apps/hub/src/presenters/**", + "{workspaceRoot}/src/systems/slates/apps/hub/prisma/**", + "{workspaceRoot}/src/systems/slates/apps/hub/prisma.config.ts", + "{workspaceRoot}/src/systems/slates/packages/presenters/**" + ] + } + } + }, "dependencies": { "@metorial-platform-systems/function-bay-client": "workspace:*", "@mtsrc/rpc-client": "1.0.0", diff --git a/src/systems/_clients/subspace/package.json b/src/systems/_clients/subspace/package.json index ddba83822..49459e4d9 100644 --- a/src/systems/_clients/subspace/package.json +++ b/src/systems/_clients/subspace/package.json @@ -29,6 +29,22 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/subspace/apps/controller/src/apis/**", + "{workspaceRoot}/src/systems/subspace/apps/controller/src/controllers/**", + "{workspaceRoot}/src/systems/subspace/apps/controller/src/presenters/**", + "{workspaceRoot}/src/systems/subspace/apps/controller/prisma/**", + "{workspaceRoot}/src/systems/subspace/apps/controller/prisma.config.ts", + "{workspaceRoot}/src/systems/subspace/db/**", + "{workspaceRoot}/src/systems/subspace/packages/presenters/**" + ] + } + } + }, "dependencies": { "@mtsrc/rpc-client": "1.0.0", "@mtsrc/validation": "1.0.0" diff --git a/src/systems/_clients/synthesis/package.json b/src/systems/_clients/synthesis/package.json index f7b05d2f2..74dce798b 100644 --- a/src/systems/_clients/synthesis/package.json +++ b/src/systems/_clients/synthesis/package.json @@ -29,6 +29,20 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/synthesis/service/src/apis/**", + "{workspaceRoot}/src/systems/synthesis/service/src/controllers/**", + "{workspaceRoot}/src/systems/synthesis/service/src/presenters/**", + "{workspaceRoot}/src/systems/synthesis/service/prisma/**", + "{workspaceRoot}/src/systems/synthesis/service/prisma.config.ts" + ] + } + } + }, "dependencies": { "@mtsrc/rpc-client": "1.0.0" }, diff --git a/src/systems/_clients/voyager/package.json b/src/systems/_clients/voyager/package.json index 04a52b1fb..606c15adf 100644 --- a/src/systems/_clients/voyager/package.json +++ b/src/systems/_clients/voyager/package.json @@ -29,6 +29,20 @@ "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, + "nx": { + "targets": { + "build": { + "inputs": [ + "clientProduction", + "{workspaceRoot}/src/systems/voyager/service/src/apis/**", + "{workspaceRoot}/src/systems/voyager/service/src/controllers/**", + "{workspaceRoot}/src/systems/voyager/service/src/presenters/**", + "{workspaceRoot}/src/systems/voyager/service/prisma/**", + "{workspaceRoot}/src/systems/voyager/service/prisma.config.ts" + ] + } + } + }, "dependencies": { "@mtsrc/rpc-client": "1.0.0" }, diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index 1e7a38412..b896f3d58 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -14,6 +14,7 @@ WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index c0658f561..ac6acd6d2 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -14,6 +14,8 @@ WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin,@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-cargo/service:server:build diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index da87e3a8d..af71688fd 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -13,6 +13,7 @@ FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/forge:server:build diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index edad55b01..09ec8067a 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -14,6 +14,7 @@ WORKDIR /app COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types COPY _inputs/clients/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/function-bay:server:build diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index c3d75a9c2..81283d4b6 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -13,6 +13,7 @@ FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/origin:server:build diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 7df80d84d..95e0b354e 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -13,6 +13,7 @@ FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/relay RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/relay:server:build diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index 26d2bf2c0..af2b6654a 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -14,6 +14,7 @@ WORKDIR /app COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/shuttle:server:build diff --git a/src/systems/shuttle/service/src/lib/function/call.ts b/src/systems/shuttle/service/src/lib/function/call.ts index 1c2f92487..207f16f02 100644 --- a/src/systems/shuttle/service/src/lib/function/call.ts +++ b/src/systems/shuttle/service/src/lib/function/call.ts @@ -3,6 +3,11 @@ import { clientAdapter } from '@metorial/mcp-server'; import type { FunctionServer } from '../../../prisma/generated/client'; import { functionBay } from '../../functionBay'; +export type FunctionCallLog = { + timestamp: number; + message: string; +}; + export let callFunction = async ( server: FunctionServer, handler: (tools: ReturnType) => Promise @@ -71,7 +76,7 @@ export let getFunctionCallLogs = async (d: { waitForLogs?: boolean; attempts?: number; delayMs?: number; -}) => { +}): Promise => { let attempts = d.waitForLogs ? (d.attempts ?? 10) : 1; for (let i = 0; i < attempts; i++) { diff --git a/src/systems/shuttle/service/src/services/serverDeployment.ts b/src/systems/shuttle/service/src/services/serverDeployment.ts index d3c867515..f56cef723 100644 --- a/src/systems/shuttle/service/src/services/serverDeployment.ts +++ b/src/systems/shuttle/service/src/services/serverDeployment.ts @@ -1,10 +1,28 @@ import { notFoundError, ServiceError } from '@mtsrc/error'; import { Paginator } from '@mtsrc/pagination'; import { Service } from '@mtsrc/service'; -import type { ServerDeployment, Tenant } from '../../prisma/generated/client'; +import type { + ServerDeployment, + ServerDeploymentStepStatus, + ServerDeploymentStepType, + Tenant +} from '../../prisma/generated/client'; import { db } from '../db'; import { functionBay } from '../functionBay'; +type ServerDeploymentOutputStep = { + object: 'server_deployment.step'; + id: string; + status: ServerDeploymentStepStatus; + name: string; + logs: { timestamp: number; message: string }[]; + type: ServerDeploymentStepType; + createdAt: Date; + startedAt: Date | null; + endedAt: Date | null; + [key: string]: unknown; +}; + let include = { server: true, tenant: true, @@ -26,7 +44,9 @@ class serverDeploymentServiceImpl { return serverDeployment; } - async getServerDeploymentLogs(d: { serverDeployment: ServerDeployment }) { + async getServerDeploymentLogs(d: { + serverDeployment: ServerDeployment; + }): Promise { let functionServer = d.serverDeployment.functionServerOid ? await db.functionServer.findUnique({ where: { oid: d.serverDeployment.functionServerOid } @@ -48,7 +68,7 @@ class serverDeploymentServiceImpl { return steps .map(step => { if (step.type == 'deploying' && functionBayOutput) { - return (functionBayOutput ?? []).map(output => ({ + return (functionBayOutput as ServerDeploymentOutputStep[]).map(output => ({ ...output, object: 'server_deployment.step' })); diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index 0da6fb0b9..cdf86e1d3 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -13,6 +13,7 @@ FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/signal RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/signal:server:build diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index 85e0ba663..9a693f562 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -15,6 +15,7 @@ COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/signal-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 15fcc9b38..d82dff021 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -16,6 +16,8 @@ WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index ecfc6ab50..5d5ca704f 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -17,6 +17,8 @@ COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-controller:server:build diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index d26f54974..510c25773 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -19,6 +19,9 @@ COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial/ui +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index 85bd873dd..a2bb0d666 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -19,6 +19,8 @@ COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-worker:server:build diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index 87583bf88..f7b40abdd 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -13,6 +13,7 @@ FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/voyager RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/voyager:server:build diff --git a/src/tooling/control/src/bootstrap.ts b/src/tooling/control/src/bootstrap.ts index 10194023c..a795b3b6c 100644 --- a/src/tooling/control/src/bootstrap.ts +++ b/src/tooling/control/src/bootstrap.ts @@ -23,6 +23,15 @@ let createNxConfig = (scope: 'repo' | 'oss' = 'repo') => ({ '!{projectRoot}/coverage/**', '!{projectRoot}/.control/**' ], + clientProduction: [ + '{projectRoot}/**/*', + '!{projectRoot}/dist/**', + '!{projectRoot}/coverage/**', + '!{projectRoot}/.control/**', + ...(scope === 'repo' + ? ['{workspaceRoot}/bun.lock', '{workspaceRoot}/oss/bun.lock'] + : ['{workspaceRoot}/bun.lock']) + ], sharedGlobals: scope === 'repo' ? [ diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index a50e1974c..e3b4a29d1 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -78,6 +78,23 @@ let projectRootPath = (plan: GeneratedBuildPlan, projectRoot: string): Generated exists: true }); +let existingContextPath = ( + plan: GeneratedBuildPlan, + relativePath: string +): GeneratedBuildPath | null => { + let normalized = relativePath.replace(/\\/g, '/'); + let absolutePath = resolve(plan.contextRoot, normalized); + if (!existsSync(absolutePath)) return null; + + return { + pattern: normalized, + absolutePath, + relativeToService: normalized, + relativeToContext: normalized, + exists: true + }; +}; + let isClientProject = ( graph: ReturnType, project: string @@ -319,6 +336,7 @@ let createNodeInstallLayers = (opts: { let createSourceLayers = (opts: { plan: GeneratedBuildPlan; graph: ReturnType; + serviceBuildProjects: Set; projectsByTier: { shared: Set; clients: Set; @@ -332,6 +350,38 @@ let createSourceLayers = (opts: { .sort((a, b) => a.localeCompare(b)) .map(project => projectRootPath(opts.plan, getNxProjectRoot(opts.graph, project))); + let clientInterfacePaths = () => { + let paths = new Map(); + let addPath = (path: GeneratedBuildPath | null) => { + if (path) paths.set(path.relativeToContext, path); + }; + + for (let clientProject of opts.projectsByTier.clients) { + for (let dependency of collectNxProjectClosure(opts.graph, [clientProject])) { + if (!opts.serviceBuildProjects.has(dependency)) continue; + + let root = getNxProjectRoot(opts.graph, dependency); + for (let relativePath of [ + `${root}/src/apis`, + `${root}/src/controllers`, + `${root}/src/presenters`, + `${root}/src/db`, + `${root}/db`, + `${root}/prisma`, + `${root}/prisma.config.ts` + ]) { + addPath(existingContextPath(opts.plan, relativePath)); + } + + if (root.endsWith('/service')) { + addPath(existingContextPath(opts.plan, `${root.slice(0, -'/service'.length)}/db`)); + } + } + } + + return [...paths.values()].sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); + }; + let layers: GeneratedBuildSourceLayer[] = [ { name: 'shared', @@ -344,7 +394,7 @@ let createSourceLayers = (opts: { name: 'clients', tier: 'clients', projects: [...opts.projectsByTier.clients].sort((a, b) => a.localeCompare(b)), - inputPaths: projectPaths(opts.projectsByTier.clients), + inputPaths: [...projectPaths(opts.projectsByTier.clients), ...clientInterfacePaths()], commands: [] }, { @@ -363,9 +413,30 @@ let createSourceLayers = (opts: { } ]; - return layers - .map(layer => ({ ...layer, commands: sourceLayerWarmCommands(opts.graph, layer) })) - .filter(layer => layer.inputPaths.length > 0); + let emittedLayers = layers.filter(layer => layer.inputPaths.length > 0); + let clientWarmLayer = + emittedLayers.find(layer => layer.tier === 'dependencies') ?? + emittedLayers.find(layer => layer.tier === 'clients'); + let projectsAvailableForClientWarm = new Set([ + ...opts.projectsByTier.shared, + ...opts.projectsByTier.clients, + ...(clientWarmLayer?.tier === 'dependencies' ? opts.projectsByTier.dependencies : []) + ]); + let clientPrismaWarmCommands = clientWarmLayer + ? clientPrismaWarmCommandsForProjects(opts.graph, opts.projectsByTier.clients, projectsAvailableForClientWarm) + : []; + let clientWarmCommands = clientWarmLayer + ? clientBuildWarmCommands(opts.graph, opts.projectsByTier.clients) + : []; + + return emittedLayers.map(layer => ({ + ...layer, + commands: [ + ...sourceLayerWarmCommands(opts.graph, layer), + ...(layer === clientWarmLayer ? clientPrismaWarmCommands : []), + ...(layer === clientWarmLayer ? clientWarmCommands : []) + ] + })); }; let sourceLayerWarmCommands = ( @@ -387,6 +458,49 @@ let sourceLayerWarmCommands = ( ]; }; +let clientBuildWarmCommands = ( + graph: ReturnType, + projects: Set +): string[] => { + let buildableProjects = [...projects] + .filter(project => nxProjectHasTarget(graph, project, 'build')) + .sort((a, b) => a.localeCompare(b)); + if (buildableProjects.length === 0) return []; + + return [ + renderNxRunManyCommand({ + target: 'build', + projects: buildableProjects + }) + ]; +}; + +let clientPrismaWarmCommandsForProjects = ( + graph: ReturnType, + clientProjects: Set, + availableProjects: Set +): string[] => { + let prismaProjects = new Set(); + + for (let clientProject of clientProjects) { + for (let project of collectNxProjectClosure(graph, [clientProject])) { + if (!availableProjects.has(project)) continue; + if (!nxProjectHasTarget(graph, project, 'prisma:generate')) continue; + prismaProjects.add(project); + } + } + + let projects = [...prismaProjects].sort((a, b) => a.localeCompare(b)); + if (projects.length === 0) return []; + + return [ + renderNxRunManyCommand({ + target: 'prisma:generate', + projects + }) + ]; +}; + let projectsForManifestLayer = ( graph: ReturnType, projects: Iterable, @@ -576,6 +690,7 @@ export let nodeBuildBuilder: BuildBuilder = { plan.sourceLayers = createSourceLayers({ plan, graph, + serviceBuildProjects, projectsByTier, extraPaths }); From 9dba3d20c7ed2e3be58bd4fd9ddf0c8af28a3e9b Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 16:46:20 +0200 Subject: [PATCH 23/69] Patch origin build --- bun.lock | 3 +- .../_clients/origin-client/package.json | 12 ++--- .../_clients/origin-client/tsup.config.ts | 11 ++++ .../service/src/services/serverDeployment.ts | 52 ++++++++++--------- 4 files changed, 44 insertions(+), 34 deletions(-) create mode 100644 src/systems/_clients/origin-client/tsup.config.ts diff --git a/bun.lock b/bun.lock index 8072f9bb1..304d50c68 100644 --- a/bun.lock +++ b/bun.lock @@ -2263,8 +2263,7 @@ "devDependencies": { "@metorial/origin": "workspace:*", "@types/node": "^25.0.3", - "dts-bundle-generator": "^9.5.1", - "microbundle": "^0.15.1", + "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2", }, diff --git a/src/systems/_clients/origin-client/package.json b/src/systems/_clients/origin-client/package.json index 1111fa6b5..b44f6b144 100644 --- a/src/systems/_clients/origin-client/package.json +++ b/src/systems/_clients/origin-client/package.json @@ -17,18 +17,17 @@ "exports": { "types": "./dist/index.d.ts", "require": "./dist/index.cjs", - "import": "./dist/index.module.js", - "default": "./dist/index.module.js" + "import": "./dist/index.js", + "default": "./dist/index.js" }, "main": "./dist/index.cjs", - "module": "./dist/index.module.js", + "module": "./dist/index.js", "types": "dist/index.d.ts", - "unpkg": "./dist/index.umd.js", "scripts": { "test": "vitest run --passWithNoTests", "lint": "prettier src/**/*.ts --check", "prebuild": "cd ../../origin/apps/service && bunx prisma generate", - "build": "rm -rf ./dist && microbundle && dts-bundle-generator --config dts-bundle-generator.config.json --external-imports @mtsrc/rpc-client @mtsrc/rpc-server @mtsrc/validation", + "build": "tsup", "prepublish": "bun run build" }, "nx": { @@ -51,8 +50,7 @@ "devDependencies": { "@metorial/origin": "workspace:*", "@types/node": "^25.0.3", - "dts-bundle-generator": "^9.5.1", - "microbundle": "^0.15.1", + "tsup": "^8.5.1", "typescript": "^5.8.3", "vitest": "^3.1.2" } diff --git a/src/systems/_clients/origin-client/tsup.config.ts b/src/systems/_clients/origin-client/tsup.config.ts new file mode 100644 index 000000000..f4e82f33b --- /dev/null +++ b/src/systems/_clients/origin-client/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['cjs', 'esm'], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + outDir: 'dist' +}); diff --git a/src/systems/shuttle/service/src/services/serverDeployment.ts b/src/systems/shuttle/service/src/services/serverDeployment.ts index f56cef723..6651bca4a 100644 --- a/src/systems/shuttle/service/src/services/serverDeployment.ts +++ b/src/systems/shuttle/service/src/services/serverDeployment.ts @@ -68,33 +68,35 @@ class serverDeploymentServiceImpl { return steps .map(step => { if (step.type == 'deploying' && functionBayOutput) { - return (functionBayOutput as ServerDeploymentOutputStep[]).map(output => ({ - ...output, - object: 'server_deployment.step' - })); + return (functionBayOutput as ServerDeploymentOutputStep[]).map( + (output): ServerDeploymentOutputStep => ({ + ...output, + object: 'server_deployment.step' as const + }) + ); } - return [ - { - object: 'server_deployment.step', - id: step.id, - status: step.status, - name: { - publishing: 'Publishing Server', - deploying: 'Deploying Server', - discovering: 'Discovering Server Capabilities', - started: 'Deployment Started' - }[step.type], - logs: step.logs.flat().map(([timestamp, message]) => ({ - timestamp, - message - })) as { timestamp: number; message: string }[], - type: step.type, - createdAt: step.createdAt, - startedAt: step.startedAt, - endedAt: step.endedAt - } - ]; + let output: ServerDeploymentOutputStep = { + object: 'server_deployment.step' as const, + id: step.id, + status: step.status, + name: { + publishing: 'Publishing Server', + deploying: 'Deploying Server', + discovering: 'Discovering Server Capabilities', + started: 'Deployment Started' + }[step.type], + logs: step.logs.flat().map(([timestamp, message]) => ({ + timestamp, + message + })) as { timestamp: number; message: string }[], + type: step.type, + createdAt: step.createdAt, + startedAt: step.startedAt, + endedAt: step.endedAt + }; + + return [output]; }) .flat(); } From 766d8dd582cde0220e1b24bef594499e140f699b Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 16:54:26 +0200 Subject: [PATCH 24/69] fixes --- .github/workflows/ares.yml | 60 ---------------------- .github/workflows/synthesis.yml | 60 ---------------------- src/systems/_clients/subspace/package.json | 2 +- 3 files changed, 1 insertion(+), 121 deletions(-) delete mode 100644 .github/workflows/ares.yml delete mode 100644 .github/workflows/synthesis.yml diff --git a/.github/workflows/ares.yml b/.github/workflows/ares.yml deleted file mode 100644 index fe471fe8f..000000000 --- a/.github/workflows/ares.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: 'Ares' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Ares Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/metorial/ares - tags: | - type=ref,event=branch - type=ref,event=pr - type=sha - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ./src/systems/ares/service/Dockerfile - platforms: linux/amd64 - push: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} diff --git a/.github/workflows/synthesis.yml b/.github/workflows/synthesis.yml deleted file mode 100644 index ee389fecb..000000000 --- a/.github/workflows/synthesis.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: 'Synthesis' - -on: - workflow_dispatch: - push: - pull_request: - -permissions: - contents: read - packages: read - -jobs: - build: - name: 'Synthesis Build' - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/metorial/synthesis - tags: | - type=ref,event=branch - type=ref,event=pr - type=sha - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ./src/systems/synthesis/service/Dockerfile - platforms: linux/amd64 - push: false - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} diff --git a/src/systems/_clients/subspace/package.json b/src/systems/_clients/subspace/package.json index 49459e4d9..3af74e57a 100644 --- a/src/systems/_clients/subspace/package.json +++ b/src/systems/_clients/subspace/package.json @@ -25,7 +25,7 @@ "scripts": { "test": "vitest run --passWithNoTests", "lint": "prettier src/**/*.ts --check", - "build": "tsup", + "build": "NODE_OPTIONS=--max-old-space-size=6144 tsup", "prepublish": "bun run build", "typecheck": "tsc --noEmit" }, From f8f49bd5045908c687b537b610c075b4dd36ba71 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 17:10:24 +0200 Subject: [PATCH 25/69] fixes --- .github/workflows/reusable-control.yml | 7 +++++++ src/systems/ares/service/Dockerfile | 4 ++-- src/systems/ares/service/control.toml | 2 +- src/systems/cargo/service/Dockerfile | 4 ++-- src/systems/cargo/service/control.toml | 2 +- src/systems/forge/service/Dockerfile | 4 ++-- src/systems/forge/service/control.toml | 2 +- src/systems/function-bay/service/Dockerfile | 4 ++-- src/systems/function-bay/service/control.toml | 2 +- src/systems/origin/apps/code-bucket/Dockerfile | 2 +- src/systems/origin/apps/code-bucket/control.toml | 4 ++-- src/systems/origin/apps/service/Dockerfile | 4 ++-- src/systems/origin/apps/service/control.toml | 2 +- src/systems/relay/service/Dockerfile | 4 ++-- src/systems/relay/service/control.toml | 2 +- src/systems/shuttle/service/Dockerfile | 4 ++-- src/systems/shuttle/service/control.toml | 2 +- src/systems/signal/service/Dockerfile | 4 ++-- src/systems/signal/service/control.toml | 2 +- src/systems/slates/apps/hub/Dockerfile | 4 ++-- src/systems/slates/apps/hub/control.toml | 2 +- src/systems/slates/apps/registry/Dockerfile | 4 ++-- src/systems/slates/apps/registry/control.toml | 2 +- src/systems/subspace/apps/controller/Dockerfile | 4 ++-- src/systems/subspace/apps/controller/control.toml | 2 +- src/systems/subspace/apps/public/Dockerfile | 4 ++-- src/systems/subspace/apps/public/control.toml | 2 +- src/systems/subspace/apps/worker/Dockerfile | 4 ++-- src/systems/subspace/apps/worker/control.toml | 2 +- src/systems/synthesis/service/Dockerfile | 4 ++-- src/systems/synthesis/service/control.toml | 2 +- src/systems/voyager/service/Dockerfile | 4 ++-- src/systems/voyager/service/control.toml | 2 +- src/tooling/control/mocks/Dockerfile | 2 +- src/tooling/control/src/builders/builders.test.ts | 13 ++++++++++++- src/tooling/control/src/builders/go.ts | 10 +++++++++- src/tooling/control/src/builders/node.ts | 14 +++++++++++--- src/tooling/control/src/builders/pathing.ts | 7 +++++++ 38 files changed, 95 insertions(+), 54 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 674899b11..5cde03f6a 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -59,13 +59,20 @@ jobs: with: bun-version: '1.2.20' + - name: Install control packages + if: ${{ inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e') }} + run: bun i --linker=hoisted --filter @metorial/oss --filter @metorial/control + - name: Install packages + if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} run: bun i --linker=hoisted - name: Generate Prisma Clients + if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} run: bun x nx run-many --target=prisma:generate --all --parallel=1 - name: Build platform system clients + if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} run: bun x nx run-many --target=build --projects=@metorial-platform-systems/origin-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/synthesis-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/ares-client,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/subspace-client - name: Run control diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index b896f3d58..84e89005b 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -22,7 +22,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/ares/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/ares/service/dist /app/dist diff --git a/src/systems/ares/service/control.toml b/src/systems/ares/service/control.toml index fed8045ae..eb65895a8 100644 --- a/src/systems/ares/service/control.toml +++ b/src/systems/ares/service/control.toml @@ -38,7 +38,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52120, 52121, 52122, 52123, 12121] diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index ac6acd6d2..b369cb73c 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -22,7 +22,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/cargo/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/cargo/service/dist /app/dist diff --git a/src/systems/cargo/service/control.toml b/src/systems/cargo/service/control.toml index e47016290..2b2deab8f 100644 --- a/src/systems/cargo/service/control.toml +++ b/src/systems/cargo/service/control.toml @@ -34,7 +34,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52150, 52151] diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index af71688fd..3c8945a1c 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -20,7 +20,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/forge/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/forge/service/dist /app/dist diff --git a/src/systems/forge/service/control.toml b/src/systems/forge/service/control.toml index b5a27d613..c49cb1973 100644 --- a/src/systems/forge/service/control.toml +++ b/src/systems/forge/service/control.toml @@ -29,7 +29,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "development" } expose = [52020] diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 09ec8067a..5eb4df1c4 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -21,7 +21,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/function-bay/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/function-bay/service/dist /app/dist diff --git a/src/systems/function-bay/service/control.toml b/src/systems/function-bay/service/control.toml index 5d9f1519c..c1f6fee5e 100644 --- a/src/systems/function-bay/service/control.toml +++ b/src/systems/function-bay/service/control.toml @@ -29,7 +29,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "development" } expose = [52030] diff --git a/src/systems/origin/apps/code-bucket/Dockerfile b/src/systems/origin/apps/code-bucket/Dockerfile index d79770dc3..e8529562d 100644 --- a/src/systems/origin/apps/code-bucket/Dockerfile +++ b/src/systems/origin/apps/code-bucket/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2-alpine AS deps +FROM oven/bun:1.2.22-alpine AS deps WORKDIR /app ENV GOTOOLCHAIN=auto RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk go git ca-certificates nodejs diff --git a/src/systems/origin/apps/code-bucket/control.toml b/src/systems/origin/apps/code-bucket/control.toml index 01f55e657..acda41eee 100644 --- a/src/systems/origin/apps/code-bucket/control.toml +++ b/src/systems/origin/apps/code-bucket/control.toml @@ -14,7 +14,7 @@ context = "repo" dockerfile = "Dockerfile" [build.builder_image] -image = "oven/bun:1.2-alpine" +image = "oven/bun:1.2.22-alpine" [build.install] system_packages = ["go", "git", "ca-certificates", "nodejs"] @@ -82,7 +82,7 @@ cwd = "/app/src/systems/origin/apps/code-bucket" [test.e2e] command = "go test ./pkg/util -run TestNormalizePath" -cwd = "/app/oss/src/systems/origin/apps/code-bucket" +cwd = "." runner = "service" [env] diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index 81283d4b6..c595b3c09 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -20,7 +20,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/origin/apps/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/origin/apps/service/dist /app/dist diff --git a/src/systems/origin/apps/service/control.toml b/src/systems/origin/apps/service/control.toml index 3d2101bfd..8f2412383 100644 --- a/src/systems/origin/apps/service/control.toml +++ b/src/systems/origin/apps/service/control.toml @@ -30,7 +30,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52090, 52093] diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 95e0b354e..59dfae193 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -20,7 +20,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/relay/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/relay/service/dist /app/dist diff --git a/src/systems/relay/service/control.toml b/src/systems/relay/service/control.toml index a7dd2b280..a732b2ff6 100644 --- a/src/systems/relay/service/control.toml +++ b/src/systems/relay/service/control.toml @@ -30,7 +30,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52110] diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index af2b6654a..254f6af1f 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -21,7 +21,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/shuttle/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/shuttle/service/dist /app/dist diff --git a/src/systems/shuttle/service/control.toml b/src/systems/shuttle/service/control.toml index f6b76cecd..adb5a7fc2 100644 --- a/src/systems/shuttle/service/control.toml +++ b/src/systems/shuttle/service/control.toml @@ -29,7 +29,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52080, 52081] diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index cdf86e1d3..5b2b26cb5 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -20,7 +20,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/signal/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/signal/service/dist /app/dist diff --git a/src/systems/signal/service/control.toml b/src/systems/signal/service/control.toml index 1744937bd..8e34ef0a7 100644 --- a/src/systems/signal/service/control.toml +++ b/src/systems/signal/service/control.toml @@ -29,7 +29,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52030] diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index 9a693f562..b54084928 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -23,7 +23,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/slates/apps/hub CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/slates/apps/hub/dist /app/dist diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml index 9c7822bed..8c0af16af 100644 --- a/src/systems/slates/apps/hub/control.toml +++ b/src/systems/slates/apps/hub/control.toml @@ -36,7 +36,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52045, 52046, 52047] diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index d82dff021..6f73407dc 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -25,7 +25,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/slates/apps/registry CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/slates/apps/registry/dist /app/dist diff --git a/src/systems/slates/apps/registry/control.toml b/src/systems/slates/apps/registry/control.toml index a83fe9aee..f9a5ff0cb 100644 --- a/src/systems/slates/apps/registry/control.toml +++ b/src/systems/slates/apps/registry/control.toml @@ -37,7 +37,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52040, 52041, 52042] diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index 5d5ca704f..f4c70f17c 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -25,7 +25,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/controller CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/subspace/apps/controller/dist /app/dist diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index def6905f4..7d6f98b24 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -32,7 +32,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52070] diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index 510c25773..113f7c341 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -29,7 +29,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/public CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/subspace/apps/public/dist /app/dist diff --git a/src/systems/subspace/apps/public/control.toml b/src/systems/subspace/apps/public/control.toml index 4a8123ab1..19fd46d2f 100644 --- a/src/systems/subspace/apps/public/control.toml +++ b/src/systems/subspace/apps/public/control.toml @@ -38,7 +38,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52071] diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index a2bb0d666..a4b4d2c7b 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -27,7 +27,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/worker CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/subspace/apps/worker/dist /app/dist diff --git a/src/systems/subspace/apps/worker/control.toml b/src/systems/subspace/apps/worker/control.toml index 2563381db..fb60a54f4 100644 --- a/src/systems/subspace/apps/worker/control.toml +++ b/src/systems/subspace/apps/worker/control.toml @@ -29,7 +29,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } command = "cd db && bun prisma db push --accept-data-loss && cd /app && bun dist/index.js" diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index e28fee7cb..acb529a02 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -20,7 +20,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/synthesis/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/synthesis/service/dist /app/dist diff --git a/src/systems/synthesis/service/control.toml b/src/systems/synthesis/service/control.toml index 1fb803e5d..f4d5890ff 100644 --- a/src/systems/synthesis/service/control.toml +++ b/src/systems/synthesis/service/control.toml @@ -30,7 +30,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52160] diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index f7b40abdd..942d68fee 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 # generated by control bootstrap -FROM oven/bun:1.2 AS deps +FROM oven/bun:1.2.22 AS deps WORKDIR /app ENV NX_CACHE_DIRECTORY=/app/.nx/cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -20,7 +20,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked FROM build AS workspace WORKDIR /app/src/systems/voyager/service CMD ["sleep", "infinity"] -FROM oven/bun:1.2-alpine AS runner +FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl COPY --from=build /app/src/systems/voyager/service/dist /app/dist diff --git a/src/systems/voyager/service/control.toml b/src/systems/voyager/service/control.toml index 87b842993..5342f2aaf 100644 --- a/src/systems/voyager/service/control.toml +++ b/src/systems/voyager/service/control.toml @@ -30,7 +30,7 @@ copy = [ ] [build.runtime] -base_image = "oven/bun:1.2-alpine" +base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } expose = [52060] diff --git a/src/tooling/control/mocks/Dockerfile b/src/tooling/control/mocks/Dockerfile index d8a2a5282..2674155be 100644 --- a/src/tooling/control/mocks/Dockerfile +++ b/src/tooling/control/mocks/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.2-alpine +FROM oven/bun:1.2.22-alpine WORKDIR /mock ARG MOCK_SERVER=object-store/server.ts COPY ${MOCK_SERVER} ./server.ts diff --git a/src/tooling/control/src/builders/builders.test.ts b/src/tooling/control/src/builders/builders.test.ts index 4316f5d84..bf6c6625c 100644 --- a/src/tooling/control/src/builders/builders.test.ts +++ b/src/tooling/control/src/builders/builders.test.ts @@ -78,18 +78,29 @@ describe('build path resolution', () => { write(join(service.dir, 'src/index.ts'), 'export {};'); write(join(root, 'oss/src/systems/scripts/setup.sh'), 'echo setup'); write(join(root, 'shared/generated.txt'), 'generated'); + write(join(root, 'oss/src/systems/_shared/entityImage.ts'), 'export {};'); let paths = resolveBuildPaths({ service, registry, contextRoot: root, - patterns: ['package.json', '../db/package.json', 'src/**', '../../scripts/*.sh', '//shared/generated.txt'], + patterns: [ + 'package.json', + '../db/package.json', + 'src/**', + '../../scripts/*.sh', + '//shared/generated.txt', + '//oss/src/systems/_shared/entityImage.ts' + ], label: 'input' }); expect(paths.some(path => path.relativeToService === 'package.json')).toBe(true); expect(paths.some(path => path.relativeToService === '../db/package.json')).toBe(true); expect(paths.some(path => path.relativeToContext === 'shared/generated.txt')).toBe(true); + expect(paths.some(path => path.relativeToContext === 'oss/src/systems/_shared/entityImage.ts')).toBe( + true + ); expect(paths.some(path => path.relativeToContext.endsWith('setup.sh'))).toBe(true); }); }); diff --git a/src/tooling/control/src/builders/go.ts b/src/tooling/control/src/builders/go.ts index 0556e12ec..53b4c553d 100644 --- a/src/tooling/control/src/builders/go.ts +++ b/src/tooling/control/src/builders/go.ts @@ -25,8 +25,16 @@ let defaultGoRuntime = defaultRuntime(undefined, { workdir: '/app' }); +let pinBuilderImage = (image: string): string => { + if (image === 'oven/bun:1.2') return 'oven/bun:1.2.22'; + if (image === 'oven/bun:1.2-alpine') return 'oven/bun:1.2.22-alpine'; + return image; +}; + let renderGoDockerfile = (plan: GeneratedBuildPlan): string => { - let builderImage = plan.service.config.build?.builder_image?.image ?? 'golang:1.24-alpine'; + let builderImage = pinBuilderImage( + plan.service.config.build?.builder_image?.image ?? 'golang:1.24-alpine' + ); let systemPackages = plan.service.config.build?.install?.system_packages ?? ['git', 'ca-certificates']; let manifestLines = renderCopyLines(plan.manifestFiles); let inputLines = renderCopyLines(plan.inputPaths); diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index e3b4a29d1..533aac4d1 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -31,7 +31,7 @@ import type { } from '../types'; let defaultNodeRuntime = defaultRuntime(undefined, { - base_image: 'oven/bun:1.2-alpine', + base_image: 'oven/bun:1.2.22-alpine', packages: [], env: {}, expose: [], @@ -41,6 +41,14 @@ let defaultNodeRuntime = defaultRuntime(undefined, { workdir: '/app' }); +let nodeBuildImage = 'oven/bun:1.2.22'; + +let pinBunImage = (image: string): string => { + if (image === 'oven/bun:1.2') return 'oven/bun:1.2.22'; + if (image === 'oven/bun:1.2-alpine') return 'oven/bun:1.2.22-alpine'; + return image; +}; + let renderEnvLines = (plan: GeneratedBuildPlan): string[] => { let entries = Object.entries(plan.runtime.env); if (entries.length === 0) return []; @@ -533,7 +541,7 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { let lines = [ '# syntax=docker/dockerfile:1.7', '# generated by control bootstrap', - 'FROM oven/bun:1.2 AS deps', + `FROM ${nodeBuildImage} AS deps`, 'WORKDIR /app', 'ENV NX_CACHE_DIRECTORY=/app/.nx/cache', ...renderAptInstall(systemPackages), @@ -552,7 +560,7 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { `WORKDIR ${plan.workspaceRoot}`, 'CMD ["sleep", "infinity"]', '', - `FROM ${plan.runtime.base_image} AS runner`, + `FROM ${pinBunImage(plan.runtime.base_image)} AS runner`, `WORKDIR ${plan.runtime.workdir}`, ...renderRuntimePackages(plan), ...artifactLines, diff --git a/src/tooling/control/src/builders/pathing.ts b/src/tooling/control/src/builders/pathing.ts index de6806cac..2e41e414b 100644 --- a/src/tooling/control/src/builders/pathing.ts +++ b/src/tooling/control/src/builders/pathing.ts @@ -54,6 +54,13 @@ let resolvePatternBase = ( registry: ServiceRegistry, rawPattern: string ): { cwd: string; pattern: string } => { + if (rawPattern.startsWith('//oss/')) { + return { + cwd: registry.ossRoot, + pattern: rawPattern.slice('//oss/'.length) + }; + } + if (rawPattern.startsWith('//')) { return { cwd: registry.controlRoot, From 7b7c370673470cf3a79f2ed8d82e44a079e62bf3 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 17:20:38 +0200 Subject: [PATCH 26/69] add caching --- .github/workflows/reusable-control.yml | 78 ++++++++++++++++++++ src/tooling/control/src/compose/generator.ts | 3 +- src/tooling/control/src/run/runner.ts | 1 + 3 files changed, 81 insertions(+), 1 deletion(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 5cde03f6a..61a4902aa 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -34,6 +34,16 @@ on: required: false default: false type: boolean + enable_cache: + description: 'Restore and save Nx/BuildKit caches' + required: false + default: true + type: boolean + cache_prefix: + description: 'Optional cache scope override' + required: false + default: '' + type: string jobs: control: @@ -59,25 +69,93 @@ jobs: with: bun-version: '1.2.20' + - name: Set up Docker Buildx + id: buildx + if: ${{ inputs.enable_cache && (inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e')) }} + uses: docker/setup-buildx-action@v3 + with: + install: true + + - name: Compute cache scope + id: cache-scope + if: ${{ inputs.enable_cache }} + env: + CACHE_PREFIX: ${{ inputs.cache_prefix }} + COMMAND: ${{ inputs.command }} + MODE: ${{ inputs.mode }} + FILTER: ${{ inputs.filter }} + ALL: ${{ inputs.all }} + run: | + set -euo pipefail + + if [ -n "${CACHE_PREFIX}" ]; then + SCOPE="${CACHE_PREFIX}" + elif [ "${ALL}" = "true" ]; then + SCOPE="${COMMAND}-${MODE:-none}-all" + elif [ -n "${FILTER}" ]; then + SCOPE="${COMMAND}-${MODE:-none}-${FILTER}" + else + SCOPE="${COMMAND}-${MODE:-none}-none" + fi + + SCOPE="$(printf '%s' "${SCOPE}" | tr -c 'A-Za-z0-9_.-' '-')" + echo "scope=${SCOPE}" >> "${GITHUB_OUTPUT}" + + - name: Prepare cache directories + if: ${{ inputs.enable_cache }} + run: mkdir -p .nx/cache .control/cache/buildkit + + - name: Restore Nx cache + if: ${{ inputs.enable_cache }} + uses: actions/cache@v4 + with: + path: .nx/cache + key: control-nx-${{ runner.os }}-${{ github.ref_name }}-${{ hashFiles('bun.lock', 'package.json', 'nx.json', 'src/tooling/control/package.json', 'src/tooling/control/src/**/*.ts') }} + restore-keys: | + control-nx-${{ runner.os }}-${{ github.ref_name }}- + control-nx-${{ runner.os }}- + + - name: Restore BuildKit cache + if: ${{ inputs.enable_cache && (inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e')) }} + uses: actions/cache@v4 + with: + path: .control/cache/buildkit + key: control-buildkit-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}-${{ hashFiles('bun.lock', 'nx.json', 'src/tooling/control/src/**/*.ts', 'src/systems/**/control.toml', 'src/systems/**/Dockerfile') }} + restore-keys: | + control-buildkit-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}- + control-buildkit-${{ runner.os }}-${{ github.ref_name }}- + control-buildkit-${{ runner.os }}- + - name: Install control packages if: ${{ inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e') }} + env: + NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache run: bun i --linker=hoisted --filter @metorial/oss --filter @metorial/control - name: Install packages if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} + env: + NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache run: bun i --linker=hoisted - name: Generate Prisma Clients if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} + env: + NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache run: bun x nx run-many --target=prisma:generate --all --parallel=1 - name: Build platform system clients if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} + env: + NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache run: bun x nx run-many --target=build --projects=@metorial-platform-systems/origin-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/synthesis-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/ares-client,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/subspace-client - name: Run control env: + BUILDX_BUILDER: ${{ steps.buildx.outputs.name }} + CONTROL_BUILDKIT_CACHE: ${{ inputs.enable_cache && (inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e')) && '1' || '0' }} CONTROL_VERBOSE: '1' + NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} run: | set -euo pipefail diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index 8a8735ca8..8cdd56849 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -1,3 +1,4 @@ +import { existsSync } from 'fs'; import { join, resolve } from 'path'; import { stringify } from 'yaml'; import type { ResolvedDep, ResolvedGraph } from '../types'; @@ -105,7 +106,7 @@ let composeBuild = ( ...build, ...(cacheDir ? { - cache_from: [`type=local,src=${cacheDir}`], + ...(existsSync(cacheDir) ? { cache_from: [`type=local,src=${cacheDir}`] } : {}), cache_to: [`type=local,dest=${cacheDir},mode=max`] } : {}) diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index ca5bedc6c..956028d4d 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -186,6 +186,7 @@ export let runControl = async ( let cacheRoot = process.env.CONTROL_BUILDKIT_CACHE === '1' ? resolve(opts.session?.repoRoot ?? registry.controlRoot, '.control', 'cache', 'buildkit') : undefined; + if (cacheRoot) mkdirSync(cacheRoot, { recursive: true }); writeFileSync( composeFile, From 626c8e88f33ee7b21f3486e8c7aa29087c97a021 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 17:32:00 +0200 Subject: [PATCH 27/69] build fixes --- .github/workflows/reusable-control.yml | 3 ++- src/systems/ares/service/Dockerfile | 2 +- src/systems/cargo/service/Dockerfile | 4 ++-- src/systems/forge/service/Dockerfile | 2 +- src/systems/function-bay/service/Dockerfile | 2 +- src/systems/origin/apps/service/Dockerfile | 2 +- src/systems/relay/service/Dockerfile | 2 +- src/systems/shuttle/service/Dockerfile | 2 +- src/systems/signal/service/Dockerfile | 2 +- src/systems/slates/apps/hub/Dockerfile | 2 +- src/systems/slates/apps/registry/Dockerfile | 4 ++-- src/systems/subspace/apps/controller/Dockerfile | 4 ++-- src/systems/subspace/apps/public/Dockerfile | 4 ++-- src/systems/subspace/apps/worker/Dockerfile | 4 ++-- src/systems/synthesis/service/Dockerfile | 2 +- src/systems/voyager/service/Dockerfile | 2 +- src/tooling/control/src/builders/node.ts | 8 +++++++- 17 files changed, 29 insertions(+), 22 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 61a4902aa..be704c630 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -110,8 +110,9 @@ jobs: uses: actions/cache@v4 with: path: .nx/cache - key: control-nx-${{ runner.os }}-${{ github.ref_name }}-${{ hashFiles('bun.lock', 'package.json', 'nx.json', 'src/tooling/control/package.json', 'src/tooling/control/src/**/*.ts') }} + key: control-nx-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}-${{ hashFiles('bun.lock', 'package.json', 'nx.json', 'src/tooling/control/package.json', 'src/tooling/control/src/**/*.ts') }} restore-keys: | + control-nx-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}- control-nx-${{ runner.os }}-${{ github.ref_name }}- control-nx-${{ runner.os }}- diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index 84e89005b..a71ce4e19 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -16,7 +16,7 @@ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/ares:server:build FROM build AS workspace diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index b369cb73c..f02177376 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -14,10 +14,10 @@ WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin,@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-cargo/service:server:build FROM build AS workspace WORKDIR /app/src/systems/cargo/service diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index 3c8945a1c..bea61e48f 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/forge:server:build FROM build AS workspace WORKDIR /app/src/systems/forge/service diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 5eb4df1c4..51db13027 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -16,7 +16,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/function-bay:server:build FROM build AS workspace WORKDIR /app/src/systems/function-bay/service diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index c595b3c09..737e9a3de 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/origin +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/origin:server:build FROM build AS workspace WORKDIR /app/src/systems/origin/apps/service diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 59dfae193..d9c1e2e25 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/relay +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/relay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/relay:server:build FROM build AS workspace WORKDIR /app/src/systems/relay/service diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index 254f6af1f..6b6c0aedd 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -16,7 +16,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/shuttle:server:build FROM build AS workspace WORKDIR /app/src/systems/shuttle/service diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index 5b2b26cb5..a16a478f0 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/signal +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/signal; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/signal:server:build FROM build AS workspace WORKDIR /app/src/systems/signal/service diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index b54084928..e78ace7ea 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -17,7 +17,7 @@ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/signal-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/slates:server:build FROM build AS workspace diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 6f73407dc..0cd54ff6e 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -16,10 +16,10 @@ WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/ares +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/slates-registry:server:build FROM build AS workspace diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index f4c70f17c..e1d1e3803 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -17,10 +17,10 @@ COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-controller:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/controller diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index 113f7c341..040961228 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -20,10 +20,10 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial/ui -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-public:server:build FROM build AS workspace diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index a4b4d2c7b..59a5fbeef 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -19,10 +19,10 @@ COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-worker:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/worker diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index acb529a02..cd81dcb6f 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -15,7 +15,7 @@ FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/synthesis:server:build FROM build AS workspace WORKDIR /app/src/systems/synthesis/service diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index 942d68fee..43e364583 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=prisma:generate --projects=@metorial/voyager +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/voyager:server:build FROM build AS workspace WORKDIR /app/src/systems/voyager/service diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 533aac4d1..3322978c5 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -138,8 +138,14 @@ let resolveAutomationProjects = (opts: { let renderAutomationCommand = (automation: GeneratedBuildAutomation): string => automation.command; +let shouldRetryNxRun = (command: string): boolean => + command.includes('--target=prisma:generate') || /:prisma:generate(\s|$)/.test(command); + +let renderRetriableCommand = (command: string): string => + `attempt=1; until ${command}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done`; + let renderNxRun = (command: string): string => - `RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && ${command}`; + `RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && ${shouldRetryNxRun(command) ? renderRetriableCommand(command) : command}`; let collectNodeProjectUseCounts = (opts: { registry: ServiceRegistry; From f04024747b66060bace7aa99df0b403b80d615f7 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Sun, 24 May 2026 18:29:35 +0200 Subject: [PATCH 28/69] Build fixes --- src/systems/ares/service/Dockerfile | 2 +- src/systems/cargo/service/Dockerfile | 4 ++-- src/systems/forge/service/Dockerfile | 2 +- src/systems/function-bay/service/Dockerfile | 2 +- src/systems/origin/apps/service/Dockerfile | 2 +- src/systems/relay/service/Dockerfile | 2 +- src/systems/shuttle/service/Dockerfile | 2 +- src/systems/signal/service/Dockerfile | 2 +- src/systems/slates/apps/hub/Dockerfile | 2 +- src/systems/slates/apps/hub/control.toml | 2 +- src/systems/slates/apps/hub/package.json | 1 + src/systems/slates/apps/registry/Dockerfile | 4 ++-- src/systems/subspace/apps/controller/Dockerfile | 4 ++-- src/systems/subspace/apps/public/Dockerfile | 4 ++-- src/systems/subspace/apps/worker/Dockerfile | 4 ++-- src/systems/synthesis/service/Dockerfile | 2 +- src/systems/voyager/service/Dockerfile | 2 +- src/tooling/control/src/builders/node.ts | 2 +- 18 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index a71ce4e19..3ed32275b 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -16,7 +16,7 @@ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/ares:server:build FROM build AS workspace diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index f02177376..50e713af3 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -14,10 +14,10 @@ WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-cargo/service:server:build FROM build AS workspace WORKDIR /app/src/systems/cargo/service diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index bea61e48f..bb8a4738c 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/forge:server:build FROM build AS workspace WORKDIR /app/src/systems/forge/service diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 51db13027..1c83372e3 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -16,7 +16,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/function-bay:server:build FROM build AS workspace WORKDIR /app/src/systems/function-bay/service diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index 737e9a3de..f96839ff3 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/origin:server:build FROM build AS workspace WORKDIR /app/src/systems/origin/apps/service diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index d9c1e2e25..40a6ff0d5 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/relay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/relay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/relay:server:build FROM build AS workspace WORKDIR /app/src/systems/relay/service diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index 6b6c0aedd..fdbe6b1c1 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -16,7 +16,7 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/shuttle:server:build FROM build AS workspace WORKDIR /app/src/systems/shuttle/service diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index a16a478f0..2a5f24ccc 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/signal; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/signal; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/signal:server:build FROM build AS workspace WORKDIR /app/src/systems/signal/service diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index e78ace7ea..4d0394c58 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -17,7 +17,7 @@ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/signal-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/slates:server:build FROM build AS workspace diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml index 8c0af16af..c3c4dbaba 100644 --- a/src/systems/slates/apps/hub/control.toml +++ b/src/systems/slates/apps/hub/control.toml @@ -47,7 +47,7 @@ healthcheck = "curl -f http://localhost:52045/ping && curl -f http://localhost:5 command = "bun run test:unit" [test.e2e] -command = "bun run test:e2e" +command = "bun run test:e2e:ci" setup = ["bun prisma generate", "bun prisma db push --accept-data-loss --schema prisma/schema"] cwd = "/app/src/systems/slates/apps/hub" runner = "service" diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index 14ad4356c..f128e346e 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -21,6 +21,7 @@ "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts", "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", + "test:e2e:ci": "sh -c 'attempt=1; until bun run test:e2e; do code=$?; if [ \"$attempt\" -ge 3 ]; then exit \"$code\"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done'", "test:watch": "bunx vitest watch", "typecheck": "bun run check-types && bun run admin:typecheck", "admin:typecheck": "tsc --noEmit --project admin/tsconfig.json", diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 0cd54ff6e..1fcb8c350 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -16,10 +16,10 @@ WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/slates-registry:server:build FROM build AS workspace diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index e1d1e3803..940e06709 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -17,10 +17,10 @@ COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-controller:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/controller diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index 040961228..190fa8056 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -20,10 +20,10 @@ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial/ui -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-public:server:build FROM build AS workspace diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index 59a5fbeef..9af523bc8 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -19,10 +19,10 @@ COPY _inputs/shared/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-worker:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/worker diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index cd81dcb6f..4abc85c73 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -15,7 +15,7 @@ FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/synthesis:server:build FROM build AS workspace WORKDIR /app/src/systems/synthesis/service diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index 43e364583..00d95707d 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -15,7 +15,7 @@ COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/voyager:server:build FROM build AS workspace WORKDIR /app/src/systems/voyager/service diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 3322978c5..5b05109a4 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -142,7 +142,7 @@ let shouldRetryNxRun = (command: string): boolean => command.includes('--target=prisma:generate') || /:prisma:generate(\s|$)/.test(command); let renderRetriableCommand = (command: string): string => - `attempt=1; until ${command}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done`; + `{ attempt=1; until ${command}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; }`; let renderNxRun = (command: string): string => `RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && ${shouldRetryNxRun(command) ? renderRetriableCommand(command) : command}`; From ec3d4ba6e1c8c13bdc4d90661c6d48bb41836cfe Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 25 May 2026 09:36:51 +0200 Subject: [PATCH 29/69] Build fixes --- src/systems/ares/service/Dockerfile | 2 +- src/systems/cargo/service/Dockerfile | 2 +- src/systems/cargo/service/control.toml | 2 +- src/systems/cargo/service/package.json | 1 + src/systems/forge/service/Dockerfile | 2 +- src/systems/function-bay/deflector/Dockerfile | 4 ++-- src/systems/function-bay/service/Dockerfile | 2 +- src/systems/origin/apps/code-bucket/Dockerfile | 4 ++-- src/systems/origin/apps/service/Dockerfile | 2 +- src/systems/relay/service/Dockerfile | 2 +- src/systems/shuttle/service/Dockerfile | 2 +- src/systems/signal/service/Dockerfile | 2 +- src/systems/signal/service/control.toml | 2 +- src/systems/signal/service/package.json | 1 + src/systems/slates/apps/hub/Dockerfile | 2 +- src/systems/slates/apps/registry/Dockerfile | 2 +- src/systems/subspace/apps/controller/Dockerfile | 2 +- src/systems/subspace/apps/public/Dockerfile | 2 +- src/systems/subspace/apps/worker/Dockerfile | 2 +- src/systems/synthesis/service/Dockerfile | 2 +- src/systems/voyager/service/Dockerfile | 2 +- src/tooling/control/src/builders/base.ts | 2 +- 22 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index 3ed32275b..703e6b1e9 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -24,7 +24,7 @@ WORKDIR /app/src/systems/ares/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/ares/service/dist /app/dist COPY --from=build /app/src/systems/ares/service/prisma /app/prisma COPY --from=build /app/src/systems/ares/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index 50e713af3..72568412f 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -24,7 +24,7 @@ WORKDIR /app/src/systems/cargo/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/cargo/service/dist /app/dist COPY --from=build /app/src/systems/cargo/db/prisma /app/prisma COPY --from=build /app/src/systems/cargo/db/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/cargo/service/control.toml b/src/systems/cargo/service/control.toml index 2b2deab8f..58b5a8f3a 100644 --- a/src/systems/cargo/service/control.toml +++ b/src/systems/cargo/service/control.toml @@ -45,7 +45,7 @@ healthcheck = "curl -f http://localhost:52151/ping && curl -f http://localhost:1 command = "bun run test:unit" [test.e2e] -command = "bun run test:e2e" +command = "bun run test:e2e:ci" setup = ["bun prisma generate --schema ../db/prisma/schema --config ../db/prisma.config.ts", "bun prisma db push --accept-data-loss --schema ../db/prisma/schema --config ../db/prisma.config.ts"] cwd = "/app/src/systems/cargo/service" runner = "service" diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index 5bd1b16d1..c9d38315e 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -23,6 +23,7 @@ "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts", "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", + "test:e2e:ci": "sh -c 'attempt=1; until bun run test:e2e; do code=$?; if [ \"$attempt\" -ge 3 ]; then exit \"$code\"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done'", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index bb8a4738c..23e7f40c0 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -22,7 +22,7 @@ WORKDIR /app/src/systems/forge/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/forge/service/dist /app/dist COPY --from=build /app/src/systems/forge/service/prisma /app/prisma COPY --from=build /app/src/systems/forge/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/function-bay/deflector/Dockerfile b/src/systems/function-bay/deflector/Dockerfile index 2df8b12a6..9683a661f 100644 --- a/src/systems/function-bay/deflector/Dockerfile +++ b/src/systems/function-bay/deflector/Dockerfile @@ -3,7 +3,7 @@ FROM golang:1.24-alpine AS deps WORKDIR /app ENV GOTOOLCHAIN=auto -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk git ca-certificates +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk git ca-certificates; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY src/systems/function-bay/deflector/go.mod ./src/systems/function-bay/deflector/ COPY src/systems/function-bay/deflector/go.sum ./src/systems/function-bay/deflector/ RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked cd /app/src/systems/function-bay/deflector && go mod download @@ -17,7 +17,7 @@ WORKDIR /app/src/systems/function-bay/deflector CMD ["sleep", "infinity"] FROM alpine:3.22 AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk ca-certificates wget +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk ca-certificates wget; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /tmp/deflector /usr/local/bin/deflector EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 1c83372e3..1e7798391 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -23,7 +23,7 @@ WORKDIR /app/src/systems/function-bay/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/function-bay/service/dist /app/dist COPY --from=build /app/src/systems/function-bay/service/prisma /app/prisma COPY --from=build /app/src/systems/function-bay/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/origin/apps/code-bucket/Dockerfile b/src/systems/origin/apps/code-bucket/Dockerfile index e8529562d..36b2edc8b 100644 --- a/src/systems/origin/apps/code-bucket/Dockerfile +++ b/src/systems/origin/apps/code-bucket/Dockerfile @@ -3,7 +3,7 @@ FROM oven/bun:1.2.22-alpine AS deps WORKDIR /app ENV GOTOOLCHAIN=auto -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk go git ca-certificates nodejs +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk go git ca-certificates nodejs; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY oss/src/systems/origin/apps/code-bucket/go.mod ./oss/src/systems/origin/apps/code-bucket/ COPY oss/src/systems/origin/apps/code-bucket/go.sum ./oss/src/systems/origin/apps/code-bucket/ COPY oss/src/systems/origin/apps/code-bucket/package.json ./oss/src/systems/origin/apps/code-bucket/ @@ -30,7 +30,7 @@ WORKDIR /app/oss/src/systems/origin/apps/code-bucket CMD ["sleep", "infinity"] FROM alpine:latest AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk ca-certificates tzdata netcat-openbsd +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk ca-certificates tzdata netcat-openbsd; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /tmp/code-bucket /app/code-bucket EXPOSE 52091 EXPOSE 52092 diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index f96839ff3..b0e6d022c 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -22,7 +22,7 @@ WORKDIR /app/src/systems/origin/apps/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/origin/apps/service/dist /app/dist COPY --from=build /app/src/systems/origin/apps/service/prisma /app/prisma COPY --from=build /app/src/systems/origin/apps/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 40a6ff0d5..829b7a4b5 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -22,7 +22,7 @@ WORKDIR /app/src/systems/relay/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/relay/service/dist /app/dist COPY --from=build /app/src/systems/relay/service/prisma /app/prisma COPY --from=build /app/src/systems/relay/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index fdbe6b1c1..3b6b6d4fa 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -23,7 +23,7 @@ WORKDIR /app/src/systems/shuttle/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/shuttle/service/dist /app/dist COPY --from=build /app/src/systems/shuttle/service/prisma /app/prisma COPY --from=build /app/src/systems/shuttle/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index 2a5f24ccc..e2f823a01 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -22,7 +22,7 @@ WORKDIR /app/src/systems/signal/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/signal/service/dist /app/dist COPY --from=build /app/src/systems/signal/service/prisma /app/prisma COPY --from=build /app/src/systems/signal/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/signal/service/control.toml b/src/systems/signal/service/control.toml index 8e34ef0a7..591f5efd0 100644 --- a/src/systems/signal/service/control.toml +++ b/src/systems/signal/service/control.toml @@ -40,7 +40,7 @@ healthcheck = "curl -f http://localhost:52050/ping && curl -f http://localhost:1 command = "bun run test:unit" [test.e2e] -command = "bun run test:e2e" +command = "bun run test:e2e:ci" setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] cwd = "/app/src/systems/signal/service" runner = "service" diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index 28fd7527d..7eb555bb8 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -20,6 +20,7 @@ "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts", "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", + "test:e2e:ci": "sh -c 'attempt=1; until bun run test:e2e; do code=$?; if [ \"$attempt\" -ge 3 ]; then exit \"$code\"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done'", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index 4d0394c58..9ecff8c15 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -25,7 +25,7 @@ WORKDIR /app/src/systems/slates/apps/hub CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/slates/apps/hub/dist /app/dist COPY --from=build /app/src/systems/slates/apps/hub/dist/admin /app/dist/admin COPY --from=build /app/src/systems/slates/apps/hub/prisma /app/prisma diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 1fcb8c350..f6945c5c6 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -27,7 +27,7 @@ WORKDIR /app/src/systems/slates/apps/registry CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/slates/apps/registry/dist /app/dist COPY --from=build /app/src/systems/slates/apps/registry/dist/admin /app/dist/admin COPY --from=build /app/src/systems/slates/apps/registry/prisma /app/prisma diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index 940e06709..e1ea3c9ae 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -27,7 +27,7 @@ WORKDIR /app/src/systems/subspace/apps/controller CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/subspace/apps/controller/dist /app/dist COPY --from=build /app/src/systems/subspace/db /app/db COPY --from=build /app/node_modules /app/node_modules diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index 190fa8056..f8f2f0f96 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -31,7 +31,7 @@ WORKDIR /app/src/systems/subspace/apps/public CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/subspace/apps/public/dist /app/dist COPY --from=build /app/src/systems/subspace/apps/public/frontend/dist /app/frontend/dist COPY --from=build /app/src/systems/subspace/db /app/db diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index 9af523bc8..11cf0fd93 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -29,7 +29,7 @@ WORKDIR /app/src/systems/subspace/apps/worker CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/subspace/apps/worker/dist /app/dist COPY --from=build /app/src/systems/subspace/db /app/db COPY --from=build /app/node_modules /app/node_modules diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index 4abc85c73..4b653d1c6 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -22,7 +22,7 @@ WORKDIR /app/src/systems/synthesis/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/synthesis/service/dist /app/dist COPY --from=build /app/src/systems/synthesis/service/prisma /app/prisma COPY --from=build /app/src/systems/synthesis/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index 00d95707d..a671641cf 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -22,7 +22,7 @@ WORKDIR /app/src/systems/voyager/service CMD ["sleep", "infinity"] FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app -RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk curl +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' COPY --from=build /app/src/systems/voyager/service/dist /app/dist COPY --from=build /app/src/systems/voyager/service/prisma /app/prisma COPY --from=build /app/src/systems/voyager/service/prisma.config.ts /app/prisma.config.ts diff --git a/src/tooling/control/src/builders/base.ts b/src/tooling/control/src/builders/base.ts index 3d37a00db..1a55e837a 100644 --- a/src/tooling/control/src/builders/base.ts +++ b/src/tooling/control/src/builders/base.ts @@ -163,7 +163,7 @@ export let renderAptInstall = (packages: string[]): string[] => { export let renderApkInstall = (packages: string[]): string[] => { if (packages.length === 0) return []; return [ - `RUN --mount=type=cache,target=/var/cache/apk apk add --cache-dir /var/cache/apk ${packages.join(' ')}` + `RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk ${packages.join(' ')}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done'` ]; }; From 2ed66860c0dfac5adb89eb982e2e251d7e91f5fe Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 25 May 2026 09:54:38 +0200 Subject: [PATCH 30/69] wip --- src/systems/function-bay/service/control.toml | 2 +- src/systems/function-bay/service/package.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/systems/function-bay/service/control.toml b/src/systems/function-bay/service/control.toml index c1f6fee5e..3294b8702 100644 --- a/src/systems/function-bay/service/control.toml +++ b/src/systems/function-bay/service/control.toml @@ -40,7 +40,7 @@ healthcheck = "curl -f http://localhost:52030/ping && curl -f http://localhost:1 command = "bun run test:unit" [test.e2e] -command = "bun run test:e2e" +command = "bun run test:e2e:ci" setup = ["bun prisma generate", "bun prisma db push --accept-data-loss"] cwd = "/app/src/systems/function-bay/service" runner = "service" diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index 5f15008b5..cf8faa8aa 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -20,6 +20,7 @@ "test": "bun run test:unit && bun run test:e2e", "test:unit": "bunx vitest run --config vitest.unit.config.ts", "test:e2e": "bunx vitest run --config vitest.e2e.config.ts", + "test:e2e:ci": "sh -c 'attempt=1; until bun run test:e2e; do code=$?; if [ \"$attempt\" -ge 3 ]; then exit \"$code\"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done'", "test:watch": "bunx vitest watch", "typecheck": "tsc --noEmit" }, From cbba684c9e4c7375c105a42f9aeccff2e9ffecf4 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 25 May 2026 11:07:06 +0200 Subject: [PATCH 31/69] Bump prisma --- .github/workflows/test.yml | 29 ++- bun.lock | 236 +++++++----------- deployment/skeleton/package.json | 4 +- src/backend/db/package.json | 6 +- src/backend/multi-region/package.json | 6 +- src/systems/ares/service/package.json | 6 +- src/systems/cargo/db/package.json | 6 +- src/systems/cargo/service/package.json | 6 +- src/systems/forge/service/package.json | 6 +- src/systems/function-bay/service/package.json | 6 +- src/systems/origin/apps/service/package.json | 6 +- src/systems/relay/service/package.json | 6 +- src/systems/shuttle/service/package.json | 6 +- src/systems/signal/service/package.json | 6 +- src/systems/slates/apps/hub/package.json | 6 +- src/systems/slates/apps/registry/package.json | 6 +- .../subspace/apps/controller/package.json | 2 +- src/systems/subspace/apps/dev/package.json | 2 +- src/systems/subspace/db/package.json | 6 +- src/systems/synthesis/service/package.json | 6 +- src/systems/voyager/service/package.json | 6 +- 21 files changed, 173 insertions(+), 196 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b643945ba..337a81661 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,13 +30,36 @@ jobs: - name: Install Packages run: bun i --linker=hoisted + - name: Resolve non-system Nx projects + id: nx-projects + run: | + bun x nx graph --file=stdout | bun -e ' + let input = await Bun.stdin.text(); + let nodes = JSON.parse(input).graph.nodes; + let targets = { + "prisma:generate": "prisma_generate", + build: "build", + test: "test" + }; + + for (let [target, output] of Object.entries(targets)) { + let projects = Object.values(nodes) + .filter(node => !node.data.root.startsWith("src/systems/")) + .filter(node => node.data.targets?.[target]) + .map(node => node.name) + .join(","); + + console.log(`${output}=${projects}`); + } + ' >> "$GITHUB_OUTPUT" + - name: Generate Prisma Clients run: | - bunx turbo run --ui=stream prisma:generate --filter=!./src/systems/** + bun x nx run-many --target=prisma:generate --projects='${{ steps.nx-projects.outputs.prisma_generate }}' --parallel=1 bun run --cwd ./src/systems/cargo/db prisma:generate - name: Build Packages - run: bunx turbo run --ui=stream build --filter=!./src/systems/** + run: bun x nx run-many --target=build --projects='${{ steps.nx-projects.outputs.build }}' - name: Test - run: bunx turbo run --concurrency=1 --ui=stream test --filter=!./src/systems/** + run: bun x nx run-many --target=test --projects='${{ steps.nx-projects.outputs.test }}' --parallel=1 diff --git a/bun.lock b/bun.lock index 304d50c68..fa94b682a 100644 --- a/bun.lock +++ b/bun.lock @@ -931,14 +931,14 @@ "@modelcontextprotocol/sdk": "^1.11.4", "@mtsrc/execution-context": "1.0.0", "@mtsrc/snowflake": "1.0.0", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@types/json-schema": "^7.0.15", "json-schema": "^0.4.0", "lru-cache": "^11.1.0", "p-queue": "^8.1.0", - "prisma": "^7.4.1", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.1.1", }, "devDependencies": { @@ -1403,13 +1403,13 @@ "@mtsrc/shadow-id": "1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@types/bun": "^1.2.12", "@types/pg": "^8.11.11", "pg": "^8.11.3", - "prisma": "^7.4.1", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.1.1", "stripe": "^18.5.0", "typescript": "^5.8.3", @@ -2415,8 +2415,8 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "@types/ua-parser-js": "^0.7.39", @@ -2425,7 +2425,7 @@ "input-otp": "^1.4.2", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "prisma": "^7.4.1", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.0.0", "react-dom": "^19.0.0", @@ -2458,11 +2458,11 @@ "@mtsrc/id": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "p-queue": "^9.1.0", - "prisma": "^7.2.0", + "prisma": "7.8.0", }, "devDependencies": { "@types/bun": "latest", @@ -2635,12 +2635,12 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", - "prisma": "^7.2.0", + "prisma": "7.8.0", }, "devDependencies": { "@mtsrc/testing-tools": "1.0.0", @@ -2679,8 +2679,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -2688,7 +2688,7 @@ "date-fns": "^4.1.0", "jszip": "^3.10.1", "mongoose": "^9.0.2", - "prisma": "^7.2.0", + "prisma": "7.8.0", "yaml": "^2.8.2", }, "devDependencies": { @@ -2823,8 +2823,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -2835,7 +2835,7 @@ "jose": "^6.2.2", "jszip": "^3.10.1", "lodash": "4.17.21", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "undici": "^8.1.0", "yaml": "^2.8.2", @@ -2945,8 +2945,8 @@ "@mtsrc/validation": "1.0.0", "@octokit/auth-app": "^8.1.2", "@octokit/core": "^7.0.6", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "axios": "^1.13.2", @@ -2956,7 +2956,7 @@ "long": "^5.3.2", "nice-grpc": "^2.1.12", "pg": "^8.18.0", - "prisma": "^7.4.1", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "protobufjs": "^7.5.3", "yaml": "^2.8.2", @@ -3002,8 +3002,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@sentry/bun": "^10.38.0", "@types/nodemailer": "^7.0.9", "axios": "^1.13.2", @@ -3011,7 +3011,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "nodemailer": "^8.0.1", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", }, @@ -3117,8 +3117,8 @@ "@mtsrc/telemetry": "1.0.0", "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -3132,7 +3132,7 @@ "jszip": "^3.10.1", "p-queue": "^9.1.0", "pg": "^8.16.3", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "ws": "^8.19.0", "yaml": "^2.8.2", @@ -3177,8 +3177,8 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -3186,7 +3186,7 @@ "date-fns": "^4.1.0", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", }, @@ -3245,8 +3245,8 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", @@ -3259,7 +3259,7 @@ "jszip": "^3.10.1", "lodash": "4.17.21", "p-queue": "^9.0.1", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", @@ -3324,8 +3324,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", "@sentry/cli": "^3.2.0", @@ -3335,7 +3335,7 @@ "hono": "^4.11.3", "jszip": "^3.10.1", "lodash-es": "^4.17.22", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", @@ -3439,7 +3439,7 @@ "@metorial-subspace/retry-utils": "^1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/testing-tools": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", @@ -3488,7 +3488,7 @@ "@metorial-subspace/provider": "^1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/testing-tools": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", @@ -3592,12 +3592,12 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "dotenv": "^17.2.3", "p-queue": "^9.1.0", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", }, "devDependencies": { @@ -4263,15 +4263,15 @@ "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", "@openharness/core": "^0.6.2", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "ai": "^6.0.175", "hono": "^4.9.6", "just-bash": "^2.14.4", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "zod": "^4.4.3", }, @@ -4312,8 +4312,8 @@ "@mtsrc/service": "1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -4325,7 +4325,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "pg": "^8.16.3", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "snowflake-uuid": "^1.0.0", "yaml": "^2.8.2", @@ -4792,14 +4792,8 @@ "@bufbuild/protobuf": ["@bufbuild/protobuf@2.11.0", "", {}, "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ=="], - "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@10.5.0", "", { "dependencies": { "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw=="], - - "@chevrotain/gast": ["@chevrotain/gast@10.5.0", "", { "dependencies": { "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A=="], - "@chevrotain/types": ["@chevrotain/types@11.1.2", "", {}, "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="], - "@chevrotain/utils": ["@chevrotain/utils@10.5.0", "", {}, "sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ=="], - "@codemirror/autocomplete": ["@codemirror/autocomplete@6.20.1", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0" } }, "sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A=="], "@codemirror/commands": ["@codemirror/commands@6.10.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", "@codemirror/view": "^6.27.0", "@lezer/common": "^1.1.0" } }, "sha512-vvX1fsih9HledO1c9zdotZYUZnE4xV0m6i3m25s5DIfXofuprk6cRcLUZvSk3CASUbwjQX21tOGbkY2BH8TpnQ=="], @@ -4830,9 +4824,9 @@ "@electric-sql/pglite": ["@electric-sql/pglite@0.3.15", "", {}, "sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ=="], - "@electric-sql/pglite-socket": ["@electric-sql/pglite-socket@0.0.20", "", { "peerDependencies": { "@electric-sql/pglite": "0.3.15" }, "bin": { "pglite-server": "dist/scripts/server.js" } }, "sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg=="], + "@electric-sql/pglite-socket": ["@electric-sql/pglite-socket@0.1.1", "", { "peerDependencies": { "@electric-sql/pglite": "0.4.1" }, "bin": { "pglite-server": "dist/scripts/server.js" } }, "sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw=="], - "@electric-sql/pglite-tools": ["@electric-sql/pglite-tools@0.2.20", "", { "peerDependencies": { "@electric-sql/pglite": "0.3.15" } }, "sha512-BK50ZnYa3IG7ztXhtgYf0Q7zijV32Iw1cYS8C+ThdQlwx12V5VZ9KRJ42y82Hyb4PkTxZQklVQA9JHyUlex33A=="], + "@electric-sql/pglite-tools": ["@electric-sql/pglite-tools@0.3.1", "", { "peerDependencies": { "@electric-sql/pglite": "0.4.1" } }, "sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA=="], "@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="], @@ -5040,6 +5034,8 @@ "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], + "@kurkle/color": ["@kurkle/color@0.3.4", "", {}, "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w=="], + "@lezer/common": ["@lezer/common@1.5.1", "", {}, "sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw=="], "@lezer/highlight": ["@lezer/highlight@1.2.3", "", { "dependencies": { "@lezer/common": "^1.3.0" } }, "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g=="], @@ -5426,8 +5422,6 @@ "@mongodb-js/zstd": ["@mongodb-js/zstd@7.0.0", "", { "dependencies": { "node-addon-api": "^8.5.0", "prebuild-install": "^7.1.3" } }, "sha512-mQ2s0pYYiav+tzCDR05Zptem8Ey2v8s11lri5RKGhTtL4COVCvVCk5vtyRYNT+9L8qSfyOqqefF9UtnW8mC5jA=="], - "@mrleebo/prisma-ast": ["@mrleebo/prisma-ast@0.13.1", "", { "dependencies": { "chevrotain": "^10.5.0", "lilconfig": "^2.1.0" } }, "sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw=="], - "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw=="], "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw=="], @@ -5748,29 +5742,29 @@ "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], - "@prisma/adapter-pg": ["@prisma/adapter-pg@7.5.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "7.5.0", "@types/pg": "8.11.11", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "sha512-EJx7OLULahcC3IjJgdx2qRDNCT+ToY2v66UkeETMCLhNOTgqVzRzYvOEphY7Zp0eHyzfkC33Edd/qqeadf9R4A=="], + "@prisma/adapter-pg": ["@prisma/adapter-pg@7.8.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "7.8.0", "@types/pg": "^8.16.0", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg=="], - "@prisma/client": ["@prisma/client@7.4.2", "", { "dependencies": { "@prisma/client-runtime-utils": "7.4.2" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-ts2mu+cQHriAhSxngO3StcYubBGTWDtu/4juZhXCUKOwgh26l+s4KD3vT2kMUzFyrYnll9u/3qWrtzRv9CGWzA=="], + "@prisma/client": ["@prisma/client@7.8.0", "", { "dependencies": { "@prisma/client-runtime-utils": "7.8.0" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw=="], - "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.4.2", "", {}, "sha512-cID+rzOEb38VyMsx5LwJMEY4NGIrWCNpKu/0ImbeooQ2Px7TI+kOt7cm0NelxUzF2V41UVVXAmYjANZQtCu1/Q=="], + "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.8.0", "", {}, "sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw=="], - "@prisma/config": ["@prisma/config@7.4.2", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.18.4", "empathic": "2.0.0" } }, "sha512-CftBjWxav99lzY1Z4oDgomdb1gh9BJFAOmWF6P2v1xRfXqQb56DfBub+QKcERRdNoAzCb3HXy3Zii8Vb4AsXhg=="], + "@prisma/config": ["@prisma/config@7.8.0", "", { "dependencies": { "c12": "3.3.4", "deepmerge-ts": "7.1.5", "effect": "3.20.0", "empathic": "2.0.0" } }, "sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw=="], - "@prisma/debug": ["@prisma/debug@7.5.0", "", {}, "sha512-163+nffny0JoPEkDhfNco0vcuT3ymIJc9+WX7MHSQhfkeKUmKe9/wqvGk5SjppT93DtBjVwr5HPJYlXbzm6qtg=="], + "@prisma/debug": ["@prisma/debug@7.8.0", "", {}, "sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA=="], - "@prisma/dev": ["@prisma/dev@0.20.0", "", { "dependencies": { "@electric-sql/pglite": "0.3.15", "@electric-sql/pglite-socket": "0.0.20", "@electric-sql/pglite-tools": "0.2.20", "@hono/node-server": "1.19.9", "@mrleebo/prisma-ast": "0.13.1", "@prisma/get-platform": "7.2.0", "@prisma/query-plan-executor": "7.2.0", "foreground-child": "3.3.1", "get-port-please": "3.2.0", "hono": "4.11.4", "http-status-codes": "2.3.0", "pathe": "2.0.3", "proper-lockfile": "4.1.2", "remeda": "2.33.4", "std-env": "3.10.0", "valibot": "1.2.0", "zeptomatch": "2.1.0" } }, "sha512-ovlBYwWor0OzG+yH4J3Ot+AneD818BttLA+Ii7wjbcLHUrnC4tbUPVGyNd3c/+71KETPKZfjhkTSpdS15dmXNQ=="], + "@prisma/dev": ["@prisma/dev@0.24.3", "", { "dependencies": { "@electric-sql/pglite": "0.4.1", "@electric-sql/pglite-socket": "0.1.1", "@electric-sql/pglite-tools": "0.3.1", "@hono/node-server": "1.19.11", "@prisma/get-platform": "7.2.0", "@prisma/query-plan-executor": "7.2.0", "@prisma/streams-local": "0.1.2", "foreground-child": "3.3.1", "get-port-please": "3.2.0", "hono": "^4.12.8", "http-status-codes": "2.3.0", "pathe": "2.0.3", "proper-lockfile": "4.1.2", "remeda": "2.33.4", "std-env": "3.10.0", "valibot": "1.2.0", "zeptomatch": "2.1.0" } }, "sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg=="], "@prisma/dmmf": ["@prisma/dmmf@7.4.2", "", {}, "sha512-EurUPjBwmAd69MM8PLZ5n94xeeQ+7SB3Wd9p2+YsgXhvqCa1cgJRBJiB6fTWkPTz5Lf05ySNJ/59EnuEJMAnrw=="], - "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@7.5.0", "", { "dependencies": { "@prisma/debug": "7.5.0" } }, "sha512-B79N/amgV677mFesFDBAdrW0OIaqawap9E0sjgLBtzIz2R3hIMS1QB8mLZuUEiS4q5Y8Oh3I25Kw4SLxMypk9Q=="], + "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0" } }, "sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A=="], - "@prisma/engines": ["@prisma/engines@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "@prisma/fetch-engine": "7.4.2", "@prisma/get-platform": "7.4.2" } }, "sha512-B+ZZhI4rXlzjVqRw/93AothEKOU5/x4oVyJFGo9RpHPnBwaPwk4Pi0Q4iGXipKxeXPs/dqljgNBjK0m8nocOJA=="], + "@prisma/engines": ["@prisma/engines@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0", "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", "@prisma/fetch-engine": "7.8.0", "@prisma/get-platform": "7.8.0" } }, "sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw=="], - "@prisma/engines-version": ["@prisma/engines-version@7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "", {}, "sha512-5FIKY3KoYQlBuZC2yc16EXfVRQ8HY+fLqgxkYfWCtKhRb3ajCRzP/rPeoSx11+NueJDANdh4hjY36mdmrTcGSg=="], + "@prisma/engines-version": ["@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", "", {}, "sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA=="], "@prisma/extension-read-replicas": ["@prisma/extension-read-replicas@0.5.0", "", { "peerDependencies": { "@prisma/client": "^7.0.0" } }, "sha512-t0kLjqFMte4wwGrZFhya4iFoyoOY4kjlyyE60WXZL66PqP6PcBpW/35eKb/3UcxgjJxcDlaJKfmGokFLOyafiQ=="], - "@prisma/fetch-engine": ["@prisma/fetch-engine@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "@prisma/get-platform": "7.4.2" } }, "sha512-f/c/MwYpdJO7taLETU8rahEstLeXfYgQGlz5fycG7Fbmva3iPdzGmjiSWHeSWIgNnlXnelUdCJqyZnFocurZuA=="], + "@prisma/fetch-engine": ["@prisma/fetch-engine@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0", "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", "@prisma/get-platform": "7.8.0" } }, "sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ=="], "@prisma/generator": ["@prisma/generator@7.4.2", "", {}, "sha512-+4B8Rrq5Ef2cm7cW7Wyu6oXn/QVcDVdNti9mKEkcbPVLlA85I6Rbd+j6r+k2E2nlj0zKZbDbq8fIx/Xnt1SmkA=="], @@ -5782,7 +5776,9 @@ "@prisma/query-plan-executor": ["@prisma/query-plan-executor@7.2.0", "", {}, "sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ=="], - "@prisma/studio-core": ["@prisma/studio-core@0.13.1", "", { "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-agdqaPEePRHcQ7CexEfkX1RvSH9uWDb6pXrZnhCRykhDFAV0/0P3d07WtfiY8hZWb7oRU4v+NkT4cGFHkQJIPg=="], + "@prisma/streams-local": ["@prisma/streams-local@0.1.2", "", { "dependencies": { "ajv": "^8.12.0", "better-result": "^2.7.0", "env-paths": "^3.0.0", "proper-lockfile": "^4.1.2" } }, "sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg=="], + + "@prisma/studio-core": ["@prisma/studio-core@0.27.3", "", { "dependencies": { "@radix-ui/react-toggle": "1.1.10", "chart.js": "4.5.1" }, "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw=="], "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], @@ -6706,6 +6702,8 @@ "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], + "better-result": ["better-result@2.9.2", "", {}, "sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q=="], + "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], @@ -6752,7 +6750,7 @@ "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - "c12": ["c12@3.1.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.6.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw=="], + "c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], "c8": ["c8@9.1.0", "", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", "foreground-child": "^3.1.1", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.1.6", "test-exclude": "^6.0.0", "v8-to-istanbul": "^9.0.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1" }, "bin": { "c8": "bin/c8.js" } }, "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg=="], @@ -6796,16 +6794,14 @@ "chardet": ["chardet@2.1.1", "", {}, "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ=="], - "check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], + "chart.js": ["chart.js@4.5.1", "", { "dependencies": { "@kurkle/color": "^0.3.0" } }, "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw=="], - "chevrotain": ["chevrotain@10.5.0", "", { "dependencies": { "@chevrotain/cst-dts-gen": "10.5.0", "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "@chevrotain/utils": "10.5.0", "lodash": "4.17.21", "regexp-to-ast": "0.5.0" } }, "sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A=="], + "check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], - "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], - "cjs-module-lexer": ["cjs-module-lexer@2.2.0", "", {}, "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ=="], "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], @@ -7032,7 +7028,7 @@ "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "defu": ["defu@6.1.7", "", {}, "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ=="], "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], @@ -7094,7 +7090,7 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "effect": ["effect@3.18.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA=="], + "effect": ["effect@3.20.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw=="], "ejs": ["ejs@5.0.1", "", { "bin": { "ejs": "bin/cli.js" } }, "sha512-COqBPFMxuPTPspXl2DkVYaDS3HtrD1GpzOGkNTJ1IYkifq/r9h8SVEFrjA3D9/VJGOEoMQcrlhpntcSUrM8k6A=="], @@ -7116,7 +7112,7 @@ "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], @@ -7348,7 +7344,7 @@ "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], + "giget": ["giget@3.2.0", "", { "bin": { "giget": "dist/cli.mjs" } }, "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A=="], "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], @@ -7458,7 +7454,7 @@ "hoist-non-react-statics": ["hoist-non-react-statics@3.3.2", "", { "dependencies": { "react-is": "^16.7.0" } }, "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="], - "hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], + "hono": ["hono@4.12.23", "", {}, "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA=="], "hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], @@ -8080,8 +8076,6 @@ "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], - "node-forge": ["node-forge@1.3.1", "", {}, "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA=="], "node-gyp": ["node-gyp@8.4.1", "", { "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w=="], @@ -8120,8 +8114,6 @@ "nx": ["nx@22.7.3", "", { "dependencies": { "@emnapi/core": "1.4.5", "@emnapi/runtime": "1.4.5", "@emnapi/wasi-threads": "1.0.4", "@jest/diff-sequences": "30.0.1", "@napi-rs/wasm-runtime": "0.2.4", "@tybys/wasm-util": "0.9.0", "@yarnpkg/lockfile": "1.1.0", "@zkochan/js-yaml": "0.0.7", "ansi-colors": "4.1.3", "ansi-regex": "5.0.1", "ansi-styles": "4.3.0", "argparse": "2.0.1", "asynckit": "0.4.0", "axios": "1.16.0", "balanced-match": "4.0.3", "base64-js": "1.5.1", "bl": "4.1.0", "brace-expansion": "5.0.5", "buffer": "5.7.1", "call-bind-apply-helpers": "1.0.2", "chalk": "4.1.2", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "8.0.1", "clone": "1.0.4", "color-convert": "2.0.1", "color-name": "1.1.4", "combined-stream": "1.0.8", "defaults": "1.0.4", "define-lazy-prop": "2.0.0", "delayed-stream": "1.0.0", "dotenv": "16.4.7", "dotenv-expand": "12.0.3", "dunder-proto": "1.0.1", "ejs": "5.0.1", "emoji-regex": "8.0.0", "end-of-stream": "1.4.5", "enquirer": "2.3.6", "es-define-property": "1.0.1", "es-errors": "1.3.0", "es-object-atoms": "1.1.1", "es-set-tostringtag": "2.1.0", "escalade": "3.2.0", "escape-string-regexp": "1.0.5", "figures": "3.2.0", "flat": "5.0.2", "follow-redirects": "1.16.0", "form-data": "4.0.5", "fs-constants": "1.0.0", "function-bind": "1.1.2", "get-caller-file": "2.0.5", "get-intrinsic": "1.3.0", "get-proto": "1.0.1", "gopd": "1.2.0", "has-flag": "4.0.0", "has-symbols": "1.1.0", "has-tostringtag": "1.0.2", "hasown": "2.0.2", "ieee754": "1.2.1", "ignore": "7.0.5", "inherits": "2.0.4", "is-docker": "2.2.1", "is-fullwidth-code-point": "3.0.0", "is-interactive": "1.0.0", "is-unicode-supported": "0.1.0", "is-wsl": "2.2.0", "json5": "2.2.3", "jsonc-parser": "3.2.0", "lines-and-columns": "2.0.3", "log-symbols": "4.1.0", "math-intrinsics": "1.1.0", "mime-db": "1.52.0", "mime-types": "2.1.35", "mimic-fn": "2.1.0", "minimatch": "10.2.5", "minimist": "1.2.8", "npm-run-path": "4.0.1", "once": "1.4.0", "onetime": "5.1.2", "open": "8.4.2", "ora": "5.3.0", "path-key": "3.1.1", "picocolors": "1.1.1", "proxy-from-env": "2.1.0", "readable-stream": "3.6.2", "require-directory": "2.1.1", "resolve.exports": "2.0.3", "restore-cursor": "3.1.0", "safe-buffer": "5.2.1", "semver": "7.7.4", "signal-exit": "3.0.7", "smol-toml": "1.6.1", "string-width": "4.2.3", "string_decoder": "1.3.0", "strip-ansi": "6.0.1", "strip-bom": "3.0.0", "supports-color": "7.2.0", "tar-stream": "2.2.0", "tmp": "0.2.4", "tree-kill": "1.2.2", "tsconfig-paths": "4.2.0", "tslib": "2.8.1", "util-deprecate": "1.0.2", "wcwidth": "1.0.1", "wrap-ansi": "7.0.0", "wrappy": "1.0.2", "y18n": "5.0.8", "yaml": "2.8.0", "yargs": "17.7.2", "yargs-parser": "21.1.1" }, "optionalDependencies": { "@nx/nx-darwin-arm64": "22.7.3", "@nx/nx-darwin-x64": "22.7.3", "@nx/nx-freebsd-x64": "22.7.3", "@nx/nx-linux-arm-gnueabihf": "22.7.3", "@nx/nx-linux-arm64-gnu": "22.7.3", "@nx/nx-linux-arm64-musl": "22.7.3", "@nx/nx-linux-x64-gnu": "22.7.3", "@nx/nx-linux-x64-musl": "22.7.3", "@nx/nx-win32-arm64-msvc": "22.7.3", "@nx/nx-win32-x64-msvc": "22.7.3" }, "peerDependencies": { "@swc-node/register": "^1.11.1", "@swc/core": "^1.15.8" }, "optionalPeers": ["@swc-node/register", "@swc/core"], "bin": { "nx": "./dist/bin/nx.js", "nx-cloud": "./dist/bin/nx-cloud.js" } }, "sha512-yo2XWmxFF01D2i5YBk34Dz1K7YX2u7BoBuCSbD819lIus9B8LNJ7BzbnWfDFXOcvuGoLXqIxO2ElPqpkx5e5JQ=="], - "nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], - "oauth4webapi": ["oauth4webapi@3.8.5", "", {}, "sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -8134,8 +8126,6 @@ "obliterator": ["obliterator@1.6.1", "", {}, "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="], - "obuf": ["obuf@1.1.2", "", {}, "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="], - "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], @@ -8224,7 +8214,7 @@ "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], - "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + "perfect-debounce": ["perfect-debounce@2.1.0", "", {}, "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g=="], "pg": ["pg@8.19.0", "", { "dependencies": { "pg-connection-string": "^2.11.0", "pg-pool": "^3.12.0", "pg-protocol": "^1.12.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ=="], @@ -8234,8 +8224,6 @@ "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], - "pg-numeric": ["pg-numeric@1.0.2", "", {}, "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw=="], - "pg-pool": ["pg-pool@3.12.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg=="], "pg-protocol": ["pg-protocol@1.12.0", "", {}, "sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg=="], @@ -8350,8 +8338,6 @@ "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], - "postgres-range": ["postgres-range@1.1.4", "", {}, "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="], - "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], @@ -8364,7 +8350,7 @@ "prism-react-renderer": ["prism-react-renderer@2.4.1", "", { "dependencies": { "@types/prismjs": "^1.26.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": ">=16.0.0" } }, "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig=="], - "prisma": ["prisma@7.4.2", "", { "dependencies": { "@prisma/config": "7.4.2", "@prisma/dev": "0.20.0", "@prisma/engines": "7.4.2", "@prisma/studio-core": "0.13.1", "mysql2": "3.15.3", "postgres": "3.4.7" }, "peerDependencies": { "better-sqlite3": ">=9.0.0", "typescript": ">=5.4.0" }, "optionalPeers": ["better-sqlite3", "typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-2bP8Ruww3Q95Z2eH4Yqh4KAENRsj/SxbdknIVBfd6DmjPwmpsC4OVFMLOeHt6tM3Amh8ebjvstrUz3V/hOe1dA=="], + "prisma": ["prisma@7.8.0", "", { "dependencies": { "@prisma/config": "7.8.0", "@prisma/dev": "0.24.3", "@prisma/engines": "7.8.0", "@prisma/studio-core": "0.27.3", "mysql2": "3.15.3", "postgres": "3.4.7" }, "peerDependencies": { "better-sqlite3": ">=9.0.0", "typescript": ">=5.4.0" }, "optionalPeers": ["better-sqlite3", "typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw=="], "prisma-json-types-generator": ["prisma-json-types-generator@4.1.1", "", { "dependencies": { "@prisma/generator-helper": "^7.2.0", "semver": "^7.7.3", "try": "^1.0.3", "tslib": "^2.8.1" }, "peerDependencies": { "@prisma/client": "^7.2.0", "prisma": "^7.2.0", "typescript": "^5.9.3" }, "bin": { "prisma-json-types-generator": "index.js" } }, "sha512-oz0MYu1r2Jqu3qOGCEGulz6RjPsECVjyS3ZAz3HEmz0jkKbVkZEwQyksNJm0X5utV1TZCmaG/98EPExN7S22xw=="], @@ -8458,7 +8444,7 @@ "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], + "rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], "re2js": ["re2js@1.4.0", "", {}, "sha512-KTOIcZTSOpOxbu3i0+T6mFQ6tkxXKlTxfcMFs1trQbsMnG84qNq+DjXr8Afu+FEFjvF1NNlldpC7roPyazFI8g=="], @@ -8534,8 +8520,6 @@ "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.2", "", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g=="], - "regexp-to-ast": ["regexp-to-ast@0.5.0", "", {}, "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw=="], - "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], "regexpu-core": ["regexpu-core@6.4.0", "", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" } }, "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA=="], @@ -9676,13 +9660,9 @@ "@boxyhq/saml-jackson/redis": ["redis@4.7.0", "", { "dependencies": { "@redis/bloom": "1.2.0", "@redis/client": "1.6.0", "@redis/graph": "1.1.1", "@redis/json": "1.0.7", "@redis/search": "1.2.0", "@redis/time-series": "1.1.0" } }, "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ=="], - "@chevrotain/cst-dts-gen/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], - - "@chevrotain/cst-dts-gen/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - - "@chevrotain/gast/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], + "@electric-sql/pglite-socket/@electric-sql/pglite": ["@electric-sql/pglite@0.4.1", "", {}, "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q=="], - "@chevrotain/gast/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "@electric-sql/pglite-tools/@electric-sql/pglite": ["@electric-sql/pglite@0.4.1", "", {}, "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q=="], "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], @@ -9842,6 +9822,8 @@ "@metorial/api-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/api-connection/hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], + "@metorial/api-core/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], "@metorial/api-custom-portal/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -9912,8 +9894,6 @@ "@metorial/data-hooks/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/db/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], - "@metorial/db/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], "@metorial/db/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -10022,8 +10002,6 @@ "@metorial/module-user/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/multi-region/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], - "@metorial/multi-region/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@metorial/origin/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], @@ -10100,14 +10078,14 @@ "@metorial/voyager/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@modelcontextprotocol/sdk/hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], + "@modelcontextprotocol/sdk/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], "@modelcontextprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "@mongodb-js/zstd/node-addon-api": ["node-addon-api@8.7.0", "", {}, "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA=="], - "@mrleebo/prisma-ast/lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], - "@mtsrc/anonymize-ip/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@mtsrc/anonymize-ip/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -10382,19 +10360,13 @@ "@opentelemetry/sdk-metrics/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], - "@prisma/adapter-pg/@types/pg": ["@types/pg@8.11.11", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^4.0.1" } }, "sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw=="], - - "@prisma/dev/@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="], - - "@prisma/dev/hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], + "@prisma/dev/@electric-sql/pglite": ["@electric-sql/pglite@0.4.1", "", {}, "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q=="], - "@prisma/engines/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], + "@prisma/dev/@hono/node-server": ["@hono/node-server@1.19.11", "", { "peerDependencies": { "hono": "^4" } }, "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g=="], - "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], + "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0" } }, "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw=="], - "@prisma/fetch-engine/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], - - "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], + "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0" } }, "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw=="], "@prisma/generator-helper/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], @@ -10622,7 +10594,7 @@ "bun-types/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "c12/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "c12/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], "c12/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], @@ -10634,10 +10606,6 @@ "cacache/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - "chevrotain/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], - - "chevrotain/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "concat-with-sourcemaps/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], @@ -10836,6 +10804,8 @@ "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "node-gyp/env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + "node-gyp/nopt": ["nopt@5.0.0", "", { "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="], "node-gyp/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], @@ -10860,8 +10830,6 @@ "nx/yaml": ["yaml@2.8.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ=="], - "nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], - "openid-client/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], "ora/cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], @@ -12430,8 +12398,6 @@ "@metorial/data-hooks/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], - "@metorial/db/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], "@metorial/db/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], @@ -13074,8 +13040,6 @@ "@metorial/module-user/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], - "@metorial/origin/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "@metorial/pages/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], @@ -14416,8 +14380,6 @@ "@opentelemetry/sdk-metrics/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@prisma/adapter-pg/@types/pg/pg-types": ["pg-types@4.1.0", "", { "dependencies": { "pg-int8": "1.0.1", "pg-numeric": "1.0.2", "postgres-array": "~3.0.1", "postgres-bytea": "~3.0.0", "postgres-date": "~2.1.0", "postgres-interval": "^3.0.0", "postgres-range": "^1.1.1" } }, "sha512-o2XFanIMy/3+mThw69O8d4n1E5zsLhdO+OPqswezu7Z5ekP4hYDqlDjlmOpYMbzY2Br0ufCwJLdDIXeNVwcWFg=="], - "@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.207.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ=="], "@radix-ui/react-visually-hidden/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], @@ -14552,6 +14514,8 @@ "bun-types/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "c12/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="], @@ -15280,8 +15244,6 @@ "@metorial/data-hooks/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], - "@metorial/db/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial/db/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -15418,8 +15380,6 @@ "@metorial/module-user/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], - "@metorial/pages/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial/pages/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -15698,12 +15658,6 @@ "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@prisma/adapter-pg/@types/pg/pg-types/postgres-bytea": ["postgres-bytea@3.0.0", "", { "dependencies": { "obuf": "~1.1.2" } }, "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw=="], - - "@prisma/adapter-pg/@types/pg/pg-types/postgres-date": ["postgres-date@2.1.0", "", {}, "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA=="], - - "@prisma/adapter-pg/@types/pg/pg-types/postgres-interval": ["postgres-interval@3.0.0", "", {}, "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw=="], - "@sentry/bundler-plugin-core/@sentry/cli/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], diff --git a/deployment/skeleton/package.json b/deployment/skeleton/package.json index 10b3513d2..97d6d5d71 100644 --- a/deployment/skeleton/package.json +++ b/deployment/skeleton/package.json @@ -9,8 +9,8 @@ "start": "bun run server:start" }, "dependencies": { - "@prisma/client": "^7.4.1", - "prisma": "^7.4.1", + "@prisma/client": "7.8.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.1.1", "typescript": "^5.1.6" }, diff --git a/src/backend/db/package.json b/src/backend/db/package.json index 3e47e7832..9970324ad 100644 --- a/src/backend/db/package.json +++ b/src/backend/db/package.json @@ -13,14 +13,14 @@ "dependencies": { "@metorial/id": "^1.0.0", "@modelcontextprotocol/sdk": "^1.11.4", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@types/json-schema": "^7.0.15", "json-schema": "^0.4.0", "lru-cache": "^11.1.0", "p-queue": "^8.1.0", "@prisma/extension-read-replicas": "^0.5.0", - "prisma": "^7.4.1", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.1.1", "@mtsrc/snowflake": "1.0.0", "@mtsrc/execution-context": "1.0.0" diff --git a/src/backend/multi-region/package.json b/src/backend/multi-region/package.json index a3b724e59..d6d3bdd4d 100644 --- a/src/backend/multi-region/package.json +++ b/src/backend/multi-region/package.json @@ -16,13 +16,13 @@ "@metorial/context": "^1.0.0", "@metorial/cron": "^1.0.0", "@metorial/id": "^1.0.0", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@types/pg": "^8.11.11", "@types/bun": "^1.2.12", "pg": "^8.11.3", - "prisma": "^7.4.1", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.1.1", "stripe": "^18.5.0", "typescript": "^5.8.3", diff --git a/src/systems/ares/service/package.json b/src/systems/ares/service/package.json index 0ef3b45b6..e88c6e4e3 100644 --- a/src/systems/ares/service/package.json +++ b/src/systems/ares/service/package.json @@ -51,8 +51,8 @@ "@metorial-io/ui": "^1.0.0", "@metorial-io/ui-product": "^1.0.0", "@metorial-platform-systems/relay-client": "workspace:*", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "@types/ua-parser-js": "^0.7.39", @@ -62,7 +62,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.4.1", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.0.0", "react-dom": "^19.0.0", diff --git a/src/systems/cargo/db/package.json b/src/systems/cargo/db/package.json index b21f25bd6..d59f626d2 100644 --- a/src/systems/cargo/db/package.json +++ b/src/systems/cargo/db/package.json @@ -18,11 +18,11 @@ "typescript": "^5" }, "dependencies": { - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "p-queue": "^9.1.0", - "prisma": "^7.2.0", + "prisma": "7.8.0", "@mtsrc/env": "1.0.0", "@mtsrc/error": "1.0.0", "@mtsrc/execution-context": "1.0.0", diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index c9d38315e..70aa92286 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -38,13 +38,13 @@ "typescript": "^5" }, "dependencies": { - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.8.0", "@metorial-cargo/db": "^1.0.0", "@metorial-cargo/module-file": "^1.0.0", "@metorial-cargo/module-doc": "^1.0.0", diff --git a/src/systems/forge/service/package.json b/src/systems/forge/service/package.json index 4666780ff..4c50ddbf6 100644 --- a/src/systems/forge/service/package.json +++ b/src/systems/forge/service/package.json @@ -38,8 +38,8 @@ "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-codebuild": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -48,7 +48,7 @@ "jszip": "^3.10.1", "mongoose": "^9.0.2", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.8.0", "yaml": "^2.8.2", "@mtsrc/api-mux": "1.0.0", "@mtsrc/cron": "1.0.0", diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index cf8faa8aa..0837ace40 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -42,8 +42,8 @@ "@aws-sdk/client-lambda": "^3.958.0", "@function-bay/types": "^1.0.0", "@metorial-platform-systems/forge-client": "workspace:*", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -55,7 +55,7 @@ "jszip": "^3.10.1", "lodash": "4.17.21", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "undici": "^8.1.0", "yaml": "^2.8.2", diff --git a/src/systems/origin/apps/service/package.json b/src/systems/origin/apps/service/package.json index bb26e00e3..13d0ee0ea 100644 --- a/src/systems/origin/apps/service/package.json +++ b/src/systems/origin/apps/service/package.json @@ -39,8 +39,8 @@ "@grpc/grpc-js": "^1.13.4", "@octokit/auth-app": "^8.1.2", "@octokit/core": "^7.0.6", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "axios": "^1.13.2", @@ -51,7 +51,7 @@ "nice-grpc": "^2.1.12", "@metorial-platform-systems/object-storage-client": "workspace:*", "pg": "^8.18.0", - "prisma": "^7.4.1", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "protobufjs": "^7.5.3", "yaml": "^2.8.2", diff --git a/src/systems/relay/service/package.json b/src/systems/relay/service/package.json index 2f6a08990..825db9b84 100644 --- a/src/systems/relay/service/package.json +++ b/src/systems/relay/service/package.json @@ -37,8 +37,8 @@ "@aws-sdk/client-lambda": "^3.958.0", "@aws-sdk/client-ses": "^3.985.0", "@metorial-services/forge-client": "^1.0.3", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@sentry/bun": "^10.38.0", "@types/nodemailer": "^7.0.9", "axios": "^1.13.2", @@ -47,7 +47,7 @@ "jszip": "^3.10.1", "nodemailer": "^8.0.1", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", "@mtsrc/api-mux": "1.0.0", diff --git a/src/systems/shuttle/service/package.json b/src/systems/shuttle/service/package.json index 572a7897d..7c5925492 100644 --- a/src/systems/shuttle/service/package.json +++ b/src/systems/shuttle/service/package.json @@ -44,8 +44,8 @@ "@metorial-platform-systems/function-bay-client": "workspace:*", "@metorial/mcp-server": "^1.0.0-rc.11", "@modelcontextprotocol/sdk": "^1.25.3", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -60,7 +60,7 @@ "@metorial-platform-systems/object-storage-client": "workspace:*", "p-queue": "^9.1.0", "pg": "^8.16.3", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "ws": "^8.19.0", "yaml": "^2.8.2", diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index 7eb555bb8..ada69bb9b 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -38,8 +38,8 @@ "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -48,7 +48,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", "@mtsrc/api-mux": "1.0.0", diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index f128e346e..fb2df745d 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -57,8 +57,8 @@ "@metorial-platform-systems/signal-client": "workspace:*", "@metorial-services/slates-registry-client": "latest", "@metorial-services/slates-registry-internal-client": "^1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", @@ -72,7 +72,7 @@ "lodash": "4.17.21", "@metorial-platform-systems/object-storage-client": "workspace:*", "p-queue": "^9.0.1", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", diff --git a/src/systems/slates/apps/registry/package.json b/src/systems/slates/apps/registry/package.json index cd1623c97..3be325303 100644 --- a/src/systems/slates/apps/registry/package.json +++ b/src/systems/slates/apps/registry/package.json @@ -51,8 +51,8 @@ "@metorial-io/ui-product": "^1.0.0", "@metorial-platform-systems/ares-client": "^1.0.0", "@metorial/util-endpoint": "^1.0.1", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", "@sentry/cli": "^3.2.0", @@ -63,7 +63,7 @@ "jszip": "^3.10.1", "lodash-es": "^4.17.22", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", diff --git a/src/systems/subspace/apps/controller/package.json b/src/systems/subspace/apps/controller/package.json index 8bf5c45c4..de145e767 100644 --- a/src/systems/subspace/apps/controller/package.json +++ b/src/systems/subspace/apps/controller/package.json @@ -21,7 +21,7 @@ "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", "@metorial-subspace/retry-utils": "^1.0.0", - "@prisma/adapter-pg": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", diff --git a/src/systems/subspace/apps/dev/package.json b/src/systems/subspace/apps/dev/package.json index 07d42286f..be8ff92e9 100644 --- a/src/systems/subspace/apps/dev/package.json +++ b/src/systems/subspace/apps/dev/package.json @@ -13,7 +13,7 @@ "@metorial-subspace/connection-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", - "@prisma/adapter-pg": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", diff --git a/src/systems/subspace/db/package.json b/src/systems/subspace/db/package.json index 7f198653d..c8ed4ddec 100644 --- a/src/systems/subspace/db/package.json +++ b/src/systems/subspace/db/package.json @@ -19,12 +19,12 @@ "dependencies": { "@metorial-subspace/tsconfig": "^1.0.0", "@modelcontextprotocol/sdk": "^1.25.2", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "dotenv": "^17.2.3", "p-queue": "^9.1.0", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "@mtsrc/env": "1.0.0", "@mtsrc/error": "1.0.0", diff --git a/src/systems/synthesis/service/package.json b/src/systems/synthesis/service/package.json index 136d34f23..80c1dca27 100644 --- a/src/systems/synthesis/service/package.json +++ b/src/systems/synthesis/service/package.json @@ -37,15 +37,15 @@ "dependencies": { "@metorial-services/scout-client": "^1.0.0", "@openharness/core": "^0.6.2", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "ai": "^6.0.175", "hono": "^4.9.6", "just-bash": "^2.14.4", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "zod": "^4.4.3", "@mtsrc/error": "1.0.0", diff --git a/src/systems/voyager/service/package.json b/src/systems/voyager/service/package.json index aa885d74c..8b36cf450 100644 --- a/src/systems/voyager/service/package.json +++ b/src/systems/voyager/service/package.json @@ -37,8 +37,8 @@ "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", "@metorial-services/forge-client": "^1.0.3", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.8.0", + "@prisma/client": "7.8.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -51,7 +51,7 @@ "jszip": "^3.10.1", "@metorial-platform-systems/object-storage-client": "workspace:*", "pg": "^8.16.3", - "prisma": "^7.2.0", + "prisma": "7.8.0", "prisma-json-types-generator": "^4.0.1", "snowflake-uuid": "^1.0.0", "yaml": "^2.8.2", From 0e86c71fdee4eda60a1b00e569049d4428cbc4d4 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 25 May 2026 11:53:08 +0200 Subject: [PATCH 32/69] Maybe --- .../forge/service/vitest.e2e.config.ts | 1 + .../shuttle/service/vitest.e2e.config.ts | 1 + .../subspace/apps/controller/control.toml | 24 ++++++++++++++----- src/systems/subspace/apps/public/control.toml | 21 ++++++++++++---- src/systems/subspace/apps/worker/control.toml | 4 ++-- 5 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/systems/forge/service/vitest.e2e.config.ts b/src/systems/forge/service/vitest.e2e.config.ts index 7d9703773..28f43cb8e 100644 --- a/src/systems/forge/service/vitest.e2e.config.ts +++ b/src/systems/forge/service/vitest.e2e.config.ts @@ -7,6 +7,7 @@ export default defineConfig(({ mode }) => { return createVitestConfig({ test: { pool: 'forks', + fileParallelism: false, include: ['src/**/*.e2e.test.ts'], setupFiles: ['./src/test/setup.ts'], env: { diff --git a/src/systems/shuttle/service/vitest.e2e.config.ts b/src/systems/shuttle/service/vitest.e2e.config.ts index 08baa5fc2..8ac7ef0bb 100644 --- a/src/systems/shuttle/service/vitest.e2e.config.ts +++ b/src/systems/shuttle/service/vitest.e2e.config.ts @@ -8,6 +8,7 @@ export default defineConfig(({ mode }) => { let config = createVitestConfig({ test: { pool: 'forks', + fileParallelism: false, include: ['src/**/*.e2e.test.ts'], setupFiles: ['./src/test/setup.ts'], env: { diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index 7d6f98b24..005348bd1 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -15,20 +15,28 @@ target = "server:build" dockerfile = "Dockerfile" extra_paths = [ "//oss/src/systems/_shared/entityImage.ts", - "//oss/src/systems/subspace/test-servers" + "//oss/src/systems/subspace/test-servers", ] [[build.automations]] name = "subspace-controller-prisma" kind = "run-targets" target = "prisma:generate" -projects = ["@metorial-subspace/db", "@metorial/slates", "@metorial/forge", "@metorial/function-bay", "@metorial/signal", "@metorial/synthesis", "@metorial-cargo/service"] +projects = [ + "@metorial-subspace/db", + "@metorial/slates", + "@metorial/forge", + "@metorial/function-bay", + "@metorial/signal", + "@metorial/synthesis", + "@metorial-cargo/service", +] [build.artifacts] copy = [ { from = "dist", to = "/app/dist" }, { from = "../../db", to = "/app/db" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "/app/node_modules", to = "/app/node_modules" }, ] [build.runtime] @@ -45,8 +53,8 @@ command = "bun run test:unit" [test.e2e] command = "set -a && . ./.env.ci && set +a && bun run test:ci" setup = [ - "bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", - "bunx prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts" + "bun prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", + "bun prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", ] cwd = "/app/src/systems/subspace/apps/controller" runner = "sidecar" @@ -180,4 +188,8 @@ CARGO_API_URL = "http://$deps.cargo.52150/metorial-cargo" [[deps]] name = "mcp-test-server" -inline = { build = { context = "oss", dockerfile = "src/systems/subspace/apps/controller/Dockerfile", target = "workspace" }, command = ["sh", "-c", "PORT=52198 bun /app/src/systems/subspace/test-servers/index.ts"], port = 52198, health = { cmd = "bun -e \"fetch('http://localhost:52198/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } } +inline = { build = { context = "oss", dockerfile = "src/systems/subspace/apps/controller/Dockerfile", target = "workspace" }, command = [ + "sh", + "-c", + "PORT=52198 bun /app/src/systems/subspace/test-servers/index.ts", +], port = 52198, health = { cmd = "bun -e \"fetch('http://localhost:52198/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" } } diff --git a/src/systems/subspace/apps/public/control.toml b/src/systems/subspace/apps/public/control.toml index 19fd46d2f..f5c66ece5 100644 --- a/src/systems/subspace/apps/public/control.toml +++ b/src/systems/subspace/apps/public/control.toml @@ -14,13 +14,24 @@ context = "oss" project = "@metorial-subspace/app-public" target = "server:build" dockerfile = "Dockerfile" -extra_paths = ["//oss/src/packages/frontend/ui", "//oss/src/systems/_shared/entityImage.ts"] +extra_paths = [ + "//oss/src/packages/frontend/ui", + "//oss/src/systems/_shared/entityImage.ts", +] [[build.automations]] name = "subspace-public-prisma" kind = "run-targets" target = "prisma:generate" -projects = ["@metorial-subspace/db", "@metorial/slates", "@metorial/forge", "@metorial/function-bay", "@metorial/signal", "@metorial/synthesis", "@metorial-cargo/service"] +projects = [ + "@metorial-subspace/db", + "@metorial/slates", + "@metorial/forge", + "@metorial/function-bay", + "@metorial/signal", + "@metorial/synthesis", + "@metorial-cargo/service", +] [[build.automations]] name = "subspace-public-frontend" @@ -34,7 +45,7 @@ copy = [ { from = "frontend/dist", to = "/app/frontend/dist" }, { from = "../../db", to = "/app/db" }, { from = "../../../../packages/frontend/ui", to = "/app/src/packages/frontend/ui" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "/app/node_modules", to = "/app/node_modules" }, ] [build.runtime] @@ -51,8 +62,8 @@ command = "bun run test:unit" [test.e2e] command = "bun run test:e2e" setup = [ - "bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", - "bunx prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts" + "bun prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", + "bun prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", ] cwd = "/app/src/systems/subspace/apps/public" runner = "service" diff --git a/src/systems/subspace/apps/worker/control.toml b/src/systems/subspace/apps/worker/control.toml index fb60a54f4..a3f316f7a 100644 --- a/src/systems/subspace/apps/worker/control.toml +++ b/src/systems/subspace/apps/worker/control.toml @@ -41,8 +41,8 @@ command = "bun run test:unit" [test.e2e] command = "bun run test:e2e" setup = [ - "bunx prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", - "bunx prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts" + "bun prisma db push --schema ../../db/prisma/schema --config ../../db/prisma.config.ts", + "bun prisma generate --schema ../../db/prisma/schema --config ../../db/prisma.config.ts" ] cwd = "/app/src/systems/subspace/apps/worker" runner = "service" From 800562169789aa730fa74722d1ad23fd5938198a Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Tue, 26 May 2026 08:57:51 +0200 Subject: [PATCH 33/69] Revert "Bump prisma" This reverts commit cbba684c9e4c7375c105a42f9aeccff2e9ffecf4. --- .github/workflows/test.yml | 29 +-- bun.lock | 236 +++++++++++------- deployment/skeleton/package.json | 4 +- src/backend/db/package.json | 6 +- src/backend/multi-region/package.json | 6 +- src/systems/ares/service/package.json | 6 +- src/systems/cargo/db/package.json | 6 +- src/systems/cargo/service/package.json | 6 +- src/systems/forge/service/package.json | 6 +- src/systems/function-bay/service/package.json | 6 +- src/systems/origin/apps/service/package.json | 6 +- src/systems/relay/service/package.json | 6 +- src/systems/shuttle/service/package.json | 6 +- src/systems/signal/service/package.json | 6 +- src/systems/slates/apps/hub/package.json | 6 +- src/systems/slates/apps/registry/package.json | 6 +- .../subspace/apps/controller/package.json | 2 +- src/systems/subspace/apps/dev/package.json | 2 +- src/systems/subspace/db/package.json | 6 +- src/systems/synthesis/service/package.json | 6 +- src/systems/voyager/service/package.json | 6 +- 21 files changed, 196 insertions(+), 173 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 337a81661..b643945ba 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,36 +30,13 @@ jobs: - name: Install Packages run: bun i --linker=hoisted - - name: Resolve non-system Nx projects - id: nx-projects - run: | - bun x nx graph --file=stdout | bun -e ' - let input = await Bun.stdin.text(); - let nodes = JSON.parse(input).graph.nodes; - let targets = { - "prisma:generate": "prisma_generate", - build: "build", - test: "test" - }; - - for (let [target, output] of Object.entries(targets)) { - let projects = Object.values(nodes) - .filter(node => !node.data.root.startsWith("src/systems/")) - .filter(node => node.data.targets?.[target]) - .map(node => node.name) - .join(","); - - console.log(`${output}=${projects}`); - } - ' >> "$GITHUB_OUTPUT" - - name: Generate Prisma Clients run: | - bun x nx run-many --target=prisma:generate --projects='${{ steps.nx-projects.outputs.prisma_generate }}' --parallel=1 + bunx turbo run --ui=stream prisma:generate --filter=!./src/systems/** bun run --cwd ./src/systems/cargo/db prisma:generate - name: Build Packages - run: bun x nx run-many --target=build --projects='${{ steps.nx-projects.outputs.build }}' + run: bunx turbo run --ui=stream build --filter=!./src/systems/** - name: Test - run: bun x nx run-many --target=test --projects='${{ steps.nx-projects.outputs.test }}' --parallel=1 + run: bunx turbo run --concurrency=1 --ui=stream test --filter=!./src/systems/** diff --git a/bun.lock b/bun.lock index fa94b682a..304d50c68 100644 --- a/bun.lock +++ b/bun.lock @@ -931,14 +931,14 @@ "@modelcontextprotocol/sdk": "^1.11.4", "@mtsrc/execution-context": "1.0.0", "@mtsrc/snowflake": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "6.19.0", + "@prisma/client": "^7.4.1", "@prisma/extension-read-replicas": "^0.5.0", "@types/json-schema": "^7.0.15", "json-schema": "^0.4.0", "lru-cache": "^11.1.0", "p-queue": "^8.1.0", - "prisma": "7.8.0", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.1.1", }, "devDependencies": { @@ -1403,13 +1403,13 @@ "@mtsrc/shadow-id": "1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "6.19.0", + "@prisma/client": "^7.4.1", "@prisma/extension-read-replicas": "^0.5.0", "@types/bun": "^1.2.12", "@types/pg": "^8.11.11", "pg": "^8.11.3", - "prisma": "7.8.0", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.1.1", "stripe": "^18.5.0", "typescript": "^5.8.3", @@ -2415,8 +2415,8 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.4.1", + "@prisma/client": "^7.4.1", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "@types/ua-parser-js": "^0.7.39", @@ -2425,7 +2425,7 @@ "input-otp": "^1.4.2", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "prisma": "7.8.0", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", "react": "^19.0.0", "react-dom": "^19.0.0", @@ -2458,11 +2458,11 @@ "@mtsrc/id": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "p-queue": "^9.1.0", - "prisma": "7.8.0", + "prisma": "^7.2.0", }, "devDependencies": { "@types/bun": "latest", @@ -2635,12 +2635,12 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", - "prisma": "7.8.0", + "prisma": "^7.2.0", }, "devDependencies": { "@mtsrc/testing-tools": "1.0.0", @@ -2679,8 +2679,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -2688,7 +2688,7 @@ "date-fns": "^4.1.0", "jszip": "^3.10.1", "mongoose": "^9.0.2", - "prisma": "7.8.0", + "prisma": "^7.2.0", "yaml": "^2.8.2", }, "devDependencies": { @@ -2823,8 +2823,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -2835,7 +2835,7 @@ "jose": "^6.2.2", "jszip": "^3.10.1", "lodash": "4.17.21", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "undici": "^8.1.0", "yaml": "^2.8.2", @@ -2945,8 +2945,8 @@ "@mtsrc/validation": "1.0.0", "@octokit/auth-app": "^8.1.2", "@octokit/core": "^7.0.6", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.4.1", + "@prisma/client": "^7.4.1", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "axios": "^1.13.2", @@ -2956,7 +2956,7 @@ "long": "^5.3.2", "nice-grpc": "^2.1.12", "pg": "^8.18.0", - "prisma": "7.8.0", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", "protobufjs": "^7.5.3", "yaml": "^2.8.2", @@ -3002,8 +3002,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@sentry/bun": "^10.38.0", "@types/nodemailer": "^7.0.9", "axios": "^1.13.2", @@ -3011,7 +3011,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "nodemailer": "^8.0.1", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", }, @@ -3117,8 +3117,8 @@ "@mtsrc/telemetry": "1.0.0", "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -3132,7 +3132,7 @@ "jszip": "^3.10.1", "p-queue": "^9.1.0", "pg": "^8.16.3", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "ws": "^8.19.0", "yaml": "^2.8.2", @@ -3177,8 +3177,8 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -3186,7 +3186,7 @@ "date-fns": "^4.1.0", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", }, @@ -3245,8 +3245,8 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", @@ -3259,7 +3259,7 @@ "jszip": "^3.10.1", "lodash": "4.17.21", "p-queue": "^9.0.1", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", @@ -3324,8 +3324,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", "@sentry/cli": "^3.2.0", @@ -3335,7 +3335,7 @@ "hono": "^4.11.3", "jszip": "^3.10.1", "lodash-es": "^4.17.22", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", @@ -3439,7 +3439,7 @@ "@metorial-subspace/retry-utils": "^1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/testing-tools": "1.0.0", - "@prisma/adapter-pg": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", @@ -3488,7 +3488,7 @@ "@metorial-subspace/provider": "^1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/testing-tools": "1.0.0", - "@prisma/adapter-pg": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", @@ -3592,12 +3592,12 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "dotenv": "^17.2.3", "p-queue": "^9.1.0", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", }, "devDependencies": { @@ -4263,15 +4263,15 @@ "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", "@openharness/core": "^0.6.2", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "ai": "^6.0.175", "hono": "^4.9.6", "just-bash": "^2.14.4", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "zod": "^4.4.3", }, @@ -4312,8 +4312,8 @@ "@mtsrc/service": "1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -4325,7 +4325,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "pg": "^8.16.3", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "snowflake-uuid": "^1.0.0", "yaml": "^2.8.2", @@ -4792,8 +4792,14 @@ "@bufbuild/protobuf": ["@bufbuild/protobuf@2.11.0", "", {}, "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ=="], + "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@10.5.0", "", { "dependencies": { "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw=="], + + "@chevrotain/gast": ["@chevrotain/gast@10.5.0", "", { "dependencies": { "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A=="], + "@chevrotain/types": ["@chevrotain/types@11.1.2", "", {}, "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="], + "@chevrotain/utils": ["@chevrotain/utils@10.5.0", "", {}, "sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ=="], + "@codemirror/autocomplete": ["@codemirror/autocomplete@6.20.1", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0" } }, "sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A=="], "@codemirror/commands": ["@codemirror/commands@6.10.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", "@codemirror/view": "^6.27.0", "@lezer/common": "^1.1.0" } }, "sha512-vvX1fsih9HledO1c9zdotZYUZnE4xV0m6i3m25s5DIfXofuprk6cRcLUZvSk3CASUbwjQX21tOGbkY2BH8TpnQ=="], @@ -4824,9 +4830,9 @@ "@electric-sql/pglite": ["@electric-sql/pglite@0.3.15", "", {}, "sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ=="], - "@electric-sql/pglite-socket": ["@electric-sql/pglite-socket@0.1.1", "", { "peerDependencies": { "@electric-sql/pglite": "0.4.1" }, "bin": { "pglite-server": "dist/scripts/server.js" } }, "sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw=="], + "@electric-sql/pglite-socket": ["@electric-sql/pglite-socket@0.0.20", "", { "peerDependencies": { "@electric-sql/pglite": "0.3.15" }, "bin": { "pglite-server": "dist/scripts/server.js" } }, "sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg=="], - "@electric-sql/pglite-tools": ["@electric-sql/pglite-tools@0.3.1", "", { "peerDependencies": { "@electric-sql/pglite": "0.4.1" } }, "sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA=="], + "@electric-sql/pglite-tools": ["@electric-sql/pglite-tools@0.2.20", "", { "peerDependencies": { "@electric-sql/pglite": "0.3.15" } }, "sha512-BK50ZnYa3IG7ztXhtgYf0Q7zijV32Iw1cYS8C+ThdQlwx12V5VZ9KRJ42y82Hyb4PkTxZQklVQA9JHyUlex33A=="], "@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="], @@ -5034,8 +5040,6 @@ "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], - "@kurkle/color": ["@kurkle/color@0.3.4", "", {}, "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w=="], - "@lezer/common": ["@lezer/common@1.5.1", "", {}, "sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw=="], "@lezer/highlight": ["@lezer/highlight@1.2.3", "", { "dependencies": { "@lezer/common": "^1.3.0" } }, "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g=="], @@ -5422,6 +5426,8 @@ "@mongodb-js/zstd": ["@mongodb-js/zstd@7.0.0", "", { "dependencies": { "node-addon-api": "^8.5.0", "prebuild-install": "^7.1.3" } }, "sha512-mQ2s0pYYiav+tzCDR05Zptem8Ey2v8s11lri5RKGhTtL4COVCvVCk5vtyRYNT+9L8qSfyOqqefF9UtnW8mC5jA=="], + "@mrleebo/prisma-ast": ["@mrleebo/prisma-ast@0.13.1", "", { "dependencies": { "chevrotain": "^10.5.0", "lilconfig": "^2.1.0" } }, "sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw=="], + "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw=="], "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw=="], @@ -5742,29 +5748,29 @@ "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], - "@prisma/adapter-pg": ["@prisma/adapter-pg@7.8.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "7.8.0", "@types/pg": "^8.16.0", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg=="], + "@prisma/adapter-pg": ["@prisma/adapter-pg@7.5.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "7.5.0", "@types/pg": "8.11.11", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "sha512-EJx7OLULahcC3IjJgdx2qRDNCT+ToY2v66UkeETMCLhNOTgqVzRzYvOEphY7Zp0eHyzfkC33Edd/qqeadf9R4A=="], - "@prisma/client": ["@prisma/client@7.8.0", "", { "dependencies": { "@prisma/client-runtime-utils": "7.8.0" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw=="], + "@prisma/client": ["@prisma/client@7.4.2", "", { "dependencies": { "@prisma/client-runtime-utils": "7.4.2" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-ts2mu+cQHriAhSxngO3StcYubBGTWDtu/4juZhXCUKOwgh26l+s4KD3vT2kMUzFyrYnll9u/3qWrtzRv9CGWzA=="], - "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.8.0", "", {}, "sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw=="], + "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.4.2", "", {}, "sha512-cID+rzOEb38VyMsx5LwJMEY4NGIrWCNpKu/0ImbeooQ2Px7TI+kOt7cm0NelxUzF2V41UVVXAmYjANZQtCu1/Q=="], - "@prisma/config": ["@prisma/config@7.8.0", "", { "dependencies": { "c12": "3.3.4", "deepmerge-ts": "7.1.5", "effect": "3.20.0", "empathic": "2.0.0" } }, "sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw=="], + "@prisma/config": ["@prisma/config@7.4.2", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.18.4", "empathic": "2.0.0" } }, "sha512-CftBjWxav99lzY1Z4oDgomdb1gh9BJFAOmWF6P2v1xRfXqQb56DfBub+QKcERRdNoAzCb3HXy3Zii8Vb4AsXhg=="], - "@prisma/debug": ["@prisma/debug@7.8.0", "", {}, "sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA=="], + "@prisma/debug": ["@prisma/debug@7.5.0", "", {}, "sha512-163+nffny0JoPEkDhfNco0vcuT3ymIJc9+WX7MHSQhfkeKUmKe9/wqvGk5SjppT93DtBjVwr5HPJYlXbzm6qtg=="], - "@prisma/dev": ["@prisma/dev@0.24.3", "", { "dependencies": { "@electric-sql/pglite": "0.4.1", "@electric-sql/pglite-socket": "0.1.1", "@electric-sql/pglite-tools": "0.3.1", "@hono/node-server": "1.19.11", "@prisma/get-platform": "7.2.0", "@prisma/query-plan-executor": "7.2.0", "@prisma/streams-local": "0.1.2", "foreground-child": "3.3.1", "get-port-please": "3.2.0", "hono": "^4.12.8", "http-status-codes": "2.3.0", "pathe": "2.0.3", "proper-lockfile": "4.1.2", "remeda": "2.33.4", "std-env": "3.10.0", "valibot": "1.2.0", "zeptomatch": "2.1.0" } }, "sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg=="], + "@prisma/dev": ["@prisma/dev@0.20.0", "", { "dependencies": { "@electric-sql/pglite": "0.3.15", "@electric-sql/pglite-socket": "0.0.20", "@electric-sql/pglite-tools": "0.2.20", "@hono/node-server": "1.19.9", "@mrleebo/prisma-ast": "0.13.1", "@prisma/get-platform": "7.2.0", "@prisma/query-plan-executor": "7.2.0", "foreground-child": "3.3.1", "get-port-please": "3.2.0", "hono": "4.11.4", "http-status-codes": "2.3.0", "pathe": "2.0.3", "proper-lockfile": "4.1.2", "remeda": "2.33.4", "std-env": "3.10.0", "valibot": "1.2.0", "zeptomatch": "2.1.0" } }, "sha512-ovlBYwWor0OzG+yH4J3Ot+AneD818BttLA+Ii7wjbcLHUrnC4tbUPVGyNd3c/+71KETPKZfjhkTSpdS15dmXNQ=="], "@prisma/dmmf": ["@prisma/dmmf@7.4.2", "", {}, "sha512-EurUPjBwmAd69MM8PLZ5n94xeeQ+7SB3Wd9p2+YsgXhvqCa1cgJRBJiB6fTWkPTz5Lf05ySNJ/59EnuEJMAnrw=="], - "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0" } }, "sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A=="], + "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@7.5.0", "", { "dependencies": { "@prisma/debug": "7.5.0" } }, "sha512-B79N/amgV677mFesFDBAdrW0OIaqawap9E0sjgLBtzIz2R3hIMS1QB8mLZuUEiS4q5Y8Oh3I25Kw4SLxMypk9Q=="], - "@prisma/engines": ["@prisma/engines@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0", "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", "@prisma/fetch-engine": "7.8.0", "@prisma/get-platform": "7.8.0" } }, "sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw=="], + "@prisma/engines": ["@prisma/engines@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "@prisma/fetch-engine": "7.4.2", "@prisma/get-platform": "7.4.2" } }, "sha512-B+ZZhI4rXlzjVqRw/93AothEKOU5/x4oVyJFGo9RpHPnBwaPwk4Pi0Q4iGXipKxeXPs/dqljgNBjK0m8nocOJA=="], - "@prisma/engines-version": ["@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", "", {}, "sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA=="], + "@prisma/engines-version": ["@prisma/engines-version@7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "", {}, "sha512-5FIKY3KoYQlBuZC2yc16EXfVRQ8HY+fLqgxkYfWCtKhRb3ajCRzP/rPeoSx11+NueJDANdh4hjY36mdmrTcGSg=="], "@prisma/extension-read-replicas": ["@prisma/extension-read-replicas@0.5.0", "", { "peerDependencies": { "@prisma/client": "^7.0.0" } }, "sha512-t0kLjqFMte4wwGrZFhya4iFoyoOY4kjlyyE60WXZL66PqP6PcBpW/35eKb/3UcxgjJxcDlaJKfmGokFLOyafiQ=="], - "@prisma/fetch-engine": ["@prisma/fetch-engine@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0", "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", "@prisma/get-platform": "7.8.0" } }, "sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ=="], + "@prisma/fetch-engine": ["@prisma/fetch-engine@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "@prisma/get-platform": "7.4.2" } }, "sha512-f/c/MwYpdJO7taLETU8rahEstLeXfYgQGlz5fycG7Fbmva3iPdzGmjiSWHeSWIgNnlXnelUdCJqyZnFocurZuA=="], "@prisma/generator": ["@prisma/generator@7.4.2", "", {}, "sha512-+4B8Rrq5Ef2cm7cW7Wyu6oXn/QVcDVdNti9mKEkcbPVLlA85I6Rbd+j6r+k2E2nlj0zKZbDbq8fIx/Xnt1SmkA=="], @@ -5776,9 +5782,7 @@ "@prisma/query-plan-executor": ["@prisma/query-plan-executor@7.2.0", "", {}, "sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ=="], - "@prisma/streams-local": ["@prisma/streams-local@0.1.2", "", { "dependencies": { "ajv": "^8.12.0", "better-result": "^2.7.0", "env-paths": "^3.0.0", "proper-lockfile": "^4.1.2" } }, "sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg=="], - - "@prisma/studio-core": ["@prisma/studio-core@0.27.3", "", { "dependencies": { "@radix-ui/react-toggle": "1.1.10", "chart.js": "4.5.1" }, "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw=="], + "@prisma/studio-core": ["@prisma/studio-core@0.13.1", "", { "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-agdqaPEePRHcQ7CexEfkX1RvSH9uWDb6pXrZnhCRykhDFAV0/0P3d07WtfiY8hZWb7oRU4v+NkT4cGFHkQJIPg=="], "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], @@ -6702,8 +6706,6 @@ "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], - "better-result": ["better-result@2.9.2", "", {}, "sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q=="], - "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], @@ -6750,7 +6752,7 @@ "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - "c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], + "c12": ["c12@3.1.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.6.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw=="], "c8": ["c8@9.1.0", "", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", "foreground-child": "^3.1.1", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.1.6", "test-exclude": "^6.0.0", "v8-to-istanbul": "^9.0.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1" }, "bin": { "c8": "bin/c8.js" } }, "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg=="], @@ -6794,14 +6796,16 @@ "chardet": ["chardet@2.1.1", "", {}, "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ=="], - "chart.js": ["chart.js@4.5.1", "", { "dependencies": { "@kurkle/color": "^0.3.0" } }, "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw=="], - "check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], + "chevrotain": ["chevrotain@10.5.0", "", { "dependencies": { "@chevrotain/cst-dts-gen": "10.5.0", "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "@chevrotain/utils": "10.5.0", "lodash": "4.17.21", "regexp-to-ast": "0.5.0" } }, "sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A=="], + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], + "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], + "cjs-module-lexer": ["cjs-module-lexer@2.2.0", "", {}, "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ=="], "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], @@ -7028,7 +7032,7 @@ "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - "defu": ["defu@6.1.7", "", {}, "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ=="], + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], @@ -7090,7 +7094,7 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "effect": ["effect@3.20.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw=="], + "effect": ["effect@3.18.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA=="], "ejs": ["ejs@5.0.1", "", { "bin": { "ejs": "bin/cli.js" } }, "sha512-COqBPFMxuPTPspXl2DkVYaDS3HtrD1GpzOGkNTJ1IYkifq/r9h8SVEFrjA3D9/VJGOEoMQcrlhpntcSUrM8k6A=="], @@ -7112,7 +7116,7 @@ "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], + "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], @@ -7344,7 +7348,7 @@ "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "giget": ["giget@3.2.0", "", { "bin": { "giget": "dist/cli.mjs" } }, "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A=="], + "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], @@ -7454,7 +7458,7 @@ "hoist-non-react-statics": ["hoist-non-react-statics@3.3.2", "", { "dependencies": { "react-is": "^16.7.0" } }, "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="], - "hono": ["hono@4.12.23", "", {}, "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA=="], + "hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], "hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], @@ -8076,6 +8080,8 @@ "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + "node-forge": ["node-forge@1.3.1", "", {}, "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA=="], "node-gyp": ["node-gyp@8.4.1", "", { "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w=="], @@ -8114,6 +8120,8 @@ "nx": ["nx@22.7.3", "", { "dependencies": { "@emnapi/core": "1.4.5", "@emnapi/runtime": "1.4.5", "@emnapi/wasi-threads": "1.0.4", "@jest/diff-sequences": "30.0.1", "@napi-rs/wasm-runtime": "0.2.4", "@tybys/wasm-util": "0.9.0", "@yarnpkg/lockfile": "1.1.0", "@zkochan/js-yaml": "0.0.7", "ansi-colors": "4.1.3", "ansi-regex": "5.0.1", "ansi-styles": "4.3.0", "argparse": "2.0.1", "asynckit": "0.4.0", "axios": "1.16.0", "balanced-match": "4.0.3", "base64-js": "1.5.1", "bl": "4.1.0", "brace-expansion": "5.0.5", "buffer": "5.7.1", "call-bind-apply-helpers": "1.0.2", "chalk": "4.1.2", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "8.0.1", "clone": "1.0.4", "color-convert": "2.0.1", "color-name": "1.1.4", "combined-stream": "1.0.8", "defaults": "1.0.4", "define-lazy-prop": "2.0.0", "delayed-stream": "1.0.0", "dotenv": "16.4.7", "dotenv-expand": "12.0.3", "dunder-proto": "1.0.1", "ejs": "5.0.1", "emoji-regex": "8.0.0", "end-of-stream": "1.4.5", "enquirer": "2.3.6", "es-define-property": "1.0.1", "es-errors": "1.3.0", "es-object-atoms": "1.1.1", "es-set-tostringtag": "2.1.0", "escalade": "3.2.0", "escape-string-regexp": "1.0.5", "figures": "3.2.0", "flat": "5.0.2", "follow-redirects": "1.16.0", "form-data": "4.0.5", "fs-constants": "1.0.0", "function-bind": "1.1.2", "get-caller-file": "2.0.5", "get-intrinsic": "1.3.0", "get-proto": "1.0.1", "gopd": "1.2.0", "has-flag": "4.0.0", "has-symbols": "1.1.0", "has-tostringtag": "1.0.2", "hasown": "2.0.2", "ieee754": "1.2.1", "ignore": "7.0.5", "inherits": "2.0.4", "is-docker": "2.2.1", "is-fullwidth-code-point": "3.0.0", "is-interactive": "1.0.0", "is-unicode-supported": "0.1.0", "is-wsl": "2.2.0", "json5": "2.2.3", "jsonc-parser": "3.2.0", "lines-and-columns": "2.0.3", "log-symbols": "4.1.0", "math-intrinsics": "1.1.0", "mime-db": "1.52.0", "mime-types": "2.1.35", "mimic-fn": "2.1.0", "minimatch": "10.2.5", "minimist": "1.2.8", "npm-run-path": "4.0.1", "once": "1.4.0", "onetime": "5.1.2", "open": "8.4.2", "ora": "5.3.0", "path-key": "3.1.1", "picocolors": "1.1.1", "proxy-from-env": "2.1.0", "readable-stream": "3.6.2", "require-directory": "2.1.1", "resolve.exports": "2.0.3", "restore-cursor": "3.1.0", "safe-buffer": "5.2.1", "semver": "7.7.4", "signal-exit": "3.0.7", "smol-toml": "1.6.1", "string-width": "4.2.3", "string_decoder": "1.3.0", "strip-ansi": "6.0.1", "strip-bom": "3.0.0", "supports-color": "7.2.0", "tar-stream": "2.2.0", "tmp": "0.2.4", "tree-kill": "1.2.2", "tsconfig-paths": "4.2.0", "tslib": "2.8.1", "util-deprecate": "1.0.2", "wcwidth": "1.0.1", "wrap-ansi": "7.0.0", "wrappy": "1.0.2", "y18n": "5.0.8", "yaml": "2.8.0", "yargs": "17.7.2", "yargs-parser": "21.1.1" }, "optionalDependencies": { "@nx/nx-darwin-arm64": "22.7.3", "@nx/nx-darwin-x64": "22.7.3", "@nx/nx-freebsd-x64": "22.7.3", "@nx/nx-linux-arm-gnueabihf": "22.7.3", "@nx/nx-linux-arm64-gnu": "22.7.3", "@nx/nx-linux-arm64-musl": "22.7.3", "@nx/nx-linux-x64-gnu": "22.7.3", "@nx/nx-linux-x64-musl": "22.7.3", "@nx/nx-win32-arm64-msvc": "22.7.3", "@nx/nx-win32-x64-msvc": "22.7.3" }, "peerDependencies": { "@swc-node/register": "^1.11.1", "@swc/core": "^1.15.8" }, "optionalPeers": ["@swc-node/register", "@swc/core"], "bin": { "nx": "./dist/bin/nx.js", "nx-cloud": "./dist/bin/nx-cloud.js" } }, "sha512-yo2XWmxFF01D2i5YBk34Dz1K7YX2u7BoBuCSbD819lIus9B8LNJ7BzbnWfDFXOcvuGoLXqIxO2ElPqpkx5e5JQ=="], + "nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], + "oauth4webapi": ["oauth4webapi@3.8.5", "", {}, "sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -8126,6 +8134,8 @@ "obliterator": ["obliterator@1.6.1", "", {}, "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="], + "obuf": ["obuf@1.1.2", "", {}, "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="], + "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], @@ -8214,7 +8224,7 @@ "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], - "perfect-debounce": ["perfect-debounce@2.1.0", "", {}, "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g=="], + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], "pg": ["pg@8.19.0", "", { "dependencies": { "pg-connection-string": "^2.11.0", "pg-pool": "^3.12.0", "pg-protocol": "^1.12.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ=="], @@ -8224,6 +8234,8 @@ "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], + "pg-numeric": ["pg-numeric@1.0.2", "", {}, "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw=="], + "pg-pool": ["pg-pool@3.12.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg=="], "pg-protocol": ["pg-protocol@1.12.0", "", {}, "sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg=="], @@ -8338,6 +8350,8 @@ "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], + "postgres-range": ["postgres-range@1.1.4", "", {}, "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="], + "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], @@ -8350,7 +8364,7 @@ "prism-react-renderer": ["prism-react-renderer@2.4.1", "", { "dependencies": { "@types/prismjs": "^1.26.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": ">=16.0.0" } }, "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig=="], - "prisma": ["prisma@7.8.0", "", { "dependencies": { "@prisma/config": "7.8.0", "@prisma/dev": "0.24.3", "@prisma/engines": "7.8.0", "@prisma/studio-core": "0.27.3", "mysql2": "3.15.3", "postgres": "3.4.7" }, "peerDependencies": { "better-sqlite3": ">=9.0.0", "typescript": ">=5.4.0" }, "optionalPeers": ["better-sqlite3", "typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw=="], + "prisma": ["prisma@7.4.2", "", { "dependencies": { "@prisma/config": "7.4.2", "@prisma/dev": "0.20.0", "@prisma/engines": "7.4.2", "@prisma/studio-core": "0.13.1", "mysql2": "3.15.3", "postgres": "3.4.7" }, "peerDependencies": { "better-sqlite3": ">=9.0.0", "typescript": ">=5.4.0" }, "optionalPeers": ["better-sqlite3", "typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-2bP8Ruww3Q95Z2eH4Yqh4KAENRsj/SxbdknIVBfd6DmjPwmpsC4OVFMLOeHt6tM3Amh8ebjvstrUz3V/hOe1dA=="], "prisma-json-types-generator": ["prisma-json-types-generator@4.1.1", "", { "dependencies": { "@prisma/generator-helper": "^7.2.0", "semver": "^7.7.3", "try": "^1.0.3", "tslib": "^2.8.1" }, "peerDependencies": { "@prisma/client": "^7.2.0", "prisma": "^7.2.0", "typescript": "^5.9.3" }, "bin": { "prisma-json-types-generator": "index.js" } }, "sha512-oz0MYu1r2Jqu3qOGCEGulz6RjPsECVjyS3ZAz3HEmz0jkKbVkZEwQyksNJm0X5utV1TZCmaG/98EPExN7S22xw=="], @@ -8444,7 +8458,7 @@ "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - "rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], + "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], "re2js": ["re2js@1.4.0", "", {}, "sha512-KTOIcZTSOpOxbu3i0+T6mFQ6tkxXKlTxfcMFs1trQbsMnG84qNq+DjXr8Afu+FEFjvF1NNlldpC7roPyazFI8g=="], @@ -8520,6 +8534,8 @@ "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.2", "", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g=="], + "regexp-to-ast": ["regexp-to-ast@0.5.0", "", {}, "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw=="], + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], "regexpu-core": ["regexpu-core@6.4.0", "", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" } }, "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA=="], @@ -9660,9 +9676,13 @@ "@boxyhq/saml-jackson/redis": ["redis@4.7.0", "", { "dependencies": { "@redis/bloom": "1.2.0", "@redis/client": "1.6.0", "@redis/graph": "1.1.1", "@redis/json": "1.0.7", "@redis/search": "1.2.0", "@redis/time-series": "1.1.0" } }, "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ=="], - "@electric-sql/pglite-socket/@electric-sql/pglite": ["@electric-sql/pglite@0.4.1", "", {}, "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q=="], + "@chevrotain/cst-dts-gen/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], + + "@chevrotain/cst-dts-gen/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "@chevrotain/gast/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], - "@electric-sql/pglite-tools/@electric-sql/pglite": ["@electric-sql/pglite@0.4.1", "", {}, "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q=="], + "@chevrotain/gast/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], @@ -9822,8 +9842,6 @@ "@metorial/api-auth/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/api-connection/hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], - "@metorial/api-core/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], "@metorial/api-custom-portal/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -9894,6 +9912,8 @@ "@metorial/data-hooks/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/db/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], + "@metorial/db/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], "@metorial/db/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -10002,6 +10022,8 @@ "@metorial/module-user/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "@metorial/multi-region/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], + "@metorial/multi-region/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@metorial/origin/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], @@ -10078,14 +10100,14 @@ "@metorial/voyager/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "@modelcontextprotocol/sdk/hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], - "@modelcontextprotocol/sdk/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], "@modelcontextprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "@mongodb-js/zstd/node-addon-api": ["node-addon-api@8.7.0", "", {}, "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA=="], + "@mrleebo/prisma-ast/lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], + "@mtsrc/anonymize-ip/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@mtsrc/anonymize-ip/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -10360,13 +10382,19 @@ "@opentelemetry/sdk-metrics/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], - "@prisma/dev/@electric-sql/pglite": ["@electric-sql/pglite@0.4.1", "", {}, "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q=="], + "@prisma/adapter-pg/@types/pg": ["@types/pg@8.11.11", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^4.0.1" } }, "sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw=="], + + "@prisma/dev/@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="], + + "@prisma/dev/hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], - "@prisma/dev/@hono/node-server": ["@hono/node-server@1.19.11", "", { "peerDependencies": { "hono": "^4" } }, "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g=="], + "@prisma/engines/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], - "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0" } }, "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw=="], + "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], - "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0" } }, "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw=="], + "@prisma/fetch-engine/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], + + "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], "@prisma/generator-helper/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], @@ -10594,7 +10622,7 @@ "bun-types/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], - "c12/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], + "c12/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], "c12/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], @@ -10606,6 +10634,10 @@ "cacache/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + "chevrotain/@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], + + "chevrotain/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "concat-with-sourcemaps/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], @@ -10804,8 +10836,6 @@ "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - "node-gyp/env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], - "node-gyp/nopt": ["nopt@5.0.0", "", { "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="], "node-gyp/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], @@ -10830,6 +10860,8 @@ "nx/yaml": ["yaml@2.8.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ=="], + "nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], + "openid-client/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], "ora/cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], @@ -12398,6 +12430,8 @@ "@metorial/data-hooks/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], + "@metorial/db/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], "@metorial/db/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], @@ -13040,6 +13074,8 @@ "@metorial/module-user/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], + "@metorial/origin/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "@metorial/pages/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], @@ -14380,6 +14416,8 @@ "@opentelemetry/sdk-metrics/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@prisma/adapter-pg/@types/pg/pg-types": ["pg-types@4.1.0", "", { "dependencies": { "pg-int8": "1.0.1", "pg-numeric": "1.0.2", "postgres-array": "~3.0.1", "postgres-bytea": "~3.0.0", "postgres-date": "~2.1.0", "postgres-interval": "^3.0.0", "postgres-range": "^1.1.1" } }, "sha512-o2XFanIMy/3+mThw69O8d4n1E5zsLhdO+OPqswezu7Z5ekP4hYDqlDjlmOpYMbzY2Br0ufCwJLdDIXeNVwcWFg=="], + "@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.207.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ=="], "@radix-ui/react-visually-hidden/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], @@ -14514,8 +14552,6 @@ "bun-types/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "c12/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], - "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="], @@ -15244,6 +15280,8 @@ "@metorial/data-hooks/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], + "@metorial/db/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial/db/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -15380,6 +15418,8 @@ "@metorial/module-user/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], + "@metorial/pages/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial/pages/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -15658,6 +15698,12 @@ "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@prisma/adapter-pg/@types/pg/pg-types/postgres-bytea": ["postgres-bytea@3.0.0", "", { "dependencies": { "obuf": "~1.1.2" } }, "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw=="], + + "@prisma/adapter-pg/@types/pg/pg-types/postgres-date": ["postgres-date@2.1.0", "", {}, "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA=="], + + "@prisma/adapter-pg/@types/pg/pg-types/postgres-interval": ["postgres-interval@3.0.0", "", {}, "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw=="], + "@sentry/bundler-plugin-core/@sentry/cli/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], diff --git a/deployment/skeleton/package.json b/deployment/skeleton/package.json index 97d6d5d71..10b3513d2 100644 --- a/deployment/skeleton/package.json +++ b/deployment/skeleton/package.json @@ -9,8 +9,8 @@ "start": "bun run server:start" }, "dependencies": { - "@prisma/client": "7.8.0", - "prisma": "7.8.0", + "@prisma/client": "^7.4.1", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.1.1", "typescript": "^5.1.6" }, diff --git a/src/backend/db/package.json b/src/backend/db/package.json index 9970324ad..3e47e7832 100644 --- a/src/backend/db/package.json +++ b/src/backend/db/package.json @@ -13,14 +13,14 @@ "dependencies": { "@metorial/id": "^1.0.0", "@modelcontextprotocol/sdk": "^1.11.4", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "6.19.0", + "@prisma/client": "^7.4.1", "@types/json-schema": "^7.0.15", "json-schema": "^0.4.0", "lru-cache": "^11.1.0", "p-queue": "^8.1.0", "@prisma/extension-read-replicas": "^0.5.0", - "prisma": "7.8.0", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.1.1", "@mtsrc/snowflake": "1.0.0", "@mtsrc/execution-context": "1.0.0" diff --git a/src/backend/multi-region/package.json b/src/backend/multi-region/package.json index d6d3bdd4d..a3b724e59 100644 --- a/src/backend/multi-region/package.json +++ b/src/backend/multi-region/package.json @@ -16,13 +16,13 @@ "@metorial/context": "^1.0.0", "@metorial/cron": "^1.0.0", "@metorial/id": "^1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "6.19.0", + "@prisma/client": "^7.4.1", "@prisma/extension-read-replicas": "^0.5.0", "@types/pg": "^8.11.11", "@types/bun": "^1.2.12", "pg": "^8.11.3", - "prisma": "7.8.0", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.1.1", "stripe": "^18.5.0", "typescript": "^5.8.3", diff --git a/src/systems/ares/service/package.json b/src/systems/ares/service/package.json index e88c6e4e3..0ef3b45b6 100644 --- a/src/systems/ares/service/package.json +++ b/src/systems/ares/service/package.json @@ -51,8 +51,8 @@ "@metorial-io/ui": "^1.0.0", "@metorial-io/ui-product": "^1.0.0", "@metorial-platform-systems/relay-client": "workspace:*", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.4.1", + "@prisma/client": "^7.4.1", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "@types/ua-parser-js": "^0.7.39", @@ -62,7 +62,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "7.8.0", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", "react": "^19.0.0", "react-dom": "^19.0.0", diff --git a/src/systems/cargo/db/package.json b/src/systems/cargo/db/package.json index d59f626d2..b21f25bd6 100644 --- a/src/systems/cargo/db/package.json +++ b/src/systems/cargo/db/package.json @@ -18,11 +18,11 @@ "typescript": "^5" }, "dependencies": { - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "p-queue": "^9.1.0", - "prisma": "7.8.0", + "prisma": "^7.2.0", "@mtsrc/env": "1.0.0", "@mtsrc/error": "1.0.0", "@mtsrc/execution-context": "1.0.0", diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index 70aa92286..c9d38315e 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -38,13 +38,13 @@ "typescript": "^5" }, "dependencies": { - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "7.8.0", + "prisma": "^7.2.0", "@metorial-cargo/db": "^1.0.0", "@metorial-cargo/module-file": "^1.0.0", "@metorial-cargo/module-doc": "^1.0.0", diff --git a/src/systems/forge/service/package.json b/src/systems/forge/service/package.json index 4c50ddbf6..4666780ff 100644 --- a/src/systems/forge/service/package.json +++ b/src/systems/forge/service/package.json @@ -38,8 +38,8 @@ "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-codebuild": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -48,7 +48,7 @@ "jszip": "^3.10.1", "mongoose": "^9.0.2", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "7.8.0", + "prisma": "^7.2.0", "yaml": "^2.8.2", "@mtsrc/api-mux": "1.0.0", "@mtsrc/cron": "1.0.0", diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index 0837ace40..cf8faa8aa 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -42,8 +42,8 @@ "@aws-sdk/client-lambda": "^3.958.0", "@function-bay/types": "^1.0.0", "@metorial-platform-systems/forge-client": "workspace:*", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -55,7 +55,7 @@ "jszip": "^3.10.1", "lodash": "4.17.21", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "undici": "^8.1.0", "yaml": "^2.8.2", diff --git a/src/systems/origin/apps/service/package.json b/src/systems/origin/apps/service/package.json index 13d0ee0ea..bb26e00e3 100644 --- a/src/systems/origin/apps/service/package.json +++ b/src/systems/origin/apps/service/package.json @@ -39,8 +39,8 @@ "@grpc/grpc-js": "^1.13.4", "@octokit/auth-app": "^8.1.2", "@octokit/core": "^7.0.6", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.4.1", + "@prisma/client": "^7.4.1", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "axios": "^1.13.2", @@ -51,7 +51,7 @@ "nice-grpc": "^2.1.12", "@metorial-platform-systems/object-storage-client": "workspace:*", "pg": "^8.18.0", - "prisma": "7.8.0", + "prisma": "^7.4.1", "prisma-json-types-generator": "^4.0.1", "protobufjs": "^7.5.3", "yaml": "^2.8.2", diff --git a/src/systems/relay/service/package.json b/src/systems/relay/service/package.json index 825db9b84..2f6a08990 100644 --- a/src/systems/relay/service/package.json +++ b/src/systems/relay/service/package.json @@ -37,8 +37,8 @@ "@aws-sdk/client-lambda": "^3.958.0", "@aws-sdk/client-ses": "^3.985.0", "@metorial-services/forge-client": "^1.0.3", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@sentry/bun": "^10.38.0", "@types/nodemailer": "^7.0.9", "axios": "^1.13.2", @@ -47,7 +47,7 @@ "jszip": "^3.10.1", "nodemailer": "^8.0.1", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", "@mtsrc/api-mux": "1.0.0", diff --git a/src/systems/shuttle/service/package.json b/src/systems/shuttle/service/package.json index 7c5925492..572a7897d 100644 --- a/src/systems/shuttle/service/package.json +++ b/src/systems/shuttle/service/package.json @@ -44,8 +44,8 @@ "@metorial-platform-systems/function-bay-client": "workspace:*", "@metorial/mcp-server": "^1.0.0-rc.11", "@modelcontextprotocol/sdk": "^1.25.3", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -60,7 +60,7 @@ "@metorial-platform-systems/object-storage-client": "workspace:*", "p-queue": "^9.1.0", "pg": "^8.16.3", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "ws": "^8.19.0", "yaml": "^2.8.2", diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index ada69bb9b..7eb555bb8 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -38,8 +38,8 @@ "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -48,7 +48,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", "@mtsrc/api-mux": "1.0.0", diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index fb2df745d..f128e346e 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -57,8 +57,8 @@ "@metorial-platform-systems/signal-client": "workspace:*", "@metorial-services/slates-registry-client": "latest", "@metorial-services/slates-registry-internal-client": "^1.0.0", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", @@ -72,7 +72,7 @@ "lodash": "4.17.21", "@metorial-platform-systems/object-storage-client": "workspace:*", "p-queue": "^9.0.1", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", diff --git a/src/systems/slates/apps/registry/package.json b/src/systems/slates/apps/registry/package.json index 3be325303..cd1623c97 100644 --- a/src/systems/slates/apps/registry/package.json +++ b/src/systems/slates/apps/registry/package.json @@ -51,8 +51,8 @@ "@metorial-io/ui-product": "^1.0.0", "@metorial-platform-systems/ares-client": "^1.0.0", "@metorial/util-endpoint": "^1.0.1", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", "@sentry/cli": "^3.2.0", @@ -63,7 +63,7 @@ "jszip": "^3.10.1", "lodash-es": "^4.17.22", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", diff --git a/src/systems/subspace/apps/controller/package.json b/src/systems/subspace/apps/controller/package.json index de145e767..8bf5c45c4 100644 --- a/src/systems/subspace/apps/controller/package.json +++ b/src/systems/subspace/apps/controller/package.json @@ -21,7 +21,7 @@ "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", "@metorial-subspace/retry-utils": "^1.0.0", - "@prisma/adapter-pg": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", diff --git a/src/systems/subspace/apps/dev/package.json b/src/systems/subspace/apps/dev/package.json index be8ff92e9..07d42286f 100644 --- a/src/systems/subspace/apps/dev/package.json +++ b/src/systems/subspace/apps/dev/package.json @@ -13,7 +13,7 @@ "@metorial-subspace/connection-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", - "@prisma/adapter-pg": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", diff --git a/src/systems/subspace/db/package.json b/src/systems/subspace/db/package.json index c8ed4ddec..7f198653d 100644 --- a/src/systems/subspace/db/package.json +++ b/src/systems/subspace/db/package.json @@ -19,12 +19,12 @@ "dependencies": { "@metorial-subspace/tsconfig": "^1.0.0", "@modelcontextprotocol/sdk": "^1.25.2", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "dotenv": "^17.2.3", "p-queue": "^9.1.0", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "@mtsrc/env": "1.0.0", "@mtsrc/error": "1.0.0", diff --git a/src/systems/synthesis/service/package.json b/src/systems/synthesis/service/package.json index 80c1dca27..136d34f23 100644 --- a/src/systems/synthesis/service/package.json +++ b/src/systems/synthesis/service/package.json @@ -37,15 +37,15 @@ "dependencies": { "@metorial-services/scout-client": "^1.0.0", "@openharness/core": "^0.6.2", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "ai": "^6.0.175", "hono": "^4.9.6", "just-bash": "^2.14.4", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "zod": "^4.4.3", "@mtsrc/error": "1.0.0", diff --git a/src/systems/voyager/service/package.json b/src/systems/voyager/service/package.json index 8b36cf450..aa885d74c 100644 --- a/src/systems/voyager/service/package.json +++ b/src/systems/voyager/service/package.json @@ -37,8 +37,8 @@ "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", "@metorial-services/forge-client": "^1.0.3", - "@prisma/adapter-pg": "7.8.0", - "@prisma/client": "7.8.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -51,7 +51,7 @@ "jszip": "^3.10.1", "@metorial-platform-systems/object-storage-client": "workspace:*", "pg": "^8.16.3", - "prisma": "7.8.0", + "prisma": "^7.2.0", "prisma-json-types-generator": "^4.0.1", "snowflake-uuid": "^1.0.0", "yaml": "^2.8.2", From fb2e1bf8c7e5c31f677c6d56d53f45029e3e2262 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Tue, 26 May 2026 11:48:01 +0200 Subject: [PATCH 34/69] Patch prisma versions --- .github/workflows/reusable-control.yml | 4 +- .github/workflows/test.yml | 2 +- bun.lock | 140 +++++++----------- deployment/skeleton/package.json | 6 +- src/backend/db/package.json | 8 +- src/backend/multi-region/package.json | 8 +- src/systems/ares/service/Dockerfile | 2 +- src/systems/ares/service/package.json | 8 +- src/systems/cargo/db/package.json | 6 +- src/systems/cargo/service/Dockerfile | 2 +- src/systems/cargo/service/package.json | 8 +- src/systems/forge/service/Dockerfile | 2 +- src/systems/forge/service/package.json | 8 +- src/systems/function-bay/service/Dockerfile | 2 +- src/systems/function-bay/service/package.json | 8 +- .../origin/apps/code-bucket/Dockerfile | 2 +- .../origin/apps/code-bucket/control.toml | 4 +- src/systems/origin/apps/service/Dockerfile | 2 +- src/systems/origin/apps/service/package.json | 6 +- src/systems/relay/service/Dockerfile | 2 +- src/systems/relay/service/package.json | 6 +- src/systems/shuttle/service/Dockerfile | 2 +- src/systems/shuttle/service/package.json | 8 +- src/systems/signal/service/Dockerfile | 2 +- src/systems/signal/service/package.json | 8 +- src/systems/slates/apps/hub/Dockerfile | 2 +- src/systems/slates/apps/hub/package.json | 8 +- src/systems/slates/apps/registry/Dockerfile | 4 +- src/systems/slates/apps/registry/package.json | 8 +- .../subspace/apps/controller/Dockerfile | 4 +- .../subspace/apps/controller/package.json | 2 +- src/systems/subspace/apps/dev/package.json | 4 +- src/systems/subspace/apps/public/Dockerfile | 6 +- src/systems/subspace/apps/worker/Dockerfile | 6 +- src/systems/subspace/db/package.json | 8 +- src/systems/synthesis/service/Dockerfile | 4 +- src/systems/synthesis/service/package.json | 6 +- src/systems/voyager/service/Dockerfile | 2 +- src/systems/voyager/service/package.json | 6 +- src/tooling/control/src/builders/context.ts | 111 ++++++++++++++ src/tooling/control/src/builders/node.ts | 7 +- src/tooling/control/src/builders/pathing.ts | 2 +- 42 files changed, 261 insertions(+), 185 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index be704c630..f76a70fcc 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -131,13 +131,13 @@ jobs: if: ${{ inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e') }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache - run: bun i --linker=hoisted --filter @metorial/oss --filter @metorial/control + run: bun i --filter @metorial/oss --filter @metorial/control - name: Install packages if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache - run: bun i --linker=hoisted + run: bun i - name: Generate Prisma Clients if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b643945ba..ccdeb3b9f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: # run: mv _package.json package.json - name: Install Packages - run: bun i --linker=hoisted + run: bun i - name: Generate Prisma Clients run: | diff --git a/bun.lock b/bun.lock index 304d50c68..661be9f5b 100644 --- a/bun.lock +++ b/bun.lock @@ -931,14 +931,14 @@ "@modelcontextprotocol/sdk": "^1.11.4", "@mtsrc/execution-context": "1.0.0", "@mtsrc/snowflake": "1.0.0", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@types/json-schema": "^7.0.15", "json-schema": "^0.4.0", "lru-cache": "^11.1.0", "p-queue": "^8.1.0", - "prisma": "^7.4.1", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.1.1", }, "devDependencies": { @@ -1403,13 +1403,13 @@ "@mtsrc/shadow-id": "1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@types/bun": "^1.2.12", "@types/pg": "^8.11.11", "pg": "^8.11.3", - "prisma": "^7.4.1", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.1.1", "stripe": "^18.5.0", "typescript": "^5.8.3", @@ -2415,8 +2415,8 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "@types/ua-parser-js": "^0.7.39", @@ -2425,7 +2425,7 @@ "input-otp": "^1.4.2", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "prisma": "^7.4.1", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "react": "^19.0.0", "react-dom": "^19.0.0", @@ -2458,11 +2458,11 @@ "@mtsrc/id": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "p-queue": "^9.1.0", - "prisma": "^7.2.0", + "prisma": "7.4.2", }, "devDependencies": { "@types/bun": "latest", @@ -2635,12 +2635,12 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", - "prisma": "^7.2.0", + "prisma": "7.4.2", }, "devDependencies": { "@mtsrc/testing-tools": "1.0.0", @@ -2679,8 +2679,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -2688,7 +2688,7 @@ "date-fns": "^4.1.0", "jszip": "^3.10.1", "mongoose": "^9.0.2", - "prisma": "^7.2.0", + "prisma": "7.4.2", "yaml": "^2.8.2", }, "devDependencies": { @@ -2823,8 +2823,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -2835,7 +2835,7 @@ "jose": "^6.2.2", "jszip": "^3.10.1", "lodash": "4.17.21", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "undici": "^8.1.0", "yaml": "^2.8.2", @@ -2945,8 +2945,8 @@ "@mtsrc/validation": "1.0.0", "@octokit/auth-app": "^8.1.2", "@octokit/core": "^7.0.6", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "axios": "^1.13.2", @@ -2956,7 +2956,7 @@ "long": "^5.3.2", "nice-grpc": "^2.1.12", "pg": "^8.18.0", - "prisma": "^7.4.1", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "protobufjs": "^7.5.3", "yaml": "^2.8.2", @@ -3002,8 +3002,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@sentry/bun": "^10.38.0", "@types/nodemailer": "^7.0.9", "axios": "^1.13.2", @@ -3011,7 +3011,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "nodemailer": "^8.0.1", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", }, @@ -3117,8 +3117,8 @@ "@mtsrc/telemetry": "1.0.0", "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -3132,7 +3132,7 @@ "jszip": "^3.10.1", "p-queue": "^9.1.0", "pg": "^8.16.3", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "ws": "^8.19.0", "yaml": "^2.8.2", @@ -3177,8 +3177,8 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -3186,7 +3186,7 @@ "date-fns": "^4.1.0", "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", }, @@ -3245,8 +3245,8 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", @@ -3259,7 +3259,7 @@ "jszip": "^3.10.1", "lodash": "4.17.21", "p-queue": "^9.0.1", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", @@ -3324,8 +3324,8 @@ "@mtsrc/slugify": "1.0.0", "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", "@sentry/cli": "^3.2.0", @@ -3335,7 +3335,7 @@ "hono": "^4.11.3", "jszip": "^3.10.1", "lodash-es": "^4.17.22", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", @@ -3439,7 +3439,7 @@ "@metorial-subspace/retry-utils": "^1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/testing-tools": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", @@ -3488,7 +3488,7 @@ "@metorial-subspace/provider": "^1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/testing-tools": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", @@ -3592,12 +3592,12 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "dotenv": "^17.2.3", "p-queue": "^9.1.0", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", }, "devDependencies": { @@ -4263,15 +4263,15 @@ "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0", "@openharness/core": "^0.6.2", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "ai": "^6.0.175", "hono": "^4.9.6", "just-bash": "^2.14.4", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "zod": "^4.4.3", }, @@ -4312,8 +4312,8 @@ "@mtsrc/service": "1.0.0", "@mtsrc/slugify": "1.0.0", "@mtsrc/validation": "1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -4325,7 +4325,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "pg": "^8.16.3", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "snowflake-uuid": "^1.0.0", "yaml": "^2.8.2", @@ -5748,7 +5748,7 @@ "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], - "@prisma/adapter-pg": ["@prisma/adapter-pg@7.5.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "7.5.0", "@types/pg": "8.11.11", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "sha512-EJx7OLULahcC3IjJgdx2qRDNCT+ToY2v66UkeETMCLhNOTgqVzRzYvOEphY7Zp0eHyzfkC33Edd/qqeadf9R4A=="], + "@prisma/adapter-pg": ["@prisma/adapter-pg@7.4.2", "", { "dependencies": { "@prisma/driver-adapter-utils": "7.4.2", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "sha512-oUo2Zhe9Tf6YwVL8kLPuOLTK1Z2pwi/Ua77t2PuGyBan2w7shRKqHvYK+3XXmRH9RWhPJ4SMtHZKpNo6Ax/4bQ=="], "@prisma/client": ["@prisma/client@7.4.2", "", { "dependencies": { "@prisma/client-runtime-utils": "7.4.2" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-ts2mu+cQHriAhSxngO3StcYubBGTWDtu/4juZhXCUKOwgh26l+s4KD3vT2kMUzFyrYnll9u/3qWrtzRv9CGWzA=="], @@ -5756,13 +5756,13 @@ "@prisma/config": ["@prisma/config@7.4.2", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.18.4", "empathic": "2.0.0" } }, "sha512-CftBjWxav99lzY1Z4oDgomdb1gh9BJFAOmWF6P2v1xRfXqQb56DfBub+QKcERRdNoAzCb3HXy3Zii8Vb4AsXhg=="], - "@prisma/debug": ["@prisma/debug@7.5.0", "", {}, "sha512-163+nffny0JoPEkDhfNco0vcuT3ymIJc9+WX7MHSQhfkeKUmKe9/wqvGk5SjppT93DtBjVwr5HPJYlXbzm6qtg=="], + "@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], "@prisma/dev": ["@prisma/dev@0.20.0", "", { "dependencies": { "@electric-sql/pglite": "0.3.15", "@electric-sql/pglite-socket": "0.0.20", "@electric-sql/pglite-tools": "0.2.20", "@hono/node-server": "1.19.9", "@mrleebo/prisma-ast": "0.13.1", "@prisma/get-platform": "7.2.0", "@prisma/query-plan-executor": "7.2.0", "foreground-child": "3.3.1", "get-port-please": "3.2.0", "hono": "4.11.4", "http-status-codes": "2.3.0", "pathe": "2.0.3", "proper-lockfile": "4.1.2", "remeda": "2.33.4", "std-env": "3.10.0", "valibot": "1.2.0", "zeptomatch": "2.1.0" } }, "sha512-ovlBYwWor0OzG+yH4J3Ot+AneD818BttLA+Ii7wjbcLHUrnC4tbUPVGyNd3c/+71KETPKZfjhkTSpdS15dmXNQ=="], "@prisma/dmmf": ["@prisma/dmmf@7.4.2", "", {}, "sha512-EurUPjBwmAd69MM8PLZ5n94xeeQ+7SB3Wd9p2+YsgXhvqCa1cgJRBJiB6fTWkPTz5Lf05ySNJ/59EnuEJMAnrw=="], - "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@7.5.0", "", { "dependencies": { "@prisma/debug": "7.5.0" } }, "sha512-B79N/amgV677mFesFDBAdrW0OIaqawap9E0sjgLBtzIz2R3hIMS1QB8mLZuUEiS4q5Y8Oh3I25Kw4SLxMypk9Q=="], + "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-REdjFpT/ye9KdDs+CXAXPIbMQkVLhne9G5Pe97sNY4Ovx4r2DAbWM9hOFvvB1Oq8H8bOCdu0Ri3AoGALquQqVw=="], "@prisma/engines": ["@prisma/engines@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2", "@prisma/engines-version": "7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919", "@prisma/fetch-engine": "7.4.2", "@prisma/get-platform": "7.4.2" } }, "sha512-B+ZZhI4rXlzjVqRw/93AothEKOU5/x4oVyJFGo9RpHPnBwaPwk4Pi0Q4iGXipKxeXPs/dqljgNBjK0m8nocOJA=="], @@ -8134,8 +8134,6 @@ "obliterator": ["obliterator@1.6.1", "", {}, "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="], - "obuf": ["obuf@1.1.2", "", {}, "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="], - "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], @@ -8234,8 +8232,6 @@ "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], - "pg-numeric": ["pg-numeric@1.0.2", "", {}, "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw=="], - "pg-pool": ["pg-pool@3.12.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg=="], "pg-protocol": ["pg-protocol@1.12.0", "", {}, "sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg=="], @@ -8350,8 +8346,6 @@ "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], - "postgres-range": ["postgres-range@1.1.4", "", {}, "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="], - "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], @@ -9912,8 +9906,6 @@ "@metorial/data-hooks/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/db/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], - "@metorial/db/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], "@metorial/db/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], @@ -10022,8 +10014,6 @@ "@metorial/module-user/vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - "@metorial/multi-region/@prisma/adapter-pg": ["@prisma/adapter-pg@6.19.0", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.19.0", "pg": "^8.11.3", "postgres-array": "3.0.4" } }, "sha512-F8f2kvU+igmxERA9oM+D2maMaxrST1P6vO7ayvdlAdcJI47nKNPdkLBGZKic9otghfA9CQnjNOGB56q2VXqnHw=="], - "@metorial/multi-region/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "@metorial/origin/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], @@ -10382,22 +10372,14 @@ "@opentelemetry/sdk-metrics/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], - "@prisma/adapter-pg/@types/pg": ["@types/pg@8.11.11", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^4.0.1" } }, "sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw=="], - "@prisma/dev/@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="], "@prisma/dev/hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], - "@prisma/engines/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], - "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], - "@prisma/fetch-engine/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], - "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.4.2", "", { "dependencies": { "@prisma/debug": "7.4.2" } }, "sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw=="], - "@prisma/generator-helper/@prisma/debug": ["@prisma/debug@7.4.2", "", {}, "sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w=="], - "@prisma/get-platform/@prisma/debug": ["@prisma/debug@7.2.0", "", {}, "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw=="], "@prisma/instrumentation/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.207.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.207.0", "import-in-the-middle": "^2.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-y6eeli9+TLKnznrR8AZlQMSJT7wILpXH+6EYq5Vf/4Ao+huI7EedxQHwRgVUOMLFbe7VFDvHJrX9/f4lcwnJsA=="], @@ -12430,8 +12412,6 @@ "@metorial/data-hooks/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], - "@metorial/db/p-queue/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], "@metorial/db/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], @@ -13074,8 +13054,6 @@ "@metorial/module-user/vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-VAC/wFebV569Jk7iEqzLxekM2A5toKYAr6cPM2KWVHiRHgyjsh/IHf++Xo67q8uor/JxY8mwOuyQyuxkstSf5w=="], - "@metorial/origin/@types/node/undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "@metorial/pages/vitest/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], @@ -14416,8 +14394,6 @@ "@opentelemetry/sdk-metrics/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@prisma/adapter-pg/@types/pg/pg-types": ["pg-types@4.1.0", "", { "dependencies": { "pg-int8": "1.0.1", "pg-numeric": "1.0.2", "postgres-array": "~3.0.1", "postgres-bytea": "~3.0.0", "postgres-date": "~2.1.0", "postgres-interval": "^3.0.0", "postgres-range": "^1.1.1" } }, "sha512-o2XFanIMy/3+mThw69O8d4n1E5zsLhdO+OPqswezu7Z5ekP4hYDqlDjlmOpYMbzY2Br0ufCwJLdDIXeNVwcWFg=="], - "@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.207.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ=="], "@radix-ui/react-visually-hidden/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], @@ -15280,8 +15256,6 @@ "@metorial/data-hooks/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/db/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], - "@metorial/db/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial/db/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -15418,8 +15392,6 @@ "@metorial/module-user/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - "@metorial/multi-region/@prisma/adapter-pg/@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], - "@metorial/pages/vitest/@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "@metorial/pages/vitest/@vitest/runner/strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], @@ -15698,12 +15670,6 @@ "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@prisma/adapter-pg/@types/pg/pg-types/postgres-bytea": ["postgres-bytea@3.0.0", "", { "dependencies": { "obuf": "~1.1.2" } }, "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw=="], - - "@prisma/adapter-pg/@types/pg/pg-types/postgres-date": ["postgres-date@2.1.0", "", {}, "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA=="], - - "@prisma/adapter-pg/@types/pg/pg-types/postgres-interval": ["postgres-interval@3.0.0", "", {}, "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw=="], - "@sentry/bundler-plugin-core/@sentry/cli/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], diff --git a/deployment/skeleton/package.json b/deployment/skeleton/package.json index 10b3513d2..814e5330d 100644 --- a/deployment/skeleton/package.json +++ b/deployment/skeleton/package.json @@ -9,10 +9,10 @@ "start": "bun run server:start" }, "dependencies": { - "@prisma/client": "^7.4.1", - "prisma": "^7.4.1", + "@prisma/client": "7.4.2", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.1.1", "typescript": "^5.1.6" }, "devDependencies": {} -} \ No newline at end of file +} diff --git a/src/backend/db/package.json b/src/backend/db/package.json index 3e47e7832..5ab46455f 100644 --- a/src/backend/db/package.json +++ b/src/backend/db/package.json @@ -13,14 +13,14 @@ "dependencies": { "@metorial/id": "^1.0.0", "@modelcontextprotocol/sdk": "^1.11.4", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@types/json-schema": "^7.0.15", "json-schema": "^0.4.0", "lru-cache": "^11.1.0", "p-queue": "^8.1.0", "@prisma/extension-read-replicas": "^0.5.0", - "prisma": "^7.4.1", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.1.1", "@mtsrc/snowflake": "1.0.0", "@mtsrc/execution-context": "1.0.0" @@ -33,4 +33,4 @@ "prisma": { "schema": "./prisma/schema" } -} \ No newline at end of file +} diff --git a/src/backend/multi-region/package.json b/src/backend/multi-region/package.json index a3b724e59..2f20ee124 100644 --- a/src/backend/multi-region/package.json +++ b/src/backend/multi-region/package.json @@ -16,13 +16,13 @@ "@metorial/context": "^1.0.0", "@metorial/cron": "^1.0.0", "@metorial/id": "^1.0.0", - "@prisma/adapter-pg": "6.19.0", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@types/pg": "^8.11.11", "@types/bun": "^1.2.12", "pg": "^8.11.3", - "prisma": "^7.4.1", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.1.1", "stripe": "^18.5.0", "typescript": "^5.8.3", @@ -43,4 +43,4 @@ "prisma": { "schema": "./prisma/schema" } -} \ No newline at end of file +} diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index 703e6b1e9..9e2f7d8f3 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/ares/service/package.json b/src/systems/ares/service/package.json index 0ef3b45b6..d9cff73e6 100644 --- a/src/systems/ares/service/package.json +++ b/src/systems/ares/service/package.json @@ -51,8 +51,8 @@ "@metorial-io/ui": "^1.0.0", "@metorial-io/ui-product": "^1.0.0", "@metorial-platform-systems/relay-client": "workspace:*", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "@types/ua-parser-js": "^0.7.39", @@ -62,7 +62,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.4.1", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "react": "^19.0.0", "react-dom": "^19.0.0", @@ -101,4 +101,4 @@ "overrides": { "@react-email/components": "1.0.8" } -} \ No newline at end of file +} diff --git a/src/systems/cargo/db/package.json b/src/systems/cargo/db/package.json index b21f25bd6..1f9e9ab82 100644 --- a/src/systems/cargo/db/package.json +++ b/src/systems/cargo/db/package.json @@ -18,11 +18,11 @@ "typescript": "^5" }, "dependencies": { - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "p-queue": "^9.1.0", - "prisma": "^7.2.0", + "prisma": "7.4.2", "@mtsrc/env": "1.0.0", "@mtsrc/error": "1.0.0", "@mtsrc/execution-context": "1.0.0", diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index 72568412f..8d979d60b 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/cargo/service/package.json b/src/systems/cargo/service/package.json index c9d38315e..2ae174894 100644 --- a/src/systems/cargo/service/package.json +++ b/src/systems/cargo/service/package.json @@ -38,13 +38,13 @@ "typescript": "^5" }, "dependencies": { - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.4.2", "@metorial-cargo/db": "^1.0.0", "@metorial-cargo/module-file": "^1.0.0", "@metorial-cargo/module-doc": "^1.0.0", @@ -79,4 +79,4 @@ "exports": { ".": "./src/index.ts" } -} \ No newline at end of file +} diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index 23e7f40c0..c5f4ccf1a 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/forge/service/package.json b/src/systems/forge/service/package.json index 4666780ff..1150287ae 100644 --- a/src/systems/forge/service/package.json +++ b/src/systems/forge/service/package.json @@ -38,8 +38,8 @@ "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-codebuild": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -48,7 +48,7 @@ "jszip": "^3.10.1", "mongoose": "^9.0.2", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.4.2", "yaml": "^2.8.2", "@mtsrc/api-mux": "1.0.0", "@mtsrc/cron": "1.0.0", @@ -70,4 +70,4 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0" } -} \ No newline at end of file +} diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 1e7798391..926980ce0 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/function-bay/service/package.json b/src/systems/function-bay/service/package.json index cf8faa8aa..9eee21448 100644 --- a/src/systems/function-bay/service/package.json +++ b/src/systems/function-bay/service/package.json @@ -42,8 +42,8 @@ "@aws-sdk/client-lambda": "^3.958.0", "@function-bay/types": "^1.0.0", "@metorial-platform-systems/forge-client": "workspace:*", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -55,7 +55,7 @@ "jszip": "^3.10.1", "lodash": "4.17.21", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "undici": "^8.1.0", "yaml": "^2.8.2", @@ -79,4 +79,4 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0" } -} \ No newline at end of file +} diff --git a/src/systems/origin/apps/code-bucket/Dockerfile b/src/systems/origin/apps/code-bucket/Dockerfile index 36b2edc8b..756acf25b 100644 --- a/src/systems/origin/apps/code-bucket/Dockerfile +++ b/src/systems/origin/apps/code-bucket/Dockerfile @@ -9,7 +9,7 @@ COPY oss/src/systems/origin/apps/code-bucket/go.sum ./oss/src/systems/origin/app COPY oss/src/systems/origin/apps/code-bucket/package.json ./oss/src/systems/origin/apps/code-bucket/ COPY oss/src/systems/origin/apps/code-workspace/extensions/memfs/package.json ./oss/src/systems/origin/apps/code-workspace/extensions/memfs/ COPY oss/src/systems/origin/apps/code-workspace/package.json ./oss/src/systems/origin/apps/code-workspace/ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked cd /app/oss/src/systems/origin/apps/code-workspace && bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked cd /app/oss/src/systems/origin/apps/code-workspace && bun install RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked cd /app/oss/src/systems/origin/apps/code-bucket && go mod download FROM deps AS build WORKDIR /app diff --git a/src/systems/origin/apps/code-bucket/control.toml b/src/systems/origin/apps/code-bucket/control.toml index acda41eee..61e6bb9aa 100644 --- a/src/systems/origin/apps/code-bucket/control.toml +++ b/src/systems/origin/apps/code-bucket/control.toml @@ -27,7 +27,7 @@ manifests = [ "../code-workspace/package.json", "../code-workspace/extensions/memfs/package.json" ] -command = "bun install --linker=hoisted" +command = "bun install" [build.manifests] files = [ @@ -75,7 +75,7 @@ healthcheck = "nc -z localhost 52091 || exit 1" [test.unit] command = "go test ./..." setup = [ - "cd ../code-workspace && bun install --linker=hoisted && bunx tsc && bunx vite build", + "cd ../code-workspace && bun install && bunx tsc && bunx vite build", "rm -rf pkg/workspace/dist && mkdir -p pkg/workspace && cp -R ../code-workspace/dist pkg/workspace/dist" ] cwd = "/app/src/systems/origin/apps/code-bucket" diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index b0e6d022c..26c9e83c3 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/origin/apps/service/package.json b/src/systems/origin/apps/service/package.json index bb26e00e3..2b96eb109 100644 --- a/src/systems/origin/apps/service/package.json +++ b/src/systems/origin/apps/service/package.json @@ -39,8 +39,8 @@ "@grpc/grpc-js": "^1.13.4", "@octokit/auth-app": "^8.1.2", "@octokit/core": "^7.0.6", - "@prisma/adapter-pg": "^7.4.1", - "@prisma/client": "^7.4.1", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "axios": "^1.13.2", @@ -51,7 +51,7 @@ "nice-grpc": "^2.1.12", "@metorial-platform-systems/object-storage-client": "workspace:*", "pg": "^8.18.0", - "prisma": "^7.4.1", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "protobufjs": "^7.5.3", "yaml": "^2.8.2", diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 829b7a4b5..0864f6e6d 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/relay/service/package.json b/src/systems/relay/service/package.json index 2f6a08990..aad315f36 100644 --- a/src/systems/relay/service/package.json +++ b/src/systems/relay/service/package.json @@ -37,8 +37,8 @@ "@aws-sdk/client-lambda": "^3.958.0", "@aws-sdk/client-ses": "^3.985.0", "@metorial-services/forge-client": "^1.0.3", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@sentry/bun": "^10.38.0", "@types/nodemailer": "^7.0.9", "axios": "^1.13.2", @@ -47,7 +47,7 @@ "jszip": "^3.10.1", "nodemailer": "^8.0.1", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", "@mtsrc/api-mux": "1.0.0", diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index 3b6b6d4fa..89cd59cf2 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/shuttle/service/package.json b/src/systems/shuttle/service/package.json index 572a7897d..7957a96e8 100644 --- a/src/systems/shuttle/service/package.json +++ b/src/systems/shuttle/service/package.json @@ -44,8 +44,8 @@ "@metorial-platform-systems/function-bay-client": "workspace:*", "@metorial/mcp-server": "^1.0.0-rc.11", "@modelcontextprotocol/sdk": "^1.25.3", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -60,7 +60,7 @@ "@metorial-platform-systems/object-storage-client": "workspace:*", "p-queue": "^9.1.0", "pg": "^8.16.3", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "ws": "^8.19.0", "yaml": "^2.8.2", @@ -92,4 +92,4 @@ "@mtsrc/tokens": "1.0.0", "@mtsrc/validation": "1.0.0" } -} \ No newline at end of file +} diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index e2f823a01..2826c54d8 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/signal/service/package.json b/src/systems/signal/service/package.json index 7eb555bb8..89b09652b 100644 --- a/src/systems/signal/service/package.json +++ b/src/systems/signal/service/package.json @@ -38,8 +38,8 @@ "@aws-sdk/client-cloudwatch-logs": "^3.957.0", "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -48,7 +48,7 @@ "ipaddr.js": "^2.3.0", "jszip": "^3.10.1", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "yaml": "^2.8.2", "@mtsrc/api-mux": "1.0.0", @@ -72,4 +72,4 @@ "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0" } -} \ No newline at end of file +} diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index 9ecff8c15..bb9f39e44 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index f128e346e..3507aa404 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -57,8 +57,8 @@ "@metorial-platform-systems/signal-client": "workspace:*", "@metorial-services/slates-registry-client": "latest", "@metorial-services/slates-registry-internal-client": "^1.0.0", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", @@ -72,7 +72,7 @@ "lodash": "4.17.21", "@metorial-platform-systems/object-storage-client": "workspace:*", "p-queue": "^9.0.1", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", @@ -111,4 +111,4 @@ "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0" } -} \ No newline at end of file +} diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index f6945c5c6..7bc08a4f4 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -8,9 +8,9 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/slates/apps/registry/package.json b/src/systems/slates/apps/registry/package.json index cd1623c97..7fd65eef1 100644 --- a/src/systems/slates/apps/registry/package.json +++ b/src/systems/slates/apps/registry/package.json @@ -51,8 +51,8 @@ "@metorial-io/ui-product": "^1.0.0", "@metorial-platform-systems/ares-client": "^1.0.0", "@metorial/util-endpoint": "^1.0.1", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@remixicon/react": "^4.0.0", "@sentry/bun": "^10.36.0", "@sentry/cli": "^3.2.0", @@ -63,7 +63,7 @@ "jszip": "^3.10.1", "lodash-es": "^4.17.22", "@metorial-platform-systems/object-storage-client": "workspace:*", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "react": "^19.2.3", "react-dom": "^19.2.3", @@ -97,4 +97,4 @@ "@mtsrc/snowflake": "1.0.0", "@mtsrc/validation": "1.0.0" } -} \ No newline at end of file +} diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index e1ea3c9ae..3eb50d192 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -8,9 +8,9 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/subspace/apps/controller/package.json b/src/systems/subspace/apps/controller/package.json index 8bf5c45c4..bdafec18d 100644 --- a/src/systems/subspace/apps/controller/package.json +++ b/src/systems/subspace/apps/controller/package.json @@ -21,7 +21,7 @@ "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", "@metorial-subspace/retry-utils": "^1.0.0", - "@prisma/adapter-pg": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", diff --git a/src/systems/subspace/apps/dev/package.json b/src/systems/subspace/apps/dev/package.json index 07d42286f..1745463bd 100644 --- a/src/systems/subspace/apps/dev/package.json +++ b/src/systems/subspace/apps/dev/package.json @@ -13,7 +13,7 @@ "@metorial-subspace/connection-utils": "^1.0.0", "@metorial-subspace/module-provider-internal": "^1.0.0", "@metorial-subspace/provider": "^1.0.0", - "@prisma/adapter-pg": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", "@types/bun": "latest", "express": "^5.2.1", "vitest": "4.0.17", @@ -54,4 +54,4 @@ "@mtsrc/serialize": "1.0.0", "@mtsrc/validation": "1.0.0" } -} \ No newline at end of file +} diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index f8f2f0f96..55dfbb3a3 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -8,11 +8,11 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install COPY _manifests/dependencies/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index 11cf0fd93..393c3d5ac 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -8,11 +8,11 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install COPY _manifests/dependencies/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/subspace/db/package.json b/src/systems/subspace/db/package.json index 7f198653d..cd1ac8d3c 100644 --- a/src/systems/subspace/db/package.json +++ b/src/systems/subspace/db/package.json @@ -19,12 +19,12 @@ "dependencies": { "@metorial-subspace/tsconfig": "^1.0.0", "@modelcontextprotocol/sdk": "^1.25.2", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "dotenv": "^17.2.3", "p-queue": "^9.1.0", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "@mtsrc/env": "1.0.0", "@mtsrc/error": "1.0.0", @@ -34,4 +34,4 @@ "@mtsrc/telemetry": "1.0.0", "@mtsrc/validation": "1.0.0" } -} \ No newline at end of file +} diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index 4b653d1c6..5cb1b9263 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -8,9 +8,9 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/synthesis/service/package.json b/src/systems/synthesis/service/package.json index 136d34f23..c7f89e681 100644 --- a/src/systems/synthesis/service/package.json +++ b/src/systems/synthesis/service/package.json @@ -37,15 +37,15 @@ "dependencies": { "@metorial-services/scout-client": "^1.0.0", "@openharness/core": "^0.6.2", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", "ai": "^6.0.175", "hono": "^4.9.6", "just-bash": "^2.14.4", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "zod": "^4.4.3", "@mtsrc/error": "1.0.0", diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index a671641cf..09f97a3e0 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -8,7 +8,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install --linker=hoisted +RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ diff --git a/src/systems/voyager/service/package.json b/src/systems/voyager/service/package.json index aa885d74c..ffb603399 100644 --- a/src/systems/voyager/service/package.json +++ b/src/systems/voyager/service/package.json @@ -37,8 +37,8 @@ "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", "@metorial-services/forge-client": "^1.0.3", - "@prisma/adapter-pg": "^7.2.0", - "@prisma/client": "^7.2.0", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "@prisma/extension-read-replicas": "^0.5.0", "@sentry/bun": "^10.38.0", "@sentry/cli": "^3.2.0", @@ -51,7 +51,7 @@ "jszip": "^3.10.1", "@metorial-platform-systems/object-storage-client": "workspace:*", "pg": "^8.16.3", - "prisma": "^7.2.0", + "prisma": "7.4.2", "prisma-json-types-generator": "^4.0.1", "snowflake-uuid": "^1.0.0", "yaml": "^2.8.2", diff --git a/src/tooling/control/src/builders/context.ts b/src/tooling/control/src/builders/context.ts index 583babe1c..ed86e878c 100644 --- a/src/tooling/control/src/builders/context.ts +++ b/src/tooling/control/src/builders/context.ts @@ -16,6 +16,18 @@ export type MaterializedBuildContext = { dockerfilePath: string; }; +// #region agent log +let debugLog = (d: { + runId: string; + hypothesisId: string; + location: string; + message: string; + data: Record; +}) => { + console.log(JSON.stringify({ source: 'control-debug', sessionId: '0825fe', ...d, timestamp: Date.now() })); +}; +// #endregion + let sanitizeName = (input: string) => input.replace(/[^a-zA-Z0-9._-]+/g, '-'); let resolveRelativeToRoot = (root: string, absolutePath: string): string => { @@ -41,6 +53,50 @@ let rootInputFilesForPlan = (sourceRoot: string): string[] => { .filter(path => existsSync(path)); }; +let prismaVersionSummary = (content: string) => { + let packageNames = [ + '@prisma/client', + '@prisma/adapter-pg', + '@prisma/driver-adapter-utils', + '@prisma/client-runtime-utils', + 'prisma', + '@prisma/config', + '@prisma/engines' + ]; + + return Object.fromEntries( + packageNames.map(name => [ + name, + [ + ...new Set( + [...content.matchAll(new RegExp(`${name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}@([0-9]+\\.[0-9]+\\.[0-9]+)`, 'g'))].map( + match => match[1] + ) + ) + ].sort() + ]) + ); +}; + +let directPrismaDependencySummary = (manifestFiles: GeneratedBuildPath[]) => { + let summary: Record> = {}; + + for (let file of manifestFiles) { + let json = JSON.parse(readFileSync(file.absolutePath, 'utf8')) as { + dependencies?: Record; + devDependencies?: Record; + peerDependencies?: Record; + }; + let deps = { ...json.dependencies, ...json.devDependencies, ...json.peerDependencies }; + let prismaDeps = Object.fromEntries( + Object.entries(deps).filter(([name]) => name === 'prisma' || name.startsWith('@prisma/')) + ); + if (Object.keys(prismaDeps).length > 0) summary[file.relativeToContext] = prismaDeps; + } + + return summary; +}; + let resolveSourceRoot = (opts: { plan: GeneratedBuildPlan; registry: ServiceRegistry; @@ -126,6 +182,31 @@ let materializeNodeContext = async (opts: { manifestFiles: cumulativeManifestFiles(opts.plan.installLayers, i) }) ); + + // #region agent log + let layerLockPath = join(layerRoot, 'bun.lock'); + let layerPackageJson = JSON.parse(readFileSync(join(layerRoot, 'package.json'), 'utf8')) as { + workspaces?: string[]; + }; + debugLog({ + runId: 'pre-fix', + hypothesisId: 'H2,H3,H4,H5', + location: 'oss/src/tooling/control/src/builders/context.ts:132', + message: 'control node manifest layer materialized', + data: { + service: opts.plan.service.name, + layer: layer.name, + command: layer.command, + manifestCount: layer.manifestFiles.length, + workspaces: layerPackageJson.workspaces ?? [], + directPrismaDependencies: directPrismaDependencySummary(layer.manifestFiles), + copiedLockExists: existsSync(layerLockPath), + copiedLockPrismaVersions: existsSync(layerLockPath) + ? prismaVersionSummary(readFileSync(layerLockPath, 'utf8')) + : {} + } + }); + // #endregion } for (let layer of opts.plan.sourceLayers) { @@ -195,6 +276,36 @@ export let materializeBuildContext = async (opts: { rmSync(contextRoot, { recursive: true, force: true }); mkdirSync(contextRoot, { recursive: true }); let sourceRoot = resolveSourceRoot(opts); + let sourceLockPath = resolve(sourceRoot, 'bun.lock'); + + // #region agent log + debugLog({ + runId: 'pre-fix', + hypothesisId: 'H1,H2,H3,H4,H5', + location: 'oss/src/tooling/control/src/builders/context.ts:286', + message: 'control build context source resolved', + data: { + service: opts.plan.service.name, + builder: opts.plan.builder, + contextRoot, + planContextRoot: opts.plan.contextRoot, + registryControlRoot: opts.registry.controlRoot, + sourceRoot, + hasSession: !!opts.session, + stagedEntrypoint: opts.session?.stagedEntrypoint, + repoRoot: opts.session?.repoRoot, + sourceLockExists: existsSync(sourceLockPath), + sourceLockPrismaVersions: existsSync(sourceLockPath) + ? prismaVersionSummary(readFileSync(sourceLockPath, 'utf8')) + : {}, + installLayers: opts.plan.installLayers.map(layer => ({ + name: layer.name, + command: layer.command, + manifestCount: layer.manifestFiles.length + })) + } + }); + // #endregion let dockerfileContent = opts.plan.builder === 'node' diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 5b05109a4..761b4f324 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -253,7 +253,7 @@ let createNodeInstallLayers = (opts: { registry: ServiceRegistry; includedProjects: Set; serviceProjects: Set; - installLinker: string; + installLinker?: string; }): GeneratedBuildInstallLayer[] => { let useCounts = collectNodeProjectUseCounts({ registry: opts.registry, @@ -313,7 +313,7 @@ let createNodeInstallLayers = (opts: { serviceProjects }); - let command = `bun install --linker=${opts.installLinker}`; + let command = opts.installLinker ? `bun install --linker=${opts.installLinker}` : 'bun install'; return ([ { @@ -534,7 +534,6 @@ let projectsForManifestLayer = ( }; export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { - let installLinker = plan.service.config.build?.install?.linker ?? 'hoisted'; let systemPackages = plan.service.config.build?.install?.system_packages ?? ['ca-certificates']; let automationLines = plan.automations.map(automation => renderAutomationCommand(automation)); let sourceLayerLines = plan.sourceLayers.flatMap(layer => [ @@ -656,7 +655,7 @@ export let nodeBuildBuilder: BuildBuilder = { registry, includedProjects, serviceProjects, - installLinker: build.install?.linker ?? 'hoisted' + installLinker: build.install?.linker }); let serviceBuildProjects = collectServiceBuildProjects(registry); let installLayerByName = new Map(plan.installLayers.map(layer => [layer.name, layer])); diff --git a/src/tooling/control/src/builders/pathing.ts b/src/tooling/control/src/builders/pathing.ts index 2e41e414b..83b7e91b6 100644 --- a/src/tooling/control/src/builders/pathing.ts +++ b/src/tooling/control/src/builders/pathing.ts @@ -179,7 +179,7 @@ export let resolveBuildSteps = (opts: { let defaultInstallCommand = (layer: ControlBuildInstallLayer, linker?: string): string => { if (layer.command) return layer.command; - if (layer.tool === 'bun') return `bun install --linker=${linker ?? 'hoisted'}`; + if (layer.tool === 'bun') return linker ? `bun install --linker=${linker}` : 'bun install'; if (layer.tool === 'go') return 'go mod download'; if (layer.tool === 'cargo') return 'cargo fetch'; throw new ControlError({ From d794edb71400bb72e3523c0114773eeeda22ac5c Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Tue, 26 May 2026 15:24:12 +0200 Subject: [PATCH 35/69] Add core tests --- .gitignore | 3 + src/backend/apis/core/package.json | 5 +- .../apis/core/test/e2e/apiCore.e2e.test.ts | 25 +++++ src/backend/apis/core/vitest.e2e.config.ts | 83 ++++++++++++++ src/backend/apps/api/Dockerfile | 36 ++++++ src/backend/apps/api/control.toml | 94 ++++++++++++++++ src/backend/apps/api/package.json | 4 +- .../modules/user/test/userSession.e2e.test.ts | 50 +++++++++ src/backend/modules/user/vitest.config.ts | 3 +- src/tooling/control/src/builders/node.ts | 106 +++++++++++++++--- src/tooling/control/src/cli.ts | 32 +++++- src/tooling/control/src/run/runner.ts | 7 +- src/tooling/control/src/types.ts | 1 + 13 files changed, 424 insertions(+), 25 deletions(-) create mode 100644 src/backend/apis/core/test/e2e/apiCore.e2e.test.ts create mode 100644 src/backend/apis/core/vitest.e2e.config.ts create mode 100644 src/backend/apps/api/Dockerfile create mode 100644 src/backend/apps/api/control.toml create mode 100644 src/backend/modules/user/test/userSession.e2e.test.ts diff --git a/.gitignore b/.gitignore index 29082a220..572dd308e 100644 --- a/.gitignore +++ b/.gitignore @@ -165,6 +165,9 @@ cache/ !src/_shared/backend/cache/ !src/_shared/backend/cache/** src/_shared/backend/cache/node_modules/ +!src/packages/backend/cache/ +!src/packages/backend/cache/** +src/packages/backend/cache/node_modules/ generated/ # Virtual Environment diff --git a/src/backend/apis/core/package.json b/src/backend/apis/core/package.json index b88a8338e..eb7d96d45 100644 --- a/src/backend/apis/core/package.json +++ b/src/backend/apis/core/package.json @@ -4,7 +4,9 @@ "author": "Tobias Herber", "license": "FSL-1.1", "main": "src/index.ts", - "scripts": {}, + "scripts": { + "test:e2e:control": "NODE_ENV=development vitest run --config vitest.e2e.config.ts" + }, "dependencies": { "@metorial/db": "^1.0.0", "@metorial/auth": "^1.0.0", @@ -13,6 +15,7 @@ "@metorial/presenter": "^1.0.0", "@metorial/module-access": "^1.0.0", "@metorial/module-assistant": "^1.0.0", + "@metorial/module-community": "^1.0.0", "@metorial/module-consumer": "^1.0.0", "@metorial/module-machine-access": "^1.0.0", "@metorial/module-magic": "^1.0.0", diff --git a/src/backend/apis/core/test/e2e/apiCore.e2e.test.ts b/src/backend/apis/core/test/e2e/apiCore.e2e.test.ts new file mode 100644 index 000000000..c3f43925d --- /dev/null +++ b/src/backend/apis/core/test/e2e/apiCore.e2e.test.ts @@ -0,0 +1,25 @@ +import { describe, expect, it } from 'vitest'; +import { apiServer } from '../../src/apiServer'; + +describe('api core e2e smoke', () => { + it('responds to the shared rest ping route', async () => { + let response = await apiServer.fetch(new Request('http://localhost/ping')); + + expect(response.status).toBe(200); + expect(await response.text()).toBe('OK'); + }); + + it('exposes api versions through the shared rest backbone', async () => { + let response = await apiServer.fetch( + new Request('http://localhost/metorial/introspect/versions') + ); + + expect(response.status).toBe(200); + await expect(response.json()).resolves.toMatchObject({ + versions: expect.arrayContaining([ + expect.objectContaining({ version: 'mt_2025_01_01_dashboard' }), + expect.objectContaining({ version: 'mt_2026_01_01_magnetar' }) + ]) + }); + }); +}); diff --git a/src/backend/apis/core/vitest.e2e.config.ts b/src/backend/apis/core/vitest.e2e.config.ts new file mode 100644 index 000000000..306c1a19c --- /dev/null +++ b/src/backend/apis/core/vitest.e2e.config.ts @@ -0,0 +1,83 @@ +import { defineConfig } from 'vitest/config'; + +let parseModules = () => + (process.env.CONTROL_E2E_MODULES ?? '') + .split(',') + .map(module => module.trim()) + .filter(Boolean); + +let moduleGlobs = (moduleName: string) => { + if (moduleName === 'all') { + return [ + '../../modules/*/test/**/*.e2e.test.ts', + '../../modules/*/src/**/*.e2e.test.ts', + '../../../../../federation/backend/modules/*/test/**/*.e2e.test.ts', + '../../../../../federation/backend/modules/*/src/**/*.e2e.test.ts' + ]; + } + + if (moduleName.startsWith('federation/')) { + let federationModule = moduleName.slice('federation/'.length); + return [ + `../../../../../federation/backend/modules/${federationModule}/test/**/*.e2e.test.ts`, + `../../../../../federation/backend/modules/${federationModule}/src/**/*.e2e.test.ts` + ]; + } + + return [ + `../../modules/${moduleName}/test/**/*.e2e.test.ts`, + `../../modules/${moduleName}/src/**/*.e2e.test.ts` + ]; +}; + +let selectedModuleGlobs = parseModules().flatMap(moduleGlobs); + +export default defineConfig({ + test: { + include: ['test/e2e/**/*.e2e.test.ts', ...selectedModuleGlobs], + pool: 'threads', + fileParallelism: false, + environment: 'node', + testTimeout: 30_000, + hookTimeout: 30_000, + env: { + API_URL: process.env.API_URL ?? 'http://localhost:4310', + APP_URL: process.env.APP_URL ?? 'http://localhost:3000', + ADMIN_API_URL: process.env.ADMIN_API_URL ?? 'http://localhost:4322', + ARES_AUTH_URL: process.env.ARES_AUTH_URL ?? 'http://localhost:5100', + ARES_INTERNAL_URL: process.env.ARES_INTERNAL_URL ?? 'http://localhost:5100', + BILLING_API_URL: process.env.BILLING_API_URL ?? 'http://localhost:4324', + CARGO_API_URL: process.env.CARGO_API_URL ?? 'http://localhost:52040', + COOKIE_DOMAIN: process.env.COOKIE_DOMAIN ?? 'localhost', + DATABASE_URL: process.env.DATABASE_URL ?? 'postgres://postgres:postgres@localhost:5432/metorial', + DASHBOARD_FRONTEND_HOST: process.env.DASHBOARD_FRONTEND_HOST ?? 'localhost:3000', + EMAIL_ADDRESS: process.env.EMAIL_ADDRESS ?? 'test@metorial.com', + EMAIL_FROM: process.env.EMAIL_FROM ?? 'test@metorial.com', + EMAIL_FROM_NAME: process.env.EMAIL_FROM_NAME ?? 'Metorial Test', + EMAIL_NAME: process.env.EMAIL_NAME ?? 'Metorial Test', + ENCRYPTION_SECRET: process.env.ENCRYPTION_SECRET ?? 'control-test-encryption-secret', + FEDERATION_CORE_DATABASE_URL: + process.env.FEDERATION_CORE_DATABASE_URL ?? + 'postgres://postgres:postgres@localhost:5432/metorial_federation', + FEDERATION_API_HOST: process.env.FEDERATION_API_HOST ?? 'localhost:4320', + FILES_URL: process.env.FILES_URL ?? 'http://localhost:4318', + FILES_BUCKET_NAME: process.env.FILES_BUCKET_NAME ?? 'files', + METORIAL_ENV: process.env.METORIAL_ENV ?? 'development', + NODE_ENV: process.env.NODE_ENV ?? 'development', + OBJECT_STORAGE_URL: process.env.OBJECT_STORAGE_URL ?? 'http://localhost:52010', + PAYMENT_DATABASE_URL: + process.env.PAYMENT_DATABASE_URL ?? + 'postgres://postgres:postgres@localhost:5432/metorial_payment', + PORTAL_HOST_TEMPLATE: process.env.PORTAL_HOST_TEMPLATE ?? 'http://{slug}.localhost:4315', + PORTAL_REDIRECT_DOMAINS: process.env.PORTAL_REDIRECT_DOMAINS ?? 'localhost', + PORTALS_URL: process.env.PORTALS_URL ?? 'http://localhost:4315', + RELAY_URL: process.env.RELAY_URL ?? 'http://localhost:52110', + REDIS_URL: process.env.REDIS_URL ?? 'redis://localhost:6379/0', + SUBSPACE_CONNECTION_URL: process.env.SUBSPACE_CONNECTION_URL ?? 'http://localhost:52050', + SUBSPACE_SOLUTION: process.env.SUBSPACE_SOLUTION ?? 'local', + SUBSPACE_URL: process.env.SUBSPACE_URL ?? 'http://localhost:52050', + SYNTHESIS_API_URL: process.env.SYNTHESIS_API_URL ?? 'http://localhost:52070', + AUTH_TICKET_SECRET: process.env.AUTH_TICKET_SECRET ?? 'control-auth-ticket-secret' + } + } +}); diff --git a/src/backend/apps/api/Dockerfile b/src/backend/apps/api/Dockerfile new file mode 100644 index 000000000..6496ae164 --- /dev/null +++ b/src/backend/apps/api/Dockerfile @@ -0,0 +1,36 @@ +# syntax=docker/dockerfile:1.7 +# generated by control bootstrap +FROM oven/bun:1.2.22 AS deps +WORKDIR /app +ENV NX_CACHE_DIRECTORY=/app/.nx/cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates && rm -rf /var/lib/apt/lists/* +COPY _manifests/base/ ./ +RUN --mount=type=cache,id=control-bun-install-app-api-base,target=/root/.bun/install/cache bun install --linker=hoisted +COPY _manifests/dependencies/ ./ +RUN --mount=type=cache,id=control-bun-install-app-api-dependencies,target=/root/.bun/install/cache bun install --linker=hoisted +COPY _manifests/service/ ./ +RUN --mount=type=cache,id=control-bun-install-app-api-service,target=/root/.bun/install/cache bun install --linker=hoisted +FROM deps AS build +WORKDIR /app +COPY _inputs/shared/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types +COPY _inputs/clients/ ./ +COPY _inputs/dependencies/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial-cargo/service,@metorial-subspace/db,@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/origin,@metorial/shuttle,@metorial/signal,@metorial/slates,@metorial/synthesis,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +COPY _inputs/service/ ./ +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/db; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/app-api:server:build +FROM build AS workspace +WORKDIR /app/oss/src/backend/apps/api +CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS runner +WORKDIR /app +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=build /app/oss/src/backend/apps/api/dist /app/dist +COPY --from=build /app/node_modules /app/node_modules +ENV NODE_ENV="production" +CMD ["sh", "-c", "bun /app/dist/index.js"] diff --git a/src/backend/apps/api/control.toml b/src/backend/apps/api/control.toml new file mode 100644 index 000000000..fbe55ad21 --- /dev/null +++ b/src/backend/apps/api/control.toml @@ -0,0 +1,94 @@ +[control] +name = "app-api" + +[service] +dockerfile = "Dockerfile" +build_context = "repo" + +[build] +builder = "node" +mode = "generated" +context = "repo" +project = "@metorial/app-api" +target = "server:build" +dockerfile = "Dockerfile" + +[build.install] +linker = "hoisted" + +[[build.automations]] +name = "app-api-prisma" +kind = "run-targets" +target = "prisma:generate" +projects = ["@metorial/db"] + +[build.artifacts] +copy = [ + { from = "dist", to = "/app/dist" }, + { from = "/app/node_modules", to = "/app/node_modules" } +] + +[build.runtime] +base_image = "oven/bun:1.2.22-alpine" +packages = ["curl"] +env = { NODE_ENV = "production" } +command = "bun /app/dist/index.js" + +[test.e2e] +command = "bun run --cwd oss/src/backend/apps/api test:e2e:control" +setup = [ + "bun run --cwd oss/src/backend/db prisma:generate", + "bun run --cwd oss/src/backend/db prisma:push" +] +cwd = "/app" +runner = "service" + +[[databases]] +adapter = "postgres" +name = "app-api-core" + +[env] +API_URL = "http://app-api:4310" +APP_URL = "http://app-api:3000" +ADMIN_API_URL = "http://app-api:4322" +ARES_AUTH_URL = "http://app-api:5100" +ARES_INTERNAL_URL = "http://app-api:5100" +AUTH_TICKET_SECRET = "control-auth-ticket-secret" +BILLING_API_URL = "http://app-api:4324" +CARGO_API_URL = "http://app-api:52040" +COOKIE_DOMAIN = "localhost" +DASHBOARD_FRONTEND_HOST = "localhost:3000" +DATABASE_URL = "$db.app-api-core.url" +EMAIL_ADDRESS = "test@metorial.com" +EMAIL_FROM = "test@metorial.com" +EMAIL_FROM_NAME = "Metorial Test" +EMAIL_NAME = "Metorial Test" +ENCRYPTION_SECRET = "control-test-encryption-secret" +FEDERATION_API_HOST = "localhost:4320" +FILES_URL = "http://app-api:4318" +FILES_BUCKET_NAME = "files" +METORIAL_ENV = "development" +NODE_ENV = "development" +OBJECT_STORAGE_URL = "http://app-api:52010" +PORTAL_HOST_TEMPLATE = "http://{slug}.localhost:4315" +PORTAL_REDIRECT_DOMAINS = "localhost" +PORTALS_URL = "http://app-api:4315" +RELAY_URL = "http://app-api:52110" +REDIS_URL = "redis://$deps.redis.6379/0" +SUBSPACE_CONNECTION_URL = "http://app-api:52050" +SUBSPACE_SOLUTION = "local" +SUBSPACE_URL = "http://app-api:52050" +SYNTHESIS_API_URL = "http://app-api:52070" + +[[deps]] +name = "postgres" +preset = "postgres" + +[deps.env] +POSTGRES_USER = "postgres" +POSTGRES_PASSWORD = "postgres" +POSTGRES_DB = "postgres" + +[[deps]] +name = "redis" +preset = "redis" diff --git a/src/backend/apps/api/package.json b/src/backend/apps/api/package.json index b01390732..e3a2b3071 100644 --- a/src/backend/apps/api/package.json +++ b/src/backend/apps/api/package.json @@ -5,8 +5,10 @@ "license": "FSL-1.1", "main": "src/index.ts", "scripts": { - "oss:server:build": "ncc build ./src/server.ts -o ./dist --source-map --external bun:sqlite", + "oss:server:build": "ncc build ./src/server.ts -o ./dist --source-map --transpile-only --external bun:sqlite", + "server:build": "bun run oss:server:build", "oss:server:start": "bun ./dist/index.js", + "test:e2e:control": "bun run --cwd ../../apis/core test:e2e:control", "dev": "bun --watch ./src/server.ts" }, "dependencies": { diff --git a/src/backend/modules/user/test/userSession.e2e.test.ts b/src/backend/modules/user/test/userSession.e2e.test.ts new file mode 100644 index 000000000..ca505873a --- /dev/null +++ b/src/backend/modules/user/test/userSession.e2e.test.ts @@ -0,0 +1,50 @@ +import { afterEach, describe, expect, it } from 'vitest'; +import { db } from '@metorial/db'; +import type { User } from '@metorial/db'; +import { userService } from '../src/services/user'; +import { userSessionService } from '../src/services/userSession'; + +let createdUsers: User[] = []; + +let context = { + requestId: 'control-e2e-user-session', + ip: '127.0.0.1' +} as any; + +let cleanupUser = async (user: User) => { + await db.userSession.deleteMany({ where: { userOid: user.oid } }); + await db.user.deleteMany({ where: { id: user.id } }); +}; + +afterEach(async () => { + for (let user of createdUsers.splice(0)) { + await cleanupUser(user); + } +}); + +describe('user session e2e', () => { + it('creates a user session that can be resolved by client secret', async () => { + let email = `control-user-session-${Date.now()}-${Math.random() + .toString(36) + .slice(2)}@example.com`; + + let user = await userService.createUser({ + input: { + name: 'Control E2E User', + email + }, + context + }); + createdUsers.push(user); + + let session = await userSessionService.createUserSession({ user, context }); + let resolved = await userSessionService.getSessionByClientSecretSafe({ + clientSecret: session.clientSecret, + context + }); + + expect(session.clientSecret).toMatch(/^metorial_ses_/); + expect(resolved?.id).toBe(session.id); + expect(resolved?.user.email).toBe(email); + }); +}); diff --git a/src/backend/modules/user/vitest.config.ts b/src/backend/modules/user/vitest.config.ts index 414d975d6..a50607521 100644 --- a/src/backend/modules/user/vitest.config.ts +++ b/src/backend/modules/user/vitest.config.ts @@ -3,6 +3,7 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { globals: true, - environment: 'node' + environment: 'node', + exclude: ['**/node_modules/**', '**/dist/**', '**/*.e2e.test.ts'] } }); diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 761b4f324..28194d046 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -1,4 +1,4 @@ -import { existsSync } from 'fs'; +import { existsSync, readFileSync } from 'fs'; import { resolve } from 'path'; import type { BuildBuilder } from './base'; import { @@ -86,6 +86,63 @@ let projectRootPath = (plan: GeneratedBuildPlan, projectRoot: string): Generated exists: true }); +let readProjectPackageJson = ( + plan: GeneratedBuildPlan, + graph: ReturnType, + project: string +): Record | null => { + let packagePath = projectPackageJsonPath(plan, getNxProjectRoot(graph, project)); + if (!packagePath) return null; + return JSON.parse(readFileSync(packagePath.absolutePath, 'utf8')) as Record; +}; + +let workspacePackageProjects = ( + plan: GeneratedBuildPlan, + graph: ReturnType +): Map => { + let packages = new Map(); + + for (let project of Object.keys(graph.nodes)) { + let packageJson = readProjectPackageJson(plan, graph, project); + if (typeof packageJson?.name === 'string') packages.set(packageJson.name, project); + } + + return packages; +}; + +let dependencyNames = (packageJson: Record): string[] => { + let deps = { + ...(packageJson.dependencies ?? {}), + ...(packageJson.devDependencies ?? {}), + ...(packageJson.peerDependencies ?? {}), + ...(packageJson.optionalDependencies ?? {}) + } as Record; + + return Object.keys(deps); +}; + +let closeWorkspaceManifestDependencies = (opts: { + plan: GeneratedBuildPlan; + graph: ReturnType; + projects: Set; +}) => { + let packages = workspacePackageProjects(opts.plan, opts.graph); + let queue = [...opts.projects]; + + while (queue.length > 0) { + let project = queue.shift()!; + let packageJson = readProjectPackageJson(opts.plan, opts.graph, project); + if (!packageJson) continue; + + for (let dependencyName of dependencyNames(packageJson)) { + let dependencyProject = packages.get(dependencyName); + if (!dependencyProject || opts.projects.has(dependencyProject)) continue; + opts.projects.add(dependencyProject); + queue.push(dependencyProject); + } + } +}; + let existingContextPath = ( plan: GeneratedBuildPlan, relativePath: string @@ -106,7 +163,14 @@ let existingContextPath = ( let isClientProject = ( graph: ReturnType, project: string -): boolean => getNxProjectRoot(graph, project).startsWith('src/systems/_clients/'); +): boolean => { + let root = getNxProjectRoot(graph, project); + return ( + root.startsWith('src/systems/_clients/') || + root.startsWith('oss/src/systems/_clients/') || + root.includes('/clients/') + ); +}; let collectServiceBuildProjects = (registry: ServiceRegistry): Set => { let projects = new Set(); @@ -145,7 +209,7 @@ let renderRetriableCommand = (command: string): string => `{ attempt=1; until ${command}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; }`; let renderNxRun = (command: string): string => - `RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && ${shouldRetryNxRun(command) ? renderRetriableCommand(command) : command}`; + `RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && ${shouldRetryNxRun(command) ? renderRetriableCommand(command) : command}`; let collectNodeProjectUseCounts = (opts: { registry: ServiceRegistry; @@ -277,6 +341,11 @@ let createNodeInstallLayers = (opts: { baseProjects.add(dep); } } + closeWorkspaceManifestDependencies({ + plan: opts.plan, + graph: opts.graph, + projects: baseProjects + }); for (let project of opts.includedProjects) { if (baseProjects.has(project)) continue; @@ -297,6 +366,21 @@ let createNodeInstallLayers = (opts: { clientProjects.add(dep); } } + closeWorkspaceManifestDependencies({ + plan: opts.plan, + graph: opts.graph, + projects: clientProjects + }); + closeWorkspaceManifestDependencies({ + plan: opts.plan, + graph: opts.graph, + projects: dependencyProjects + }); + closeWorkspaceManifestDependencies({ + plan: opts.plan, + graph: opts.graph, + projects: serviceProjects + }); closeInstallLayerOrder({ graph: opts.graph, @@ -460,7 +544,7 @@ let sourceLayerWarmCommands = ( if (layer.tier === 'clients' || layer.tier === 'service') return []; let buildableProjects = layer.projects.filter(project => - nxProjectHasTarget(graph, project, 'build') + nxProjectHasTarget(graph, project, 'build') && !isClientProject(graph, project) ); if (buildableProjects.length === 0) return []; @@ -476,17 +560,7 @@ let clientBuildWarmCommands = ( graph: ReturnType, projects: Set ): string[] => { - let buildableProjects = [...projects] - .filter(project => nxProjectHasTarget(graph, project, 'build')) - .sort((a, b) => a.localeCompare(b)); - if (buildableProjects.length === 0) return []; - - return [ - renderNxRunManyCommand({ - target: 'build', - projects: buildableProjects - }) - ]; + return []; }; let clientPrismaWarmCommandsForProjects = ( @@ -552,7 +626,7 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { ...renderAptInstall(systemPackages), ...plan.installLayers.flatMap(layer => [ `COPY _manifests/${layer.name}/ ./`, - `RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked ${layer.command}` + `RUN --mount=type=cache,id=control-bun-install-${plan.service.name}-${layer.name},target=/root/.bun/install/cache ${layer.command}` ]), '', 'FROM deps AS build', diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index 23c61e5fe..bc53cbe83 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -31,20 +31,36 @@ type StagedCliOpts = { 'no-stage'?: boolean; }; -let collectFilters = (argv: string[]): string[] => { - let filters: string[] = []; +let collectRepeatedOption = (argv: string[], names: string[]): string[] => { + let values: string[] = []; for (let i = 0; i < argv.length; i++) { - if (argv[i] === '--filter' || argv[i] === '-f') { + let arg = argv[i]!; + let match = names.find(name => arg === name || arg.startsWith(`${name}=`)); + if (match) { + if (arg.startsWith(`${match}=`)) { + let inlineValue = arg.slice(match.length + 1); + if (inlineValue) values.push(inlineValue); + continue; + } + let val = argv[i + 1]; if (val && !val.startsWith('-')) { - filters.push(val); + values.push(val); i++; } } } - return filters; + return values; }; +let collectFilters = (argv: string[]): string[] => collectRepeatedOption(argv, ['--filter', '-f']); + +let collectModules = (argv: string[]): string[] => + collectRepeatedOption(argv, ['--module']) + .flatMap(value => value.split(',')) + .map(value => value.trim()) + .filter(Boolean); + let runCommand = async (fn: () => Promise, opts?: { verbose?: boolean }) => { try { await fn(); @@ -197,6 +213,7 @@ let addRunCommand = (mode: 'e2e' | 'unit', name: string) => { .option('--project-prefix, -p', 'Docker compose project prefix') .option('--all', 'Run all services with this test mode') .option('--filter, -f', 'Run tests for named services') + .option('--module', 'Run e2e tests for named module(s); repeat or comma-separate') .option('--keep', 'Keep containers and staged workspace after test') .option('--no-stage', 'Run against the live checkout instead of a staged copy') .option('--verbose, -v', 'Verbose output') @@ -220,6 +237,7 @@ let addRunCommand = (mode: 'e2e' | 'unit', name: string) => { session }); let filters = collectFilters(process.argv); + let modules = collectModules(process.argv); let services = resolveTargets({ registry, @@ -240,6 +258,7 @@ let addRunCommand = (mode: 'e2e' | 'unit', name: string) => { keep: opts.keep, verbose: opts.verbose, noStage: opts['no-stage'], + e2eModules: mode === 'e2e' && modules.length ? modules : undefined, session, services: ordered }); @@ -315,6 +334,7 @@ prog .option('--project-prefix, -p', 'Docker compose project prefix') .option('--all', 'Run all services with this test mode') .option('--filter, -f', 'Run tests for named services') + .option('--module', 'Run e2e tests for named module(s); repeat or comma-separate') .option('--keep', 'Keep containers and staged workspace after test') .option('--no-stage', 'Run against the live checkout instead of a staged copy') .action(async (mode: string, target: string | undefined, opts: StagedCliOpts & { @@ -342,6 +362,7 @@ prog session }); let filters = collectFilters(process.argv); + let modules = collectModules(process.argv); let services = resolveTargets({ registry, @@ -363,6 +384,7 @@ prog verbose, keep: opts.keep, noStage: readNoStageOption(opts), + e2eModules: mode === 'e2e' && modules.length ? modules : undefined, session, services: ordered }); diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index 956028d4d..3d6c4dda2 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -254,7 +254,12 @@ export let runControl = async ( if (cwdInContainer !== '.') fullCmd = `cd ${cwdInContainer} && ${fullCmd}`; logger.debug(`Command: docker exec ${runnerContainer} sh -c ${JSON.stringify(fullCmd)}`); - await runShell(['docker', 'exec', runnerContainer, 'sh', '-c', fullCmd], { + let execEnv = + opts.e2eModules && opts.e2eModules.length + ? ['-e', `CONTROL_E2E_MODULES=${opts.e2eModules.join(',')}`] + : []; + + await runShell(['docker', 'exec', ...execEnv, runnerContainer, 'sh', '-c', fullCmd], { phase: 'test', service: serviceName, composeFile, diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts index 2b0b8a0f8..88a69dba2 100644 --- a/src/tooling/control/src/types.ts +++ b/src/tooling/control/src/types.ts @@ -330,6 +330,7 @@ export type RunOptions = { services?: ControlService[]; session?: WorkspaceSession | null; noStage?: boolean; + e2eModules?: string[]; }; export type WorkspaceSession = { From 8d81ee9514a14f0a6d6b65e9e78cb3c2b53903af Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Tue, 26 May 2026 15:49:46 +0200 Subject: [PATCH 36/69] Add core api ci --- .github/workflows/control.yml | 12 ++++++++++++ .github/workflows/reusable-control.yml | 14 +++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index 3fe5e2f83..0e2437184 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -84,3 +84,15 @@ jobs: project_prefix: ${{ matrix.service }}-ci runs-on: depot-ubuntu-24.04-4 checkout_submodules: ${{ matrix.service == 'subspace-controller' }} + + core-api-e2e: + name: E2E (app-api) + uses: ./.github/workflows/reusable-control.yml + secrets: inherit + with: + command: ci + mode: e2e + filter: app-api + modules: all + project_prefix: app-api-ci + runs-on: depot-ubuntu-24.04-4 diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index f76a70fcc..f9b93b66a 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -24,6 +24,11 @@ on: description: 'Optional docker compose project prefix for ci' required: false type: string + modules: + description: 'Optional module selector(s) to pass to control e2e' + required: false + default: '' + type: string runs-on: description: 'Runner label' required: false @@ -85,6 +90,7 @@ jobs: MODE: ${{ inputs.mode }} FILTER: ${{ inputs.filter }} ALL: ${{ inputs.all }} + MODULES: ${{ inputs.modules }} run: | set -euo pipefail @@ -97,6 +103,9 @@ jobs: else SCOPE="${COMMAND}-${MODE:-none}-none" fi + if [ -n "${MODULES}" ]; then + SCOPE="${SCOPE}-modules-${MODULES}" + fi SCOPE="$(printf '%s' "${SCOPE}" | tr -c 'A-Za-z0-9_.-' '-')" echo "scope=${SCOPE}" >> "${GITHUB_OUTPUT}" @@ -121,7 +130,7 @@ jobs: uses: actions/cache@v4 with: path: .control/cache/buildkit - key: control-buildkit-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}-${{ hashFiles('bun.lock', 'nx.json', 'src/tooling/control/src/**/*.ts', 'src/systems/**/control.toml', 'src/systems/**/Dockerfile') }} + key: control-buildkit-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}-${{ hashFiles('bun.lock', 'nx.json', 'src/tooling/control/src/**/*.ts', 'src/systems/**/control.toml', 'src/systems/**/Dockerfile', 'src/backend/apps/**/control.toml', 'src/backend/apps/**/Dockerfile') }} restore-keys: | control-buildkit-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}- control-buildkit-${{ runner.os }}-${{ github.ref_name }}- @@ -182,6 +191,9 @@ jobs: if [ -n "${{ inputs.project_prefix }}" ]; then ARGS+=(--project-prefix "${{ inputs.project_prefix }}") fi + if [ "${{ inputs.mode }}" = "e2e" ] && [ -n "${{ inputs.modules }}" ]; then + ARGS+=(--module "${{ inputs.modules }}") + fi else echo "Unsupported command: ${{ inputs.command }}" >&2 exit 1 From 20e66db9b04d688b0c2a80cfbf13c43c13362d33 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Tue, 26 May 2026 16:43:36 +0200 Subject: [PATCH 37/69] Build fixes --- src/backend/apps/api/Dockerfile | 10 +++++----- src/backend/apps/api/control.toml | 6 +++--- src/systems/shuttle/service/Dockerfile | 9 ++++----- .../service/src/services/serverDeployment.ts | 2 +- src/systems/signal/service/Dockerfile | 7 +++---- src/systems/subspace/apps/controller/Dockerfile | 13 ++++++------- src/tooling/control/src/builders/node.ts | 12 +++++++----- 7 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/backend/apps/api/Dockerfile b/src/backend/apps/api/Dockerfile index 6496ae164..893370359 100644 --- a/src/backend/apps/api/Dockerfile +++ b/src/backend/apps/api/Dockerfile @@ -16,14 +16,14 @@ RUN --mount=type=cache,id=control-bun-install-app-api-service,target=/root/.bun/ FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types +RUN --mount=type=cache,id=control-nx-cache-app-api,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial-cargo/service,@metorial-subspace/db,@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/origin,@metorial/shuttle,@metorial/signal,@metorial/slates,@metorial/synthesis,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-app-api,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types +RUN --mount=type=cache,id=control-nx-cache-app-api,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial-cargo/service,@metorial-subspace/db,@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/origin,@metorial/shuttle,@metorial/signal,@metorial/slates,@metorial/synthesis,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/db; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && bun x nx run @metorial/app-api:server:build +RUN --mount=type=cache,id=control-nx-cache-app-api,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/db; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-app-api,target=/app/.nx/cache cd /app && bun x nx run @metorial/app-api:server:build FROM build AS workspace WORKDIR /app/oss/src/backend/apps/api CMD ["sleep", "infinity"] diff --git a/src/backend/apps/api/control.toml b/src/backend/apps/api/control.toml index fbe55ad21..7d6d8c05e 100644 --- a/src/backend/apps/api/control.toml +++ b/src/backend/apps/api/control.toml @@ -35,10 +35,10 @@ env = { NODE_ENV = "production" } command = "bun /app/dist/index.js" [test.e2e] -command = "bun run --cwd oss/src/backend/apps/api test:e2e:control" +command = "ROOT=src; [ -d oss/src ] && ROOT=oss/src; bun run --cwd $ROOT/backend/apps/api test:e2e:control" setup = [ - "bun run --cwd oss/src/backend/db prisma:generate", - "bun run --cwd oss/src/backend/db prisma:push" + "ROOT=src; [ -d oss/src ] && ROOT=oss/src; bun run --cwd $ROOT/backend/db prisma:generate", + "ROOT=src; [ -d oss/src ] && ROOT=oss/src; bun run --cwd $ROOT/backend/db prisma:push" ] cwd = "/app" runner = "service" diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index 89cd59cf2..cd127cf46 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -8,16 +8,15 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-shuttle-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory +RUN --mount=type=cache,id=control-nx-cache-shuttle,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/shuttle:server:build +RUN --mount=type=cache,id=control-nx-cache-shuttle,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay,@metorial/shuttle; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-shuttle,target=/app/.nx/cache cd /app && bun x nx run @metorial/shuttle:server:build FROM build AS workspace WORKDIR /app/src/systems/shuttle/service CMD ["sleep", "infinity"] diff --git a/src/systems/shuttle/service/src/services/serverDeployment.ts b/src/systems/shuttle/service/src/services/serverDeployment.ts index 6651bca4a..1cb5e9a12 100644 --- a/src/systems/shuttle/service/src/services/serverDeployment.ts +++ b/src/systems/shuttle/service/src/services/serverDeployment.ts @@ -16,7 +16,7 @@ type ServerDeploymentOutputStep = { status: ServerDeploymentStepStatus; name: string; logs: { timestamp: number; message: string }[]; - type: ServerDeploymentStepType; + type: ServerDeploymentStepType | 'build' | 'deploy'; createdAt: Date; startedAt: Date | null; endedAt: Date | null; diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index 2826c54d8..57f2560fe 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -8,15 +8,14 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-signal-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/signal; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/signal:server:build +RUN --mount=type=cache,id=control-nx-cache-signal,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/signal; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-signal,target=/app/.nx/cache cd /app && bun x nx run @metorial/signal:server:build FROM build AS workspace WORKDIR /app/src/systems/signal/service CMD ["sleep", "infinity"] diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index 3eb50d192..a930f1a4e 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -8,20 +8,19 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-subspace-controller-base,target=/root/.bun/install/cache bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-subspace-controller-service,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory +RUN --mount=type=cache,id=control-nx-cache-subspace-controller,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client +RUN --mount=type=cache,id=control-nx-cache-subspace-controller,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-controller:server:build +RUN --mount=type=cache,id=control-nx-cache-subspace-controller,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-subspace-controller,target=/app/.nx/cache cd /app && bun x nx run @metorial-subspace/app-controller:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/controller CMD ["sleep", "infinity"] diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 28194d046..9743c37e2 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -208,8 +208,8 @@ let shouldRetryNxRun = (command: string): boolean => let renderRetriableCommand = (command: string): string => `{ attempt=1; until ${command}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; }`; -let renderNxRun = (command: string): string => - `RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache cd /app && ${shouldRetryNxRun(command) ? renderRetriableCommand(command) : command}`; +let renderNxRun = (cacheId: string) => (command: string): string => + `RUN --mount=type=cache,id=${cacheId},target=/app/.nx/cache cd /app && ${shouldRetryNxRun(command) ? renderRetriableCommand(command) : command}`; let collectNodeProjectUseCounts = (opts: { registry: ServiceRegistry; @@ -609,10 +609,12 @@ let projectsForManifestLayer = ( export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { let systemPackages = plan.service.config.build?.install?.system_packages ?? ['ca-certificates']; + let nxCacheId = `control-nx-cache-${plan.service.name}`; + let renderPlanNxRun = renderNxRun(nxCacheId); let automationLines = plan.automations.map(automation => renderAutomationCommand(automation)); let sourceLayerLines = plan.sourceLayers.flatMap(layer => [ `COPY _inputs/${layer.name}/ ./`, - ...layer.commands.map(renderNxRun) + ...layer.commands.map(renderPlanNxRun) ]); let artifactLines = renderArtifactLines(plan); let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); @@ -632,8 +634,8 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { 'FROM deps AS build', 'WORKDIR /app', ...sourceLayerLines, - ...automationLines.map(renderNxRun), - renderNxRun(`bun x nx run ${plan.project}:${plan.target}`), + ...automationLines.map(renderPlanNxRun), + renderPlanNxRun(`bun x nx run ${plan.project}:${plan.target}`), '', 'FROM build AS workspace', `WORKDIR ${plan.workspaceRoot}`, From f8c785064828ed23d9cca4e64e107f28a35d65ba Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Tue, 26 May 2026 16:57:54 +0200 Subject: [PATCH 38/69] maybe --- src/tooling/control/src/run/runner.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index 3d6c4dda2..ccb00edae 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -34,6 +34,15 @@ type RunControlContext = { service: ControlService; }; +let shouldRetrySetupStep = (command: string) => + command.includes('prisma generate') || command.includes('prisma:generate'); + +let renderSetupStep = (command: string) => { + if (!shouldRetrySetupStep(command)) return command; + + return `{ attempt=1; until ${command}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; }`; +}; + let waitForServices = async (opts: { services: string[]; verbose?: boolean; @@ -249,7 +258,7 @@ export let runControl = async ( failedPhase = 'test'; logger.info(`Running ${opts.mode} tests...`); - let setup = setupSteps.join(' && '); + let setup = setupSteps.map(renderSetupStep).join(' && '); let fullCmd = setup ? `${setup} && ${e2e.command}` : e2e.command; if (cwdInContainer !== '.') fullCmd = `cd ${cwdInContainer} && ${fullCmd}`; logger.debug(`Command: docker exec ${runnerContainer} sh -c ${JSON.stringify(fullCmd)}`); From 1308e9f822a777b11e94f033eb87d80484ba6365 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 08:12:31 +0200 Subject: [PATCH 39/69] update runner --- .github/workflows/control.yml | 8 ++++---- .github/workflows/reusable-control.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index 0e2437184..4374e3010 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -17,7 +17,7 @@ jobs: with: command: build all: true - runs-on: depot-ubuntu-24.04-4 + runs-on: ubuntu-latest unit: name: Unit (${{ matrix.service }}) @@ -49,7 +49,7 @@ jobs: command: ci mode: unit filter: ${{ matrix.service }} - runs-on: depot-ubuntu-24.04-4 + runs-on: ubuntu-latest e2e: name: E2E (${{ matrix.service }}) @@ -82,7 +82,7 @@ jobs: mode: e2e filter: ${{ matrix.service }} project_prefix: ${{ matrix.service }}-ci - runs-on: depot-ubuntu-24.04-4 + runs-on: ubuntu-latest checkout_submodules: ${{ matrix.service == 'subspace-controller' }} core-api-e2e: @@ -95,4 +95,4 @@ jobs: filter: app-api modules: all project_prefix: app-api-ci - runs-on: depot-ubuntu-24.04-4 + runs-on: ubuntu-latest diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index f9b93b66a..27d62967e 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -32,7 +32,7 @@ on: runs-on: description: 'Runner label' required: false - default: depot-ubuntu-24.04-4 + default: ubuntu-latest type: string checkout_submodules: description: 'Whether to checkout submodules recursively' From db8cb8e0e9d5d74184837f0f88b40ea692745911 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 09:31:02 +0200 Subject: [PATCH 40/69] Improve caching --- .github/workflows/reusable-control.yml | 106 +++-- bun.lock | 34 ++ src/backend/apps/api/Dockerfile | 2 + src/systems/ares/service/Dockerfile | 11 +- src/systems/cargo/service/Dockerfile | 11 +- src/systems/forge/service/Dockerfile | 9 +- src/systems/function-bay/service/Dockerfile | 11 +- src/systems/origin/apps/service/Dockerfile | 9 +- src/systems/relay/service/Dockerfile | 9 +- src/systems/shuttle/service/Dockerfile | 2 + src/systems/signal/service/Dockerfile | 2 + src/systems/slates/apps/hub/Dockerfile | 13 +- src/systems/slates/apps/registry/Dockerfile | 15 +- .../subspace/apps/controller/Dockerfile | 2 + src/systems/subspace/apps/public/Dockerfile | 21 +- src/systems/subspace/apps/worker/Dockerfile | 18 +- src/systems/synthesis/service/Dockerfile | 10 +- src/systems/voyager/service/Dockerfile | 9 +- src/tooling/control/package.json | 1 + src/tooling/control/src/builders/node.ts | 2 + src/tooling/control/src/cli.ts | 77 ++++ src/tooling/control/src/compose/builds.ts | 2 + src/tooling/control/src/compose/generator.ts | 16 +- .../control/src/nx-cache/actions-cache.d.ts | 9 + src/tooling/control/src/nx-cache/server.ts | 432 ++++++++++++++++++ src/tooling/control/src/run/build.ts | 14 + 26 files changed, 747 insertions(+), 100 deletions(-) create mode 100644 src/tooling/control/src/nx-cache/actions-cache.d.ts create mode 100644 src/tooling/control/src/nx-cache/server.ts diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 27d62967e..439a59cf4 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -40,7 +40,7 @@ on: default: false type: boolean enable_cache: - description: 'Restore and save Nx/BuildKit caches' + description: 'Enable the Nx GitHub Actions cache bridge' required: false default: true type: boolean @@ -74,13 +74,6 @@ jobs: with: bun-version: '1.2.20' - - name: Set up Docker Buildx - id: buildx - if: ${{ inputs.enable_cache && (inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e')) }} - uses: docker/setup-buildx-action@v3 - with: - install: true - - name: Compute cache scope id: cache-scope if: ${{ inputs.enable_cache }} @@ -112,29 +105,7 @@ jobs: - name: Prepare cache directories if: ${{ inputs.enable_cache }} - run: mkdir -p .nx/cache .control/cache/buildkit - - - name: Restore Nx cache - if: ${{ inputs.enable_cache }} - uses: actions/cache@v4 - with: - path: .nx/cache - key: control-nx-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}-${{ hashFiles('bun.lock', 'package.json', 'nx.json', 'src/tooling/control/package.json', 'src/tooling/control/src/**/*.ts') }} - restore-keys: | - control-nx-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}- - control-nx-${{ runner.os }}-${{ github.ref_name }}- - control-nx-${{ runner.os }}- - - - name: Restore BuildKit cache - if: ${{ inputs.enable_cache && (inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e')) }} - uses: actions/cache@v4 - with: - path: .control/cache/buildkit - key: control-buildkit-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}-${{ hashFiles('bun.lock', 'nx.json', 'src/tooling/control/src/**/*.ts', 'src/systems/**/control.toml', 'src/systems/**/Dockerfile', 'src/backend/apps/**/control.toml', 'src/backend/apps/**/Dockerfile') }} - restore-keys: | - control-buildkit-${{ runner.os }}-${{ github.ref_name }}-${{ steps.cache-scope.outputs.scope }}- - control-buildkit-${{ runner.os }}-${{ github.ref_name }}- - control-buildkit-${{ runner.os }}- + run: mkdir -p .nx/cache .control/cache/nx-artifacts .control/cache/nx-manifest - name: Install control packages if: ${{ inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e') }} @@ -148,24 +119,70 @@ jobs: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache run: bun i + - name: Start Nx cache bridge + if: ${{ inputs.enable_cache }} + env: + CACHE_NAMESPACE: control-v1-${{ runner.os }}-${{ hashFiles('bun.lock', 'package.json', 'nx.json') }} + CACHE_SCOPE: ${{ steps.cache-scope.outputs.scope }} + CACHE_REF: ${{ github.ref_name }} + run: | + set -euo pipefail + + PORT=43191 + SERVER_URL="http://127.0.0.1:${PORT}" + MANIFEST_PREFIX="control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF}-${CACHE_SCOPE}" + MANIFEST_SAVE_KEY="${MANIFEST_PREFIX}-${{ github.run_id }}-${{ github.run_attempt }}" + + bun run control cache-server \ + --port "${PORT}" \ + --namespace "${CACHE_NAMESPACE}" \ + --root ".control/cache/nx-artifacts" \ + --manifest-dir ".control/cache/nx-manifest" \ + --stats ".control/cache/nx-stats.json" \ + --ready-file ".control/cache/nx-server.ready" \ + --manifest-save-key "${MANIFEST_SAVE_KEY}" \ + --manifest-primary-key "${MANIFEST_SAVE_KEY}" \ + --manifest-restore-key "${MANIFEST_PREFIX}-" \ + --manifest-restore-key "control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF}-" \ + --manifest-restore-key "control-nx-used-digests-${CACHE_NAMESPACE}-" \ + > .control/cache/nx-server.log 2>&1 & + + echo "$!" > .control/cache/nx-server.pid + for attempt in $(seq 1 30); do + if [ -f .control/cache/nx-server.ready ]; then + echo "server=${SERVER_URL}" >> "${GITHUB_OUTPUT}" + exit 0 + fi + sleep 1 + done + + echo "Nx cache bridge did not become ready" >&2 + if [ -f .control/cache/nx-server.log ]; then + cat .control/cache/nx-server.log >&2 + fi + exit 1 + - name: Generate Prisma Clients if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache + NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} run: bun x nx run-many --target=prisma:generate --all --parallel=1 - name: Build platform system clients if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache + NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} run: bun x nx run-many --target=build --projects=@metorial-platform-systems/origin-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/synthesis-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/ares-client,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/subspace-client - name: Run control env: - BUILDX_BUILDER: ${{ steps.buildx.outputs.name }} - CONTROL_BUILDKIT_CACHE: ${{ inputs.enable_cache && (inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e')) && '1' || '0' }} + CONTROL_BUILDKIT_CACHE: '0' + CONTROL_NX_REMOTE_CACHE_DOCKER_URL: ${{ inputs.enable_cache && 'http://host.docker.internal:43191' || '' }} CONTROL_VERBOSE: '1' NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache + NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} run: | set -euo pipefail @@ -200,3 +217,26 @@ jobs: fi bun run control "${ARGS[@]}" + + - name: Finalize Nx cache bridge + if: ${{ always() && inputs.enable_cache }} + run: | + set +e + + if [ -f .control/cache/nx-server.pid ]; then + bun run control cache-finalize --server "http://127.0.0.1:43191" + fi + + bun run control cache-summary \ + --stats ".control/cache/nx-stats.json" \ + --root ".control/cache/nx-artifacts" + + if [ -f .control/cache/nx-server.log ]; then + echo "" + echo "Nx cache bridge log" + cat .control/cache/nx-server.log + fi + + if [ -f .control/cache/nx-server.pid ]; then + kill "$(cat .control/cache/nx-server.pid)" 2>/dev/null || true + fi diff --git a/bun.lock b/bun.lock index 661be9f5b..66d1720b8 100644 --- a/bun.lock +++ b/bun.lock @@ -783,6 +783,7 @@ "@metorial/db": "^1.0.0", "@metorial/module-access": "^1.0.0", "@metorial/module-assistant": "^1.0.0", + "@metorial/module-community": "^1.0.0", "@metorial/module-consumer": "^1.0.0", "@metorial/module-file": "^1.0.0", "@metorial/module-machine-access": "^1.0.0", @@ -4348,6 +4349,7 @@ "control": "./src/cli.ts", }, "dependencies": { + "@actions/cache": "^6.0.1", "sade": "^1.8.1", "smol-toml": "^1.3.1", "yaml": "^2.8.2", @@ -4368,6 +4370,18 @@ "@aws-sdk/util-dynamodb": "3.996.2", }, "packages": { + "@actions/cache": ["@actions/cache@6.0.1", "", { "dependencies": { "@actions/core": "^3.0.1", "@actions/exec": "^3.0.0", "@actions/glob": "^0.6.1", "@actions/http-client": "^4.0.1", "@actions/io": "^3.0.2", "@azure/core-rest-pipeline": "^1.23.0", "@azure/storage-blob": "^12.31.0", "@protobuf-ts/runtime-rpc": "^2.11.1", "semver": "^7.7.4" } }, "sha512-kcM23yPzDQEME05ZFV/bRzsHS9yDzCe97F7guF9+c/jJwE9ns+gFQt3MmnRXOHh1DsnlNuKcIwXYdnt4kHLGqg=="], + + "@actions/core": ["@actions/core@3.0.1", "", { "dependencies": { "@actions/exec": "^3.0.0", "@actions/http-client": "^4.0.0" } }, "sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA=="], + + "@actions/exec": ["@actions/exec@3.0.0", "", { "dependencies": { "@actions/io": "^3.0.2" } }, "sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw=="], + + "@actions/glob": ["@actions/glob@0.6.1", "", { "dependencies": { "@actions/core": "^3.0.0", "minimatch": "^3.0.4" } }, "sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw=="], + + "@actions/http-client": ["@actions/http-client@4.0.1", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^6.23.0" } }, "sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg=="], + + "@actions/io": ["@actions/io@3.0.2", "", {}, "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw=="], + "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.76", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-kOuvT9e6PygFvgYpkr4v9gjvmcMPfJp79jaXjeRl9Gpoj2OXdtc3ero7o1ic+tiSBw5IMubxXFO68BCA/axGJA=="], "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.112", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-jiBao9pR4owWyjo0BnuNc7WSQBGOD0thysE4AFgZXaG+zMFbISQXUkJr7ePw/phBvePy7jE5FSA2Lf7lwqUiiQ=="], @@ -4550,6 +4564,8 @@ "@azure/core-util": ["@azure/core-util@1.13.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A=="], + "@azure/core-xml": ["@azure/core-xml@1.5.1", "", { "dependencies": { "fast-xml-parser": "^5.5.9", "tslib": "^2.8.1" } }, "sha512-xcNRHqCoSp4AunOALEae6A8f3qATb83gSrm31Iqb01OzblvC3/W/bfXozcq78EzIdzZzuH1bZ2NvRR0TdX709w=="], + "@azure/identity": ["@azure/identity@4.13.1", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.2", "@azure/core-rest-pipeline": "^1.17.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", "@azure/msal-browser": "^5.5.0", "@azure/msal-node": "^5.1.0", "open": "^10.1.0", "tslib": "^2.2.0" } }, "sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw=="], "@azure/keyvault-common": ["@azure/keyvault-common@2.1.0", "", { "dependencies": { "@azure-rest/core-client": "^2.3.3", "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.3.0", "@azure/core-rest-pipeline": "^1.8.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.10.0", "@azure/logger": "^1.1.4", "tslib": "^2.2.0" } }, "sha512-aCDidWuKY06LWQ4x7/8TIXK6iRqTaRWRL3t7T+LC+j1b07HtoIsOxP/tU90G4jCSBn5TAyUTCtA4MS/y5Hudaw=="], @@ -4564,6 +4580,10 @@ "@azure/msal-node": ["@azure/msal-node@5.1.2", "", { "dependencies": { "@azure/msal-common": "16.4.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" } }, "sha512-DoeSJ9U5KPAIZoHsPywvfEj2MhBniQe0+FSpjLUTdWoIkI999GB5USkW6nNEHnIaLVxROHXvprWA1KzdS1VQ4A=="], + "@azure/storage-blob": ["@azure/storage-blob@12.31.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.3", "@azure/core-http-compat": "^2.2.0", "@azure/core-lro": "^2.2.0", "@azure/core-paging": "^1.6.2", "@azure/core-rest-pipeline": "^1.19.1", "@azure/core-tracing": "^1.2.0", "@azure/core-util": "^1.11.0", "@azure/core-xml": "^1.4.5", "@azure/logger": "^1.1.4", "@azure/storage-common": "^12.3.0", "events": "^3.0.0", "tslib": "^2.8.1" } }, "sha512-DBgNv10aCSxopt92DkTDD0o9xScXeBqPKGmR50FPZQaEcH4JLQ+GEOGEDv19V5BMkB7kxr+m4h6il/cCDPvmHg=="], + + "@azure/storage-common": ["@azure/storage-common@12.3.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", "@azure/core-http-compat": "^2.2.0", "@azure/core-rest-pipeline": "^1.19.1", "@azure/core-tracing": "^1.2.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.1.4", "events": "^3.3.0", "tslib": "^2.8.1" } }, "sha512-/OFHhy86aG5Pe8dP5tsp+BuJ25JOAl9yaMU3WZbkeoiFMHFtJ7tu5ili7qEdBXNW9G5lDB19trwyI6V49F/8iQ=="], + "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], "@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], @@ -5784,6 +5804,10 @@ "@prisma/studio-core": ["@prisma/studio-core@0.13.1", "", { "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-agdqaPEePRHcQ7CexEfkX1RvSH9uWDb6pXrZnhCRykhDFAV0/0P3d07WtfiY8hZWb7oRU4v+NkT4cGFHkQJIPg=="], + "@protobuf-ts/runtime": ["@protobuf-ts/runtime@2.11.1", "", {}, "sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ=="], + + "@protobuf-ts/runtime-rpc": ["@protobuf-ts/runtime-rpc@2.11.1", "", { "dependencies": { "@protobuf-ts/runtime": "^2.11.1" } }, "sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ=="], + "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], @@ -8998,6 +9022,8 @@ "tsup": ["tsup@8.5.1", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.27.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing=="], + "tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="], + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], "turndown": ["turndown@7.2.4", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ=="], @@ -9228,6 +9254,10 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + "@actions/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + + "@actions/http-client/undici": ["undici@6.24.1", "", {}, "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA=="], + "@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.8", "", {}, "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="], "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.973.4", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q=="], @@ -11014,6 +11044,8 @@ "yargs-unparser/is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], + "@actions/glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "@aws-crypto/crc32/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], "@aws-crypto/crc32c/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], @@ -14790,6 +14822,8 @@ "vscode/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + "@actions/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], diff --git a/src/backend/apps/api/Dockerfile b/src/backend/apps/api/Dockerfile index 893370359..3a29eec4a 100644 --- a/src/backend/apps/api/Dockerfile +++ b/src/backend/apps/api/Dockerfile @@ -2,7 +2,9 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index 9e2f7d8f3..1c9dc0c2f 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -2,23 +2,24 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-ares-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/ares:server:build +RUN --mount=type=cache,id=control-nx-cache-ares,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-ares,target=/app/.nx/cache cd /app && bun x nx run-many --target=frontend:build --projects=@metorial/ares +RUN --mount=type=cache,id=control-nx-cache-ares,target=/app/.nx/cache cd /app && bun x nx run @metorial/ares:server:build FROM build AS workspace WORKDIR /app/src/systems/ares/service CMD ["sleep", "infinity"] diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index 8d979d60b..6aadd1dc9 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -2,23 +2,24 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-cargo-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/voyager-client +RUN --mount=type=cache,id=control-nx-cache-cargo,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-cargo/service:server:build +RUN --mount=type=cache,id=control-nx-cache-cargo,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-cargo,target=/app/.nx/cache cd /app && bun x nx run @metorial-cargo/service:server:build FROM build AS workspace WORKDIR /app/src/systems/cargo/service CMD ["sleep", "infinity"] diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index c5f4ccf1a..f45f05464 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -2,21 +2,22 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-forge-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/forge:server:build +RUN --mount=type=cache,id=control-nx-cache-forge,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-forge,target=/app/.nx/cache cd /app && bun x nx run @metorial/forge:server:build FROM build AS workspace WORKDIR /app/src/systems/forge/service CMD ["sleep", "infinity"] diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 926980ce0..5ba407954 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -2,22 +2,23 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-function-bay-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types +RUN --mount=type=cache,id=control-nx-cache-function-bay,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types COPY _inputs/clients/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/function-bay:server:build +RUN --mount=type=cache,id=control-nx-cache-function-bay,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/forge,@metorial/function-bay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-function-bay,target=/app/.nx/cache cd /app && bun x nx run @metorial/function-bay:server:build FROM build AS workspace WORKDIR /app/src/systems/function-bay/service CMD ["sleep", "infinity"] diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index 26c9e83c3..9f33d31db 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -2,21 +2,22 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-origin-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/origin:server:build +RUN --mount=type=cache,id=control-nx-cache-origin,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/origin; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-origin,target=/app/.nx/cache cd /app && bun x nx run @metorial/origin:server:build FROM build AS workspace WORKDIR /app/src/systems/origin/apps/service CMD ["sleep", "infinity"] diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 0864f6e6d..92321068a 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -2,21 +2,22 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-relay-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/relay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/relay:server:build +RUN --mount=type=cache,id=control-nx-cache-relay,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/relay; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-relay,target=/app/.nx/cache cd /app && bun x nx run @metorial/relay:server:build FROM build AS workspace WORKDIR /app/src/systems/relay/service CMD ["sleep", "infinity"] diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index cd127cf46..50127984a 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -2,7 +2,9 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index 57f2560fe..5cacf1249 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -2,7 +2,9 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index bb9f39e44..08376d7ca 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -2,24 +2,25 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-slates-hub-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types +RUN --mount=type=cache,id=control-nx-cache-slates-hub,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/signal-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/slates:server:build +RUN --mount=type=cache,id=control-nx-cache-slates-hub,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-slates-hub,target=/app/.nx/cache cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates +RUN --mount=type=cache,id=control-nx-cache-slates-hub,target=/app/.nx/cache cd /app && bun x nx run @metorial/slates:server:build FROM build AS workspace WORKDIR /app/src/systems/slates/apps/hub CMD ["sleep", "infinity"] diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 7bc08a4f4..118a1695a 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -2,26 +2,27 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-slates-registry-base,target=/root/.bun/install/cache bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-slates-registry-service,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/relay-client +RUN --mount=type=cache,id=control-nx-cache-slates-registry,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/ares; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/slates-registry:server:build +RUN --mount=type=cache,id=control-nx-cache-slates-registry,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/slates-registry; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-slates-registry,target=/app/.nx/cache cd /app && bun x nx run-many --target=admin:build --projects=@metorial/slates-registry +RUN --mount=type=cache,id=control-nx-cache-slates-registry,target=/app/.nx/cache cd /app && bun x nx run @metorial/slates-registry:server:build FROM build AS workspace WORKDIR /app/src/systems/slates/apps/registry CMD ["sleep", "infinity"] diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index a930f1a4e..f62424904 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -2,7 +2,9 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index 55dfbb3a3..5f475cb76 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -2,30 +2,31 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-subspace-public-base,target=/root/.bun/install/cache bun install COPY _manifests/dependencies/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-subspace-public-dependencies,target=/root/.bun/install/cache bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-subspace-public-service,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory +RUN --mount=type=cache,id=control-nx-cache-subspace-public,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial/ui -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client +RUN --mount=type=cache,id=control-nx-cache-subspace-public,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory,@metorial/ui +RUN --mount=type=cache,id=control-nx-cache-subspace-public,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial-cargo/service,@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/origin,@metorial/shuttle,@metorial/signal,@metorial/slates,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-public:server:build +RUN --mount=type=cache,id=control-nx-cache-subspace-public,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-subspace-public,target=/app/.nx/cache cd /app && bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public +RUN --mount=type=cache,id=control-nx-cache-subspace-public,target=/app/.nx/cache cd /app && bun x nx run @metorial-subspace/app-public:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/public CMD ["sleep", "infinity"] diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index 393c3d5ac..85d6a5241 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -2,28 +2,30 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-subspace-worker-base,target=/root/.bun/install/cache bun install COPY _manifests/dependencies/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-subspace-worker-dependencies,target=/root/.bun/install/cache bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-subspace-worker-service,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory +RUN --mount=type=cache,id=control-nx-cache-subspace-worker,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory COPY _inputs/clients/ ./ COPY _inputs/dependencies/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial/ares,@metorial/origin,@metorial/shuttle,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/ares-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/object-storage-client,@metorial-platform-systems/origin-client,@metorial-platform-systems/relay-client,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/voyager-client +RUN --mount=type=cache,id=control-nx-cache-subspace-worker,target=/app/.nx/cache cd /app && bun x nx run-many --target=build --projects=@function-bay/types,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory +RUN --mount=type=cache,id=control-nx-cache-subspace-worker,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/db,@metorial-cargo/service,@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/origin,@metorial/shuttle,@metorial/signal,@metorial/slates,@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial-subspace/app-worker:server:build +RUN --mount=type=cache,id=control-nx-cache-subspace-worker,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial-cargo/service,@metorial-subspace/db,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/slates,@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-subspace-worker,target=/app/.nx/cache cd /app && bun x nx run @metorial-subspace/app-worker:server:build FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/worker CMD ["sleep", "infinity"] diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index 5cb1b9263..ef087f739 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -2,21 +2,23 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-synthesis-base,target=/root/.bun/install/cache bun install COPY _manifests/service/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-synthesis-service,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/synthesis:server:build +RUN --mount=type=cache,id=control-nx-cache-synthesis,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/synthesis; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-synthesis,target=/app/.nx/cache cd /app && bun x nx run @metorial/synthesis:server:build FROM build AS workspace WORKDIR /app/src/systems/synthesis/service CMD ["sleep", "infinity"] diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index 09f97a3e0..69327d952 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -2,21 +2,22 @@ # generated by control bootstrap FROM oven/bun:1.2.22 AS deps WORKDIR /app +ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER ENV NX_CACHE_DIRECTORY=/app/.nx/cache +ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER} RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates && rm -rf /var/lib/apt/lists/* COPY _manifests/base/ ./ -RUN --mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked bun install +RUN --mount=type=cache,id=control-bun-install-voyager-base,target=/root/.bun/install/cache bun install FROM deps AS build WORKDIR /app COPY _inputs/shared/ ./ COPY _inputs/clients/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run-many --target=build --projects=@metorial-platform-systems/object-storage-client COPY _inputs/service/ ./ -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } -RUN --mount=type=cache,id=control-nx-cache,target=/app/.nx/cache,sharing=locked cd /app && bun x nx run @metorial/voyager:server:build +RUN --mount=type=cache,id=control-nx-cache-voyager,target=/app/.nx/cache cd /app && { attempt=1; until bun x nx run-many --target=prisma:generate --projects=@metorial/voyager; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; } +RUN --mount=type=cache,id=control-nx-cache-voyager,target=/app/.nx/cache cd /app && bun x nx run @metorial/voyager:server:build FROM build AS workspace WORKDIR /app/src/systems/voyager/service CMD ["sleep", "infinity"] diff --git a/src/tooling/control/package.json b/src/tooling/control/package.json index ecccd1a85..e48b35f32 100644 --- a/src/tooling/control/package.json +++ b/src/tooling/control/package.json @@ -12,6 +12,7 @@ "test": "bun test src" }, "dependencies": { + "@actions/cache": "^6.0.1", "sade": "^1.8.1", "smol-toml": "^1.3.1", "yaml": "^2.8.2" diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 9743c37e2..e7bb9749a 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -624,7 +624,9 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { '# generated by control bootstrap', `FROM ${nodeBuildImage} AS deps`, 'WORKDIR /app', + 'ARG NX_SELF_HOSTED_REMOTE_CACHE_SERVER', 'ENV NX_CACHE_DIRECTORY=/app/.nx/cache', + 'ENV NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${NX_SELF_HOSTED_REMOTE_CACHE_SERVER}', ...renderAptInstall(systemPackages), ...plan.installLayers.flatMap(layer => [ `COPY _manifests/${layer.name}/ ./`, diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index bc53cbe83..a73eca3ff 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -21,6 +21,7 @@ import { withWorkspaceSession } from './staging/session'; import type { WorkspaceSession } from './types'; import { runBootstrap } from './bootstrap'; import { installShutdownHandlers } from './run/lifecycle'; +import { printCacheSummary, runCacheServer } from './nx-cache/server'; installShutdownHandlers(); @@ -61,6 +62,12 @@ let collectModules = (argv: string[]): string[] => .map(value => value.trim()) .filter(Boolean); +let collectManifestRestoreKeys = (argv: string[]): string[] => + collectRepeatedOption(argv, ['--manifest-restore-key']) + .flatMap(value => value.split('\n')) + .map(value => value.trim()) + .filter(Boolean); + let runCommand = async (fn: () => Promise, opts?: { verbose?: boolean }) => { try { await fn(); @@ -91,6 +98,76 @@ prog }); }); +prog + .command('cache-server') + .describe('Run the local Nx remote cache bridge') + .option('--port', 'Port to listen on', '43191') + .option('--host', 'Host to listen on', '127.0.0.1') + .option('--root', 'Local artifact root', '.control/cache/nx-artifacts') + .option('--manifest-dir', 'Digest manifest directory', '.control/cache/nx-manifest') + .option('--stats', 'Stats output path', '.control/cache/nx-stats.json') + .option('--ready-file', 'File written when the server is listening') + .option('--namespace', 'GitHub cache namespace', 'v1') + .option('--manifest-save-key', 'GitHub cache key for the updated digest manifest') + .option('--manifest-primary-key', 'Primary GitHub cache key for digest manifest restore') + .option('--manifest-restore-key', 'GitHub cache key or prefix for manifest restore') + .option('--max-manifest-entries', 'Maximum digest manifest entries', '500') + .action(async (opts: { + port?: string; + host?: string; + root?: string; + 'manifest-dir'?: string; + stats?: string; + 'ready-file'?: string; + namespace?: string; + 'manifest-save-key'?: string; + 'manifest-primary-key'?: string; + 'manifest-restore-key'?: string; + 'max-manifest-entries'?: string; + }) => { + await runCommand(async () => { + await runCacheServer({ + port: Number(opts.port ?? '43191'), + host: opts.host ?? '127.0.0.1', + root: opts.root ?? '.control/cache/nx-artifacts', + manifestDir: opts['manifest-dir'] ?? '.control/cache/nx-manifest', + statsPath: opts.stats ?? '.control/cache/nx-stats.json', + readyFile: opts['ready-file'], + namespace: opts.namespace ?? 'v1', + manifestSaveKey: opts['manifest-save-key'], + manifestRestoreKey: opts['manifest-primary-key'] ?? opts['manifest-restore-key'], + manifestRestoreKeys: collectManifestRestoreKeys(process.argv), + maxManifestEntries: Number(opts['max-manifest-entries'] ?? '500') + }); + }); + }); + +prog + .command('cache-finalize') + .describe('Flush the local Nx cache bridge') + .option('--server', 'Cache server URL', 'http://127.0.0.1:43191') + .action(async (opts: { server?: string }) => { + await runCommand(async () => { + let res = await fetch(`${opts.server ?? 'http://127.0.0.1:43191'}/control/finalize`, { + method: 'POST' + }); + if (!res.ok) throw new Error(`Cache finalize failed with ${res.status}`); + await res.text(); + console.log('Nx cache bridge finalized'); + }); + }); + +prog + .command('cache-summary') + .describe('Print local Nx cache bridge stats') + .option('--stats', 'Stats output path', '.control/cache/nx-stats.json') + .option('--root', 'Local artifact root', '.control/cache/nx-artifacts') + .action(async (opts: { stats?: string; root?: string }) => { + await runCommand(async () => { + printCacheSummary(opts.stats ?? '.control/cache/nx-stats.json', opts.root ?? '.control/cache/nx-artifacts'); + }); + }); + prog .command('ls') .describe('List all control-managed services') diff --git a/src/tooling/control/src/compose/builds.ts b/src/tooling/control/src/compose/builds.ts index 423898187..99d2861f7 100644 --- a/src/tooling/control/src/compose/builds.ts +++ b/src/tooling/control/src/compose/builds.ts @@ -5,6 +5,8 @@ export type DockerBuildConfig = { context: string; dockerfile: string; target: string; + args?: Record; + extra_hosts?: string[]; }; export type DockerBuildSpec = DockerBuildConfig & { diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index 8cdd56849..52de8c0dc 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -96,6 +96,20 @@ let applyBuildContext = ( let buildCacheDir = (opts: { cacheRoot?: string; name: string }) => opts.cacheRoot ? resolve(opts.cacheRoot, `${opts.name}`) : undefined; +let withRemoteNxCache = (build: DockerBuildConfig): DockerBuildConfig => { + let url = process.env.CONTROL_NX_REMOTE_CACHE_DOCKER_URL; + if (!url) return build; + + return { + ...build, + args: { + ...build.args, + NX_SELF_HOSTED_REMOTE_CACHE_SERVER: url + }, + extra_hosts: [...(build.extra_hosts ?? []), 'host.docker.internal:host-gateway'] + }; +}; + let composeBuild = ( name: string, build: DockerBuildConfig, @@ -103,7 +117,7 @@ let composeBuild = ( ) => { let cacheDir = buildCacheDir({ cacheRoot: composeOptions?.cacheRoot, name }); return { - ...build, + ...withRemoteNxCache(build), ...(cacheDir ? { ...(existsSync(cacheDir) ? { cache_from: [`type=local,src=${cacheDir}`] } : {}), diff --git a/src/tooling/control/src/nx-cache/actions-cache.d.ts b/src/tooling/control/src/nx-cache/actions-cache.d.ts new file mode 100644 index 000000000..b40daf0bb --- /dev/null +++ b/src/tooling/control/src/nx-cache/actions-cache.d.ts @@ -0,0 +1,9 @@ +declare module '@actions/cache' { + export function restoreCache( + paths: string[], + primaryKey: string, + restoreKeys?: string[] + ): Promise; + + export function saveCache(paths: string[], key: string): Promise; +} diff --git a/src/tooling/control/src/nx-cache/server.ts b/src/tooling/control/src/nx-cache/server.ts new file mode 100644 index 000000000..70f154a55 --- /dev/null +++ b/src/tooling/control/src/nx-cache/server.ts @@ -0,0 +1,432 @@ +import { existsSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'fs'; +import { dirname, join, resolve } from 'path'; + +type CacheStats = { + startedAt: string; + updatedAt: string; + namespace: string; + artifactKeyPrefix: string; + manifestRestoreKey?: string; + manifestMatchedKey?: string; + manifestSaveKey?: string; + manifestSaved?: boolean; + localHits: number; + githubHits: number; + misses: number; + uploads: number; + duplicateUploads: number; + uploadFailures: number; + prefetchHits: number; + prefetchMisses: number; + requests: { + head: number; + get: number; + put: number; + }; + usedDigests: string[]; + operations: { + type: string; + hash?: string; + durationMs: number; + status: string; + message?: string; + }[]; +}; + +type ServerOptions = { + port: number; + host: string; + root: string; + manifestDir: string; + statsPath: string; + readyFile?: string; + namespace: string; + manifestSaveKey?: string; + manifestRestoreKey?: string; + manifestRestoreKeys: string[]; + maxManifestEntries: number; +}; + +type Manifest = { + version: 1; + updatedAt: string; + digests: { hash: string; lastUsedAt: string; useCount: number }[]; +}; + +let loadActionsCache = async () => await import('@actions/cache'); + +let isActionsCacheAvailable = () => + !!process.env.ACTIONS_RUNTIME_TOKEN && + !!(process.env.ACTIONS_CACHE_URL || process.env.ACTIONS_RESULTS_URL); + +let ensureDir = (path: string) => mkdirSync(path, { recursive: true }); + +let safeWriteJson = (path: string, value: unknown) => { + ensureDir(dirname(path)); + writeFileSync(path, JSON.stringify(value, null, 2) + '\n'); +}; + +let artifactDir = (root: string, hash: string) => resolve(root, hash); +let artifactPath = (root: string, hash: string) => join(artifactDir(root, hash), 'artifact.tar'); +let manifestPath = (manifestDir: string) => join(manifestDir, 'manifest.json'); +let artifactKey = (namespace: string, hash: string) => `control-nx-task-${namespace}-${hash}`; + +let readManifest = (path: string): Manifest => { + if (!existsSync(path)) return { version: 1, updatedAt: new Date().toISOString(), digests: [] }; + return JSON.parse(readFileSync(path, 'utf8')) as Manifest; +}; + +let directorySize = (path: string): number => { + if (!existsSync(path)) return 0; + let entry = statSync(path); + if (entry.isFile()) return entry.size; + let total = 0; + for (let name of Array.from(new Bun.Glob('**/*').scanSync({ cwd: path, dot: true }))) { + let fullPath = join(path, name); + let stat = statSync(fullPath); + if (stat.isFile()) total += stat.size; + } + return total; +}; + +let formatBytes = (bytes: number) => { + if (bytes < 1024) return `${bytes} B`; + let kb = bytes / 1024; + if (kb < 1024) return `${kb.toFixed(1)} KiB`; + let mb = kb / 1024; + if (mb < 1024) return `${mb.toFixed(1)} MiB`; + return `${(mb / 1024).toFixed(1)} GiB`; +}; + +let createStats = (opts: ServerOptions): CacheStats => ({ + startedAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + namespace: opts.namespace, + artifactKeyPrefix: `control-nx-task-${opts.namespace}-`, + manifestRestoreKey: opts.manifestRestoreKey, + manifestSaveKey: opts.manifestSaveKey, + manifestSaved: false, + localHits: 0, + githubHits: 0, + misses: 0, + uploads: 0, + duplicateUploads: 0, + uploadFailures: 0, + prefetchHits: 0, + prefetchMisses: 0, + requests: { head: 0, get: 0, put: 0 }, + usedDigests: [], + operations: [] +}); + +export let printCacheSummary = (statsPath: string, root?: string) => { + if (!existsSync(statsPath)) { + console.log(`No Nx cache stats found at ${statsPath}`); + return; + } + + let stats = JSON.parse(readFileSync(statsPath, 'utf8')) as CacheStats; + let size = root ? directorySize(root) : 0; + let slowest = [...stats.operations] + .sort((a, b) => b.durationMs - a.durationMs) + .slice(0, 10); + + console.log('Nx cache summary'); + console.log(` Namespace: ${stats.namespace}`); + console.log(` Manifest restored: ${stats.manifestMatchedKey ?? 'none'}`); + console.log(` Manifest saved: ${stats.manifestSaved ? (stats.manifestSaveKey ?? 'yes') : 'no'}`); + console.log(` Requests: HEAD ${stats.requests.head}, GET ${stats.requests.get}, PUT ${stats.requests.put}`); + console.log(` Local hits: ${stats.localHits}`); + console.log(` GitHub hits: ${stats.githubHits}`); + console.log(` Misses: ${stats.misses}`); + console.log(` Uploads: ${stats.uploads}`); + console.log(` Duplicate uploads: ${stats.duplicateUploads}`); + console.log(` Upload failures: ${stats.uploadFailures}`); + console.log(` Prefetch: ${stats.prefetchHits} hit, ${stats.prefetchMisses} miss`); + console.log(` Used digests: ${stats.usedDigests.length}`); + if (root) console.log(` Local artifact dir: ${formatBytes(size)}`); + + if (slowest.length > 0) { + console.log(''); + console.log('Slowest cache operations'); + for (let op of slowest) { + console.log(` ${String(op.durationMs).padStart(6)}ms ${op.type}${op.hash ? ` ${op.hash}` : ''} ${op.status}${op.message ? ` - ${op.message}` : ''}`); + } + } +}; + +export let runCacheServer = async (opts: ServerOptions) => { + ensureDir(opts.root); + ensureDir(opts.manifestDir); + + let stats = createStats(opts); + let used = new Map(); + let downloads = new Map>(); + let uploadQueue = Promise.resolve(); + let uploadTasks: Promise[] = []; + + let persistStats = () => { + stats.updatedAt = new Date().toISOString(); + stats.usedDigests = [...used.values()] + .sort((a, b) => b.lastUsedAt.localeCompare(a.lastUsedAt)) + .map(d => d.hash); + safeWriteJson(opts.statsPath, stats); + }; + + let recordOp = (op: CacheStats['operations'][number]) => { + stats.operations.push(op); + if (stats.operations.length > 200) stats.operations.shift(); + persistStats(); + }; + + let touch = (hash: string) => { + let existing = used.get(hash); + used.set(hash, { + hash, + lastUsedAt: new Date().toISOString(), + useCount: (existing?.useCount ?? 0) + 1 + }); + }; + + let localExists = (hash: string) => existsSync(artifactPath(opts.root, hash)); + + let restoreArtifact = async (hash: string) => { + if (localExists(hash)) return true; + let existing = downloads.get(hash); + if (existing) return existing; + + let task = (async () => { + let started = Date.now(); + let dir = artifactDir(opts.root, hash); + rmSync(dir, { recursive: true, force: true }); + ensureDir(dir); + + if (!isActionsCacheAvailable()) { + recordOp({ type: 'restore', hash, durationMs: Date.now() - started, status: 'skipped', message: 'GitHub Actions cache env missing' }); + return false; + } + + try { + let actionsCache = await loadActionsCache(); + let matched = await actionsCache.restoreCache([dir], artifactKey(opts.namespace, hash), []); + let hit = !!matched && localExists(hash); + recordOp({ type: 'restore', hash, durationMs: Date.now() - started, status: hit ? 'hit' : 'miss', message: matched }); + return hit; + } catch (err) { + recordOp({ + type: 'restore', + hash, + durationMs: Date.now() - started, + status: 'failed', + message: err instanceof Error ? err.message : String(err) + }); + return false; + } finally { + downloads.delete(hash); + } + })(); + + downloads.set(hash, task); + return task; + }; + + let queueUpload = (hash: string) => { + let task = uploadQueue.then(async () => { + let started = Date.now(); + let dir = artifactDir(opts.root, hash); + if (!localExists(hash)) return; + + if (!isActionsCacheAvailable()) { + recordOp({ type: 'upload', hash, durationMs: Date.now() - started, status: 'skipped', message: 'GitHub Actions cache env missing' }); + return; + } + + try { + let actionsCache = await loadActionsCache(); + await actionsCache.saveCache([dir], artifactKey(opts.namespace, hash)); + stats.uploads++; + recordOp({ type: 'upload', hash, durationMs: Date.now() - started, status: 'saved' }); + } catch (err) { + let message = err instanceof Error ? err.message : String(err); + if (/already exists|reserve|409|Unable to reserve/i.test(message)) { + stats.duplicateUploads++; + recordOp({ type: 'upload', hash, durationMs: Date.now() - started, status: 'duplicate', message }); + return; + } + stats.uploadFailures++; + recordOp({ type: 'upload', hash, durationMs: Date.now() - started, status: 'failed', message }); + } + }); + + uploadQueue = task.catch(() => {}); + uploadTasks.push(task); + }; + + let restoreManifest = async () => { + if (!opts.manifestRestoreKey || !isActionsCacheAvailable()) return; + let started = Date.now(); + try { + let actionsCache = await loadActionsCache(); + let matched = await actionsCache.restoreCache( + [opts.manifestDir], + opts.manifestRestoreKey, + opts.manifestRestoreKeys + ); + stats.manifestMatchedKey = matched; + recordOp({ type: 'manifest-restore', durationMs: Date.now() - started, status: matched ? 'hit' : 'miss', message: matched }); + } catch (err) { + recordOp({ + type: 'manifest-restore', + durationMs: Date.now() - started, + status: 'failed', + message: err instanceof Error ? err.message : String(err) + }); + } + }; + + let prefetchFromManifest = async () => { + await restoreManifest(); + let manifest = readManifest(manifestPath(opts.manifestDir)); + for (let entry of manifest.digests.slice(0, opts.maxManifestEntries)) { + if (localExists(entry.hash)) { + stats.prefetchHits++; + continue; + } + let hit = await restoreArtifact(entry.hash); + if (hit) stats.prefetchHits++; + else stats.prefetchMisses++; + } + persistStats(); + }; + + let writeManifest = async () => { + let previous = readManifest(manifestPath(opts.manifestDir)); + for (let entry of previous.digests) { + if (!used.has(entry.hash)) used.set(entry.hash, entry); + } + + let digests = [...used.values()] + .sort((a, b) => b.lastUsedAt.localeCompare(a.lastUsedAt)) + .slice(0, opts.maxManifestEntries); + + safeWriteJson(manifestPath(opts.manifestDir), { + version: 1, + updatedAt: new Date().toISOString(), + digests + } satisfies Manifest); + + if (!opts.manifestSaveKey || !isActionsCacheAvailable()) return; + let started = Date.now(); + try { + let actionsCache = await loadActionsCache(); + await actionsCache.saveCache([opts.manifestDir], opts.manifestSaveKey); + stats.manifestSaved = true; + recordOp({ type: 'manifest-save', durationMs: Date.now() - started, status: 'saved', message: opts.manifestSaveKey }); + } catch (err) { + let message = err instanceof Error ? err.message : String(err); + if (/already exists|reserve|409|Unable to reserve/i.test(message)) { + stats.manifestSaved = true; + recordOp({ type: 'manifest-save', durationMs: Date.now() - started, status: 'duplicate', message }); + return; + } + recordOp({ type: 'manifest-save', durationMs: Date.now() - started, status: 'failed', message }); + } + }; + + let finalize = async () => { + await Promise.allSettled(uploadTasks); + await writeManifest(); + persistStats(); + }; + + persistStats(); + let prefetchTask = prefetchFromManifest().catch(err => { + recordOp({ + type: 'prefetch', + durationMs: 0, + status: 'failed', + message: err instanceof Error ? err.message : String(err) + }); + }); + + let server = Bun.serve({ + hostname: opts.host, + port: opts.port, + async fetch(req) { + let url = new URL(req.url); + let match = url.pathname.match(/^\/v1\/cache\/([^/]+)$/); + + if (url.pathname === '/control/finalize' && req.method === 'POST') { + await finalize(); + return Response.json(stats); + } + + if (url.pathname === '/control/summary') { + persistStats(); + return Response.json(stats); + } + + if (!match) return new Response('not found', { status: 404 }); + let hash = decodeURIComponent(match[1]!); + touch(hash); + + if (req.method === 'HEAD') { + stats.requests.head++; + if (localExists(hash)) { + stats.localHits++; + persistStats(); + return new Response(null, { status: 200 }); + } + let hit = await restoreArtifact(hash); + if (hit) { + stats.githubHits++; + persistStats(); + return new Response(null, { status: 200 }); + } + stats.misses++; + persistStats(); + return new Response(null, { status: 404 }); + } + + if (req.method === 'GET') { + stats.requests.get++; + if (localExists(hash)) { + stats.localHits++; + } else { + let hit = await restoreArtifact(hash); + if (hit) stats.githubHits++; + else { + stats.misses++; + persistStats(); + return new Response('cache miss', { status: 404 }); + } + } + + persistStats(); + return new Response(Bun.file(artifactPath(opts.root, hash)), { + headers: { 'content-type': 'application/octet-stream' } + }); + } + + if (req.method === 'PUT') { + stats.requests.put++; + ensureDir(artifactDir(opts.root, hash)); + writeFileSync(artifactPath(opts.root, hash), Buffer.from(await req.arrayBuffer())); + queueUpload(hash); + persistStats(); + return new Response('ok'); + } + + return new Response('method not allowed', { status: 405 }); + } + }); + + if (opts.readyFile) { + ensureDir(dirname(opts.readyFile)); + writeFileSync(opts.readyFile, `${server.url}\n`); + } + + console.log(`Nx cache server listening at ${server.url}`); + await prefetchTask; + await new Promise(() => {}); +}; diff --git a/src/tooling/control/src/run/build.ts b/src/tooling/control/src/run/build.ts index 1e90b1133..c26774c30 100644 --- a/src/tooling/control/src/run/build.ts +++ b/src/tooling/control/src/run/build.ts @@ -28,6 +28,18 @@ let buildCacheDir = (opts: { controlRoot: string; rootName: string; specName: st let shouldUseBuildCacheExport = () => process.env.CONTROL_BUILDKIT_CACHE === '1'; +let appendRemoteNxCacheArgs = (cmd: string[]) => { + let url = process.env.CONTROL_NX_REMOTE_CACHE_DOCKER_URL; + if (!url) return; + + cmd.push( + '--add-host', + 'host.docker.internal:host-gateway', + '--build-arg', + `NX_SELF_HOSTED_REMOTE_CACHE_SERVER=${url}` + ); +}; + let runBuildForService = async ( opts: BuildOptions & { service: ControlService; context?: BuildContext } ) => { @@ -106,6 +118,8 @@ let runBuildForService = async ( cmd.push('--cache-to', `type=local,dest=${cacheDir},mode=max`); } + appendRemoteNxCacheArgs(cmd); + if (process.env.SENTRY_AUTH_TOKEN) { cmd.push('--build-arg', `SENTRY_AUTH_TOKEN=${process.env.SENTRY_AUTH_TOKEN}`); } From 2d2a98df81e46cfa3e087e5c72b3f5f8d14c1988 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 09:44:01 +0200 Subject: [PATCH 41/69] Fixes --- .github/workflows/reusable-control.yml | 3 +- src/tooling/control/src/cli.ts | 40 +++++++++------------- src/tooling/control/src/nx-cache/server.ts | 38 +++++++++++++++++++- 3 files changed, 55 insertions(+), 26 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 439a59cf4..53d2849a0 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -130,7 +130,8 @@ jobs: PORT=43191 SERVER_URL="http://127.0.0.1:${PORT}" - MANIFEST_PREFIX="control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF}-${CACHE_SCOPE}" + CACHE_REF_SAFE="$(printf '%s' "${CACHE_REF}" | tr -c 'A-Za-z0-9_.-' '-')" + MANIFEST_PREFIX="control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-${CACHE_SCOPE}" MANIFEST_SAVE_KEY="${MANIFEST_PREFIX}-${{ github.run_id }}-${{ github.run_attempt }}" bun run control cache-server \ diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index a73eca3ff..8f86a2966 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -68,6 +68,9 @@ let collectManifestRestoreKeys = (argv: string[]): string[] => .map(value => value.trim()) .filter(Boolean); +let readCliOption = (argv: string[], name: string, fallback?: string): string | undefined => + collectRepeatedOption(argv, [name]).at(-1) ?? fallback; + let runCommand = async (fn: () => Promise, opts?: { verbose?: boolean }) => { try { await fn(); @@ -112,32 +115,21 @@ prog .option('--manifest-primary-key', 'Primary GitHub cache key for digest manifest restore') .option('--manifest-restore-key', 'GitHub cache key or prefix for manifest restore') .option('--max-manifest-entries', 'Maximum digest manifest entries', '500') - .action(async (opts: { - port?: string; - host?: string; - root?: string; - 'manifest-dir'?: string; - stats?: string; - 'ready-file'?: string; - namespace?: string; - 'manifest-save-key'?: string; - 'manifest-primary-key'?: string; - 'manifest-restore-key'?: string; - 'max-manifest-entries'?: string; - }) => { + .action(async (opts: Record) => { await runCommand(async () => { + let argv = process.argv; await runCacheServer({ - port: Number(opts.port ?? '43191'), - host: opts.host ?? '127.0.0.1', - root: opts.root ?? '.control/cache/nx-artifacts', - manifestDir: opts['manifest-dir'] ?? '.control/cache/nx-manifest', - statsPath: opts.stats ?? '.control/cache/nx-stats.json', - readyFile: opts['ready-file'], - namespace: opts.namespace ?? 'v1', - manifestSaveKey: opts['manifest-save-key'], - manifestRestoreKey: opts['manifest-primary-key'] ?? opts['manifest-restore-key'], - manifestRestoreKeys: collectManifestRestoreKeys(process.argv), - maxManifestEntries: Number(opts['max-manifest-entries'] ?? '500') + port: Number(readCliOption(argv, '--port', '43191')), + host: readCliOption(argv, '--host', '127.0.0.1')!, + root: readCliOption(argv, '--root', '.control/cache/nx-artifacts')!, + manifestDir: readCliOption(argv, '--manifest-dir', '.control/cache/nx-manifest')!, + statsPath: readCliOption(argv, '--stats', '.control/cache/nx-stats.json')!, + readyFile: readCliOption(argv, '--ready-file'), + namespace: readCliOption(argv, '--namespace', 'v1')!, + manifestSaveKey: readCliOption(argv, '--manifest-save-key'), + manifestRestoreKey: readCliOption(argv, '--manifest-primary-key') ?? readCliOption(argv, '--manifest-restore-key'), + manifestRestoreKeys: collectManifestRestoreKeys(argv), + maxManifestEntries: Number(readCliOption(argv, '--max-manifest-entries', '500')) }); }); }); diff --git a/src/tooling/control/src/nx-cache/server.ts b/src/tooling/control/src/nx-cache/server.ts index 70f154a55..3a751b3db 100644 --- a/src/tooling/control/src/nx-cache/server.ts +++ b/src/tooling/control/src/nx-cache/server.ts @@ -1,5 +1,5 @@ import { existsSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'fs'; -import { dirname, join, resolve } from 'path'; +import { dirname, isAbsolute, join, resolve } from 'path'; type CacheStats = { startedAt: string; @@ -61,6 +61,30 @@ let isActionsCacheAvailable = () => let ensureDir = (path: string) => mkdirSync(path, { recursive: true }); +let findRuntimeRoot = () => { + if (process.env.GITHUB_WORKSPACE) return process.env.GITHUB_WORKSPACE; + + let current = process.cwd(); + for (let i = 0; i < 8; i++) { + let manifestPath = join(current, 'package.json'); + if (existsSync(manifestPath)) { + try { + let manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as { name?: string }; + if (manifest.name === '@metorial/oss') return current; + } catch {} + } + + let parent = dirname(current); + if (parent === current) break; + current = parent; + } + + return process.env.INIT_CWD ?? process.cwd(); +}; + +let resolveRuntimePath = (path: string): string => + isAbsolute(path) ? path : resolve(findRuntimeRoot(), path); + let safeWriteJson = (path: string, value: unknown) => { ensureDir(dirname(path)); writeFileSync(path, JSON.stringify(value, null, 2) + '\n'); @@ -120,6 +144,9 @@ let createStats = (opts: ServerOptions): CacheStats => ({ }); export let printCacheSummary = (statsPath: string, root?: string) => { + statsPath = resolveRuntimePath(statsPath); + root = root ? resolveRuntimePath(root) : undefined; + if (!existsSync(statsPath)) { console.log(`No Nx cache stats found at ${statsPath}`); return; @@ -156,6 +183,14 @@ export let printCacheSummary = (statsPath: string, root?: string) => { }; export let runCacheServer = async (opts: ServerOptions) => { + opts = { + ...opts, + root: resolveRuntimePath(opts.root), + manifestDir: resolveRuntimePath(opts.manifestDir), + statsPath: resolveRuntimePath(opts.statsPath), + readyFile: opts.readyFile ? resolveRuntimePath(opts.readyFile) : undefined + }; + ensureDir(opts.root); ensureDir(opts.manifestDir); @@ -426,6 +461,7 @@ export let runCacheServer = async (opts: ServerOptions) => { writeFileSync(opts.readyFile, `${server.url}\n`); } + console.log(`Nx cache ready file: ${opts.readyFile ?? 'none'}`); console.log(`Nx cache server listening at ${server.url}`); await prefetchTask; await new Promise(() => {}); From 6d216c8b5148fb1491ce751be001d3c9971898c3 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 09:53:57 +0200 Subject: [PATCH 42/69] Maybe --- .github/workflows/reusable-control.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 53d2849a0..2fe6bfcf2 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -136,6 +136,7 @@ jobs: bun run control cache-server \ --port "${PORT}" \ + --host "0.0.0.0" \ --namespace "${CACHE_NAMESPACE}" \ --root ".control/cache/nx-artifacts" \ --manifest-dir ".control/cache/nx-manifest" \ From 6f3ea85d9fb1aeaecc4630181c28af74b8cf1d69 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 10:05:13 +0200 Subject: [PATCH 43/69] maybe --- .github/workflows/reusable-control.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 2fe6bfcf2..fdd483455 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -119,6 +119,10 @@ jobs: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache run: bun i + - name: Expose GitHub Actions cache runtime + if: ${{ inputs.enable_cache }} + uses: crazy-max/ghaction-github-runtime@v3 + - name: Start Nx cache bridge if: ${{ inputs.enable_cache }} env: From d5815968711be0f85fc5d5e5f741652e79bf02bc Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 10:16:25 +0200 Subject: [PATCH 44/69] Maybe --- nx.json | 2 +- src/tooling/control/src/bootstrap.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nx.json b/nx.json index d0e804ad1..75b49fed3 100644 --- a/nx.json +++ b/nx.json @@ -97,7 +97,7 @@ ] }, "prisma:generate": { - "cache": true, + "cache": false, "dependsOn": [ "^prisma:generate" ], diff --git a/src/tooling/control/src/bootstrap.ts b/src/tooling/control/src/bootstrap.ts index a795b3b6c..d3d386393 100644 --- a/src/tooling/control/src/bootstrap.ts +++ b/src/tooling/control/src/bootstrap.ts @@ -77,7 +77,7 @@ let createNxConfig = (scope: 'repo' | 'oss' = 'repo') => ({ inputs: ['production', '^production'] }, 'prisma:generate': { - cache: true, + cache: false, dependsOn: ['^prisma:generate'], inputs: ['production', '^production'] }, From bc7a0699b9fe72ea2194aa978e29bb5e72286c5e Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 10:25:34 +0200 Subject: [PATCH 45/69] well --- .github/workflows/reusable-control.yml | 18 ++++++++-- src/tooling/control/src/nx-cache/server.ts | 40 +++++++++++++++++----- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index fdd483455..ea1954b3f 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -229,20 +229,34 @@ jobs: run: | set +e + FINALIZE_STATUS=0 + SUMMARY_STATUS=0 + if [ -f .control/cache/nx-server.pid ]; then bun run control cache-finalize --server "http://127.0.0.1:43191" + FINALIZE_STATUS=$? fi bun run control cache-summary \ --stats ".control/cache/nx-stats.json" \ --root ".control/cache/nx-artifacts" + SUMMARY_STATUS=$? - if [ -f .control/cache/nx-server.log ]; then + if [ "${FINALIZE_STATUS}" -ne 0 ] || [ "${SUMMARY_STATUS}" -ne 0 ]; then echo "" echo "Nx cache bridge log" - cat .control/cache/nx-server.log + if [ -f .control/cache/nx-server.log ]; then + cat .control/cache/nx-server.log + else + echo "No Nx cache bridge log found" + fi fi if [ -f .control/cache/nx-server.pid ]; then kill "$(cat .control/cache/nx-server.pid)" 2>/dev/null || true fi + + if [ "${FINALIZE_STATUS}" -ne 0 ]; then + exit "${FINALIZE_STATUS}" + fi + exit "${SUMMARY_STATUS}" diff --git a/src/tooling/control/src/nx-cache/server.ts b/src/tooling/control/src/nx-cache/server.ts index 3a751b3db..1c9c92ad1 100644 --- a/src/tooling/control/src/nx-cache/server.ts +++ b/src/tooling/control/src/nx-cache/server.ts @@ -94,6 +94,10 @@ let artifactDir = (root: string, hash: string) => resolve(root, hash); let artifactPath = (root: string, hash: string) => join(artifactDir(root, hash), 'artifact.tar'); let manifestPath = (manifestDir: string) => join(manifestDir, 'manifest.json'); let artifactKey = (namespace: string, hash: string) => `control-nx-task-${namespace}-${hash}`; +let isBenignSaveError = (message: string) => + /already exists|reserve|409|Unable to reserve|HTTP headers specified in the request is not supported/i.test( + message + ); let readManifest = (path: string): Manifest => { if (!existsSync(path)) return { version: 1, updatedAt: new Date().toISOString(), digests: [] }; @@ -197,6 +201,8 @@ export let runCacheServer = async (opts: ServerOptions) => { let stats = createStats(opts); let used = new Map(); let downloads = new Map>(); + let remoteArtifacts = new Set(); + let queuedUploads = new Set(); let uploadQueue = Promise.resolve(); let uploadTasks: Promise[] = []; @@ -245,6 +251,7 @@ export let runCacheServer = async (opts: ServerOptions) => { let actionsCache = await loadActionsCache(); let matched = await actionsCache.restoreCache([dir], artifactKey(opts.namespace, hash), []); let hit = !!matched && localExists(hash); + if (hit) remoteArtifacts.add(hash); recordOp({ type: 'restore', hash, durationMs: Date.now() - started, status: hit ? 'hit' : 'miss', message: matched }); return hit; } catch (err) { @@ -266,30 +273,47 @@ export let runCacheServer = async (opts: ServerOptions) => { }; let queueUpload = (hash: string) => { + if (remoteArtifacts.has(hash) || queuedUploads.has(hash)) { + stats.duplicateUploads++; + recordOp({ + type: 'upload', + hash, + durationMs: 0, + status: 'skipped', + message: remoteArtifacts.has(hash) ? 'already restored from GitHub cache' : 'already queued' + }); + return; + } + + queuedUploads.add(hash); let task = uploadQueue.then(async () => { let started = Date.now(); let dir = artifactDir(opts.root, hash); - if (!localExists(hash)) return; + try { + if (!localExists(hash)) return; - if (!isActionsCacheAvailable()) { - recordOp({ type: 'upload', hash, durationMs: Date.now() - started, status: 'skipped', message: 'GitHub Actions cache env missing' }); - return; - } + if (!isActionsCacheAvailable()) { + recordOp({ type: 'upload', hash, durationMs: Date.now() - started, status: 'skipped', message: 'GitHub Actions cache env missing' }); + return; + } - try { let actionsCache = await loadActionsCache(); await actionsCache.saveCache([dir], artifactKey(opts.namespace, hash)); + remoteArtifacts.add(hash); stats.uploads++; recordOp({ type: 'upload', hash, durationMs: Date.now() - started, status: 'saved' }); } catch (err) { let message = err instanceof Error ? err.message : String(err); - if (/already exists|reserve|409|Unable to reserve/i.test(message)) { + if (isBenignSaveError(message)) { + remoteArtifacts.add(hash); stats.duplicateUploads++; recordOp({ type: 'upload', hash, durationMs: Date.now() - started, status: 'duplicate', message }); return; } stats.uploadFailures++; recordOp({ type: 'upload', hash, durationMs: Date.now() - started, status: 'failed', message }); + } finally { + queuedUploads.delete(hash); } }); @@ -359,7 +383,7 @@ export let runCacheServer = async (opts: ServerOptions) => { recordOp({ type: 'manifest-save', durationMs: Date.now() - started, status: 'saved', message: opts.manifestSaveKey }); } catch (err) { let message = err instanceof Error ? err.message : String(err); - if (/already exists|reserve|409|Unable to reserve/i.test(message)) { + if (isBenignSaveError(message)) { stats.manifestSaved = true; recordOp({ type: 'manifest-save', durationMs: Date.now() - started, status: 'duplicate', message }); return; From 83bde82c8673a2502c7568f92ecc2c2c650b1a21 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 11:04:56 +0200 Subject: [PATCH 46/69] Remove full builds --- .github/workflows/control.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index 4374e3010..0ece4ea94 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -10,15 +10,6 @@ permissions: packages: read jobs: - build: - name: Build all services - uses: ./.github/workflows/reusable-control.yml - secrets: inherit - with: - command: build - all: true - runs-on: ubuntu-latest - unit: name: Unit (${{ matrix.service }}) uses: ./.github/workflows/reusable-control.yml From 6278fb73d37ff71581b93e7718de2079a851a0c0 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 11:25:40 +0200 Subject: [PATCH 47/69] Make caching more aggressive --- .github/workflows/control.yml | 15 +++ .github/workflows/reusable-control.yml | 39 ++++++- nx.json | 20 +++- src/tooling/control/src/bootstrap.ts | 17 ++- src/tooling/control/src/builders/base.ts | 17 +++ src/tooling/control/src/builders/context.ts | 110 -------------------- src/tooling/control/src/builders/go.ts | 18 ++-- src/tooling/control/src/builders/node.ts | 17 ++- src/tooling/control/src/builders/rust.ts | 11 +- src/tooling/control/src/nx-cache/server.ts | 13 +++ src/tooling/control/src/run/unit.ts | 34 +++++- 11 files changed, 176 insertions(+), 135 deletions(-) diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index 0ece4ea94..38d847f97 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -10,8 +10,18 @@ permissions: packages: read jobs: + warm-cache: + name: Warm Nx Cache + uses: ./.github/workflows/reusable-control.yml + secrets: inherit + with: + command: warm-cache + cache_prefix: control-ci + runs-on: ubuntu-latest + unit: name: Unit (${{ matrix.service }}) + needs: warm-cache uses: ./.github/workflows/reusable-control.yml secrets: inherit strategy: @@ -40,10 +50,12 @@ jobs: command: ci mode: unit filter: ${{ matrix.service }} + cache_prefix: control-ci runs-on: ubuntu-latest e2e: name: E2E (${{ matrix.service }}) + needs: warm-cache uses: ./.github/workflows/reusable-control.yml secrets: inherit strategy: @@ -72,12 +84,14 @@ jobs: command: ci mode: e2e filter: ${{ matrix.service }} + cache_prefix: control-ci project_prefix: ${{ matrix.service }}-ci runs-on: ubuntu-latest checkout_submodules: ${{ matrix.service == 'subspace-controller' }} core-api-e2e: name: E2E (app-api) + needs: warm-cache uses: ./.github/workflows/reusable-control.yml secrets: inherit with: @@ -85,5 +99,6 @@ jobs: mode: e2e filter: app-api modules: all + cache_prefix: control-ci project_prefix: app-api-ci runs-on: ubuntu-latest diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index ea1954b3f..8cecdd06d 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -4,7 +4,7 @@ on: workflow_call: inputs: command: - description: 'Control command: build or ci' + description: 'Control command: build, ci, or warm-cache' required: true type: string mode: @@ -114,7 +114,7 @@ jobs: run: bun i --filter @metorial/oss --filter @metorial/control - name: Install packages - if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} + if: ${{ inputs.command == 'warm-cache' || (inputs.command == 'ci' && inputs.mode == 'unit') }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache run: bun i @@ -149,7 +149,7 @@ jobs: --manifest-save-key "${MANIFEST_SAVE_KEY}" \ --manifest-primary-key "${MANIFEST_SAVE_KEY}" \ --manifest-restore-key "${MANIFEST_PREFIX}-" \ - --manifest-restore-key "control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF}-" \ + --manifest-restore-key "control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-" \ --manifest-restore-key "control-nx-used-digests-${CACHE_NAMESPACE}-" \ > .control/cache/nx-server.log 2>&1 & @@ -169,22 +169,49 @@ jobs: exit 1 - name: Generate Prisma Clients - if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} + if: ${{ inputs.command == 'warm-cache' || (inputs.command == 'ci' && inputs.mode == 'unit') }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} run: bun x nx run-many --target=prisma:generate --all --parallel=1 - name: Build platform system clients - if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} + if: ${{ inputs.command == 'warm-cache' || (inputs.command == 'ci' && inputs.mode == 'unit') }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} run: bun x nx run-many --target=build --projects=@metorial-platform-systems/origin-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/synthesis-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/ares-client,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/subspace-client + - name: Warm shared build cache + if: ${{ inputs.command == 'warm-cache' }} + env: + NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache + NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} + run: | + set -euo pipefail + + warm_target() { + local target="$1" + mapfile -t projects < <(bun x nx show projects --with-target="${target}") + if [ "${#projects[@]}" -eq 0 ]; then + echo "No projects for ${target}" + return + fi + + local joined + joined="$(IFS=,; echo "${projects[*]}")" + bun x nx run-many --target="${target}" --projects="${joined}" --parallel=3 + } + + warm_target server:build + warm_target frontend:build + warm_target worker:build + - name: Run control + if: ${{ inputs.command != 'warm-cache' }} env: CONTROL_BUILDKIT_CACHE: '0' + CONTROL_DOCKER_CACHE_MOUNTS: '0' CONTROL_NX_REMOTE_CACHE_DOCKER_URL: ${{ inputs.enable_cache && 'http://host.docker.internal:43191' || '' }} CONTROL_VERBOSE: '1' NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache @@ -217,6 +244,8 @@ jobs: if [ "${{ inputs.mode }}" = "e2e" ] && [ -n "${{ inputs.modules }}" ]; then ARGS+=(--module "${{ inputs.modules }}") fi + elif [ "${{ inputs.command }}" = "warm-cache" ]; then + exit 0 else echo "Unsupported command: ${{ inputs.command }}" >&2 exit 1 diff --git a/nx.json b/nx.json index 75b49fed3..d61a27e02 100644 --- a/nx.json +++ b/nx.json @@ -86,6 +86,16 @@ "^production" ] }, + "test:unit": { + "cache": true, + "inputs": [ + "default", + "^production" + ], + "outputs": [ + "{projectRoot}/coverage/**" + ] + }, "check-types": { "cache": true, "dependsOn": [ @@ -97,13 +107,21 @@ ] }, "prisma:generate": { - "cache": false, + "cache": true, "dependsOn": [ "^prisma:generate" ], "inputs": [ "production", "^production" + ], + "outputs": [ + "{projectRoot}/node_modules/.prisma/**", + "{projectRoot}/node_modules/@prisma/**", + "{projectRoot}/generated/**", + "{projectRoot}/src/generated/**", + "{workspaceRoot}/node_modules/.prisma/**", + "{workspaceRoot}/node_modules/@prisma/**" ] }, "prisma:push": { diff --git a/src/tooling/control/src/bootstrap.ts b/src/tooling/control/src/bootstrap.ts index d3d386393..93d43d4b0 100644 --- a/src/tooling/control/src/bootstrap.ts +++ b/src/tooling/control/src/bootstrap.ts @@ -71,15 +71,28 @@ let createNxConfig = (scope: 'repo' | 'oss' = 'repo') => ({ cache: false, inputs: ['default', '^production'] }, + 'test:unit': { + cache: true, + inputs: ['default', '^production'], + outputs: ['{projectRoot}/coverage/**'] + }, 'check-types': { cache: true, dependsOn: ['^check-types'], inputs: ['production', '^production'] }, 'prisma:generate': { - cache: false, + cache: true, dependsOn: ['^prisma:generate'], - inputs: ['production', '^production'] + inputs: ['production', '^production'], + outputs: [ + '{projectRoot}/node_modules/.prisma/**', + '{projectRoot}/node_modules/@prisma/**', + '{projectRoot}/generated/**', + '{projectRoot}/src/generated/**', + '{workspaceRoot}/node_modules/.prisma/**', + '{workspaceRoot}/node_modules/@prisma/**' + ] }, 'prisma:push': { cache: false diff --git a/src/tooling/control/src/builders/base.ts b/src/tooling/control/src/builders/base.ts index 1a55e837a..17e4179d2 100644 --- a/src/tooling/control/src/builders/base.ts +++ b/src/tooling/control/src/builders/base.ts @@ -148,8 +148,19 @@ export let formatContainerWorkdir = (relPath: string): string => formatContainer export let formatRunStep = (run: string): string => run.replace(/\n+/g, ' ').trim(); +export let shouldUseDockerCacheMounts = () => process.env.CONTROL_DOCKER_CACHE_MOUNTS !== '0'; + export let renderAptInstall = (packages: string[]): string[] => { if (packages.length === 0) return []; + if (!shouldUseDockerCacheMounts()) { + return [ + 'RUN apt-get update && apt-get install -y --no-install-recommends \\', + ...packages.map((pkg, index) => + index === packages.length - 1 ? ` ${pkg} && rm -rf /var/lib/apt/lists/*` : ` ${pkg} \\` + ) + ]; + } + return [ 'RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \\', ' --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \\', @@ -162,6 +173,12 @@ export let renderAptInstall = (packages: string[]): string[] => { export let renderApkInstall = (packages: string[]): string[] => { if (packages.length === 0) return []; + if (!shouldUseDockerCacheMounts()) { + return [ + `RUN sh -c 'attempt=1; until apk add --no-cache ${packages.join(' ')}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done'` + ]; + } + return [ `RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk ${packages.join(' ')}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done'` ]; diff --git a/src/tooling/control/src/builders/context.ts b/src/tooling/control/src/builders/context.ts index ed86e878c..9c3ad6c3f 100644 --- a/src/tooling/control/src/builders/context.ts +++ b/src/tooling/control/src/builders/context.ts @@ -16,18 +16,6 @@ export type MaterializedBuildContext = { dockerfilePath: string; }; -// #region agent log -let debugLog = (d: { - runId: string; - hypothesisId: string; - location: string; - message: string; - data: Record; -}) => { - console.log(JSON.stringify({ source: 'control-debug', sessionId: '0825fe', ...d, timestamp: Date.now() })); -}; -// #endregion - let sanitizeName = (input: string) => input.replace(/[^a-zA-Z0-9._-]+/g, '-'); let resolveRelativeToRoot = (root: string, absolutePath: string): string => { @@ -53,50 +41,6 @@ let rootInputFilesForPlan = (sourceRoot: string): string[] => { .filter(path => existsSync(path)); }; -let prismaVersionSummary = (content: string) => { - let packageNames = [ - '@prisma/client', - '@prisma/adapter-pg', - '@prisma/driver-adapter-utils', - '@prisma/client-runtime-utils', - 'prisma', - '@prisma/config', - '@prisma/engines' - ]; - - return Object.fromEntries( - packageNames.map(name => [ - name, - [ - ...new Set( - [...content.matchAll(new RegExp(`${name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}@([0-9]+\\.[0-9]+\\.[0-9]+)`, 'g'))].map( - match => match[1] - ) - ) - ].sort() - ]) - ); -}; - -let directPrismaDependencySummary = (manifestFiles: GeneratedBuildPath[]) => { - let summary: Record> = {}; - - for (let file of manifestFiles) { - let json = JSON.parse(readFileSync(file.absolutePath, 'utf8')) as { - dependencies?: Record; - devDependencies?: Record; - peerDependencies?: Record; - }; - let deps = { ...json.dependencies, ...json.devDependencies, ...json.peerDependencies }; - let prismaDeps = Object.fromEntries( - Object.entries(deps).filter(([name]) => name === 'prisma' || name.startsWith('@prisma/')) - ); - if (Object.keys(prismaDeps).length > 0) summary[file.relativeToContext] = prismaDeps; - } - - return summary; -}; - let resolveSourceRoot = (opts: { plan: GeneratedBuildPlan; registry: ServiceRegistry; @@ -183,30 +127,6 @@ let materializeNodeContext = async (opts: { }) ); - // #region agent log - let layerLockPath = join(layerRoot, 'bun.lock'); - let layerPackageJson = JSON.parse(readFileSync(join(layerRoot, 'package.json'), 'utf8')) as { - workspaces?: string[]; - }; - debugLog({ - runId: 'pre-fix', - hypothesisId: 'H2,H3,H4,H5', - location: 'oss/src/tooling/control/src/builders/context.ts:132', - message: 'control node manifest layer materialized', - data: { - service: opts.plan.service.name, - layer: layer.name, - command: layer.command, - manifestCount: layer.manifestFiles.length, - workspaces: layerPackageJson.workspaces ?? [], - directPrismaDependencies: directPrismaDependencySummary(layer.manifestFiles), - copiedLockExists: existsSync(layerLockPath), - copiedLockPrismaVersions: existsSync(layerLockPath) - ? prismaVersionSummary(readFileSync(layerLockPath, 'utf8')) - : {} - } - }); - // #endregion } for (let layer of opts.plan.sourceLayers) { @@ -276,36 +196,6 @@ export let materializeBuildContext = async (opts: { rmSync(contextRoot, { recursive: true, force: true }); mkdirSync(contextRoot, { recursive: true }); let sourceRoot = resolveSourceRoot(opts); - let sourceLockPath = resolve(sourceRoot, 'bun.lock'); - - // #region agent log - debugLog({ - runId: 'pre-fix', - hypothesisId: 'H1,H2,H3,H4,H5', - location: 'oss/src/tooling/control/src/builders/context.ts:286', - message: 'control build context source resolved', - data: { - service: opts.plan.service.name, - builder: opts.plan.builder, - contextRoot, - planContextRoot: opts.plan.contextRoot, - registryControlRoot: opts.registry.controlRoot, - sourceRoot, - hasSession: !!opts.session, - stagedEntrypoint: opts.session?.stagedEntrypoint, - repoRoot: opts.session?.repoRoot, - sourceLockExists: existsSync(sourceLockPath), - sourceLockPrismaVersions: existsSync(sourceLockPath) - ? prismaVersionSummary(readFileSync(sourceLockPath, 'utf8')) - : {}, - installLayers: opts.plan.installLayers.map(layer => ({ - name: layer.name, - command: layer.command, - manifestCount: layer.manifestFiles.length - })) - } - }); - // #endregion let dockerfileContent = opts.plan.builder === 'node' diff --git a/src/tooling/control/src/builders/go.ts b/src/tooling/control/src/builders/go.ts index 53b4c553d..1e66ed896 100644 --- a/src/tooling/control/src/builders/go.ts +++ b/src/tooling/control/src/builders/go.ts @@ -10,7 +10,8 @@ import { formatRunStep, renderApkInstall, renderArtifactLines, - renderCopyLines + renderCopyLines, + shouldUseDockerCacheMounts } from './base'; import type { GeneratedBuildPlan } from '../types'; @@ -40,12 +41,13 @@ let renderGoDockerfile = (plan: GeneratedBuildPlan): string => { let inputLines = renderCopyLines(plan.inputPaths); let installLayerLines = plan.installLayers.map(layer => { let cwd = formatContainerWorkdir(layer.cwdRelativeToContext ?? '.'); - let cacheMount = - layer.tool === 'bun' + let cacheMount = shouldUseDockerCacheMounts() + ? layer.tool === 'bun' ? '--mount=type=cache,id=control-bun-install,target=/root/.bun/install/cache,sharing=locked ' : layer.tool === 'go' ? '--mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked ' - : ''; + : '' + : ''; return `RUN ${cacheMount}cd ${cwd} && ${formatRunStep(layer.command)}`; }); let prebuildLines = plan.prebuildSteps.map(step => { @@ -72,13 +74,17 @@ let renderGoDockerfile = (plan: GeneratedBuildPlan): string => { ...renderApkInstall(systemPackages), ...manifestLines, ...installLayerLines, - `RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked cd ${plan.workspaceRoot} && go mod download`, + shouldUseDockerCacheMounts() + ? `RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked cd ${plan.workspaceRoot} && go mod download` + : `RUN cd ${plan.workspaceRoot} && go mod download`, '', 'FROM deps AS build', 'WORKDIR /app', ...inputLines, ...prebuildLines, - `RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked --mount=type=cache,id=control-go-build,target=/root/.cache/go-build,sharing=locked cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, + shouldUseDockerCacheMounts() + ? `RUN --mount=type=cache,id=control-go-mod,target=/go/pkg/mod,sharing=locked --mount=type=cache,id=control-go-build,target=/root/.cache/go-build,sharing=locked cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}` + : `RUN cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, '', 'FROM build AS workspace', `WORKDIR ${plan.workspaceRoot}`, diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index e7bb9749a..7e8d520bb 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -8,7 +8,8 @@ import { defaultRuntime, renderApkInstall, renderAptInstall, - renderArtifactLines + renderArtifactLines, + shouldUseDockerCacheMounts } from './base'; import { collectNxDependents, @@ -208,8 +209,16 @@ let shouldRetryNxRun = (command: string): boolean => let renderRetriableCommand = (command: string): string => `{ attempt=1; until ${command}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; }`; -let renderNxRun = (cacheId: string) => (command: string): string => - `RUN --mount=type=cache,id=${cacheId},target=/app/.nx/cache cd /app && ${shouldRetryNxRun(command) ? renderRetriableCommand(command) : command}`; +let renderNxRun = (cacheId: string) => (command: string): string => { + let runCommand = `cd /app && ${shouldRetryNxRun(command) ? renderRetriableCommand(command) : command}`; + if (!shouldUseDockerCacheMounts()) return `RUN ${runCommand}`; + return `RUN --mount=type=cache,id=${cacheId},target=/app/.nx/cache ${runCommand}`; +}; + +let renderBunInstallRun = (plan: GeneratedBuildPlan, layer: GeneratedBuildInstallLayer): string => { + if (!shouldUseDockerCacheMounts()) return `RUN ${layer.command}`; + return `RUN --mount=type=cache,id=control-bun-install-${plan.service.name}-${layer.name},target=/root/.bun/install/cache ${layer.command}`; +}; let collectNodeProjectUseCounts = (opts: { registry: ServiceRegistry; @@ -630,7 +639,7 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { ...renderAptInstall(systemPackages), ...plan.installLayers.flatMap(layer => [ `COPY _manifests/${layer.name}/ ./`, - `RUN --mount=type=cache,id=control-bun-install-${plan.service.name}-${layer.name},target=/root/.bun/install/cache ${layer.command}` + renderBunInstallRun(plan, layer) ]), '', 'FROM deps AS build', diff --git a/src/tooling/control/src/builders/rust.ts b/src/tooling/control/src/builders/rust.ts index bb1535a19..f1aec57f4 100644 --- a/src/tooling/control/src/builders/rust.ts +++ b/src/tooling/control/src/builders/rust.ts @@ -10,7 +10,8 @@ import { formatRunStep, renderAptInstall, renderArtifactLines, - renderCopyLines + renderCopyLines, + shouldUseDockerCacheMounts } from './base'; import type { GeneratedBuildPlan } from '../types'; @@ -26,7 +27,9 @@ let defaultRustRuntime = defaultRuntime(undefined, { }); let renderCargoCacheMounts = () => - '--mount=type=cache,id=control-cargo-registry,target=/usr/local/cargo/registry,sharing=locked --mount=type=cache,id=control-cargo-git,target=/usr/local/cargo/git,sharing=locked --mount=type=cache,id=control-cargo-target,target=/app/target,sharing=locked'; + shouldUseDockerCacheMounts() + ? '--mount=type=cache,id=control-cargo-registry,target=/usr/local/cargo/registry,sharing=locked --mount=type=cache,id=control-cargo-git,target=/usr/local/cargo/git,sharing=locked --mount=type=cache,id=control-cargo-target,target=/app/target,sharing=locked ' + : ''; let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { let builderImage = plan.service.config.build?.builder_image?.image ?? 'rust:1.91-slim'; @@ -35,7 +38,7 @@ let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { let inputLines = renderCopyLines(plan.inputPaths); let prebuildLines = plan.prebuildSteps.map(step => { let cwd = formatContainerWorkdir(step.cwdRelativeToContext ?? '.'); - return `RUN ${renderCargoCacheMounts()} cd ${cwd} && ${formatRunStep(step.run)}`; + return `RUN ${renderCargoCacheMounts()}cd ${cwd} && ${formatRunStep(step.run)}`; }); let artifactLines = renderArtifactLines(plan); let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); @@ -62,7 +65,7 @@ let renderRustDockerfile = (plan: GeneratedBuildPlan): string => { 'FROM deps AS build', 'WORKDIR /app', ...inputLines, - `RUN ${renderCargoCacheMounts()} cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, + `RUN ${renderCargoCacheMounts()}cd ${plan.workspaceRoot} && ${buildCommandForPlan(plan)}`, '', 'FROM build AS workspace', `WORKDIR ${plan.workspaceRoot}`, diff --git a/src/tooling/control/src/nx-cache/server.ts b/src/tooling/control/src/nx-cache/server.ts index 1c9c92ad1..bbf632285 100644 --- a/src/tooling/control/src/nx-cache/server.ts +++ b/src/tooling/control/src/nx-cache/server.ts @@ -469,6 +469,19 @@ export let runCacheServer = async (opts: ServerOptions) => { if (req.method === 'PUT') { stats.requests.put++; + if (localExists(hash)) { + remoteArtifacts.add(hash); + stats.duplicateUploads++; + recordOp({ + type: 'put', + hash, + durationMs: 0, + status: 'duplicate', + message: 'cache artifact already exists' + }); + return new Response('cache artifact already exists', { status: 409 }); + } + ensureDir(artifactDir(opts.root, hash)); writeFileSync(artifactPath(opts.root, hash), Buffer.from(await req.arrayBuffer())); queueUpload(hash); diff --git a/src/tooling/control/src/run/unit.ts b/src/tooling/control/src/run/unit.ts index d35aa899a..db16cdbec 100644 --- a/src/tooling/control/src/run/unit.ts +++ b/src/tooling/control/src/run/unit.ts @@ -2,6 +2,7 @@ import { join, resolve } from 'path'; import { resolveOssRoot, resolveControlCwd, resolveEntrypoint } from '../entrypoint'; import { resolveStagedEntrypoint } from '../staging/session'; import { NoTestError } from '../errors'; +import { nxProjectHasTarget, readNxProjectGraph } from '../builders/nx'; import { createLogger } from '../log'; import { formatBatchSummary, formatRunPlan, formatServiceHeader } from '../log/formatRunPlan'; import { getRegistry } from '../registry'; @@ -45,6 +46,26 @@ let runHostShell = async (cmd: string[], opts: { cwd: string; verbose?: boolean } }; +let resolveNxUnitCommand = (opts: { + command: string; + entrypoint: string; + project?: string; + setup?: string[]; +}): { cwd: string; command: string } | null => { + if (opts.command.trim() !== 'bun run test:unit') return null; + if (opts.setup?.length) return null; + if (!opts.project) return null; + + let ossRoot = resolveOssRoot(opts.entrypoint); + let graph = readNxProjectGraph(ossRoot); + if (!nxProjectHasTarget(graph, opts.project, 'test:unit')) return null; + + return { + cwd: ossRoot, + command: `bun x nx run ${opts.project}:test:unit` + }; +}; + let runUnitForService = async ( opts: RunOptions & { service: ControlService; context?: UnitContext } ) => { @@ -56,7 +77,14 @@ let runUnitForService = async ( let entrypoint = opts.session ? resolveStagedEntrypoint(opts.session, opts.entrypoint) : resolveEntrypoint({ cwd, entrypoint: opts.entrypoint }); - let hostCwd = resolveHostTestCwd({ service: opts.service, cwd: unit.cwd, entrypoint }); + let nxUnit = resolveNxUnitCommand({ + command: unit.command, + setup: unit.setup, + project: opts.service.config.build?.project, + entrypoint + }); + let hostCwd = nxUnit?.cwd ?? resolveHostTestCwd({ service: opts.service, cwd: unit.cwd, entrypoint }); + let testCommand = nxUnit?.command ?? unit.command; if (opts.context) { logger.section( @@ -78,8 +106,8 @@ let runUnitForService = async ( } logger.info('Running unit tests...'); - logger.debug(`Command: ${unit.command}`); - await runHostShell(['sh', '-c', unit.command], { cwd: hostCwd, verbose: opts.verbose }); + logger.debug(`Command: ${testCommand}`); + await runHostShell(['sh', '-c', testCommand], { cwd: hostCwd, verbose: opts.verbose }); }; export let runUnitBatch = async ( From 71b48e2fb84eef39495cc54d922344f53fdf20e0 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 13:55:52 +0200 Subject: [PATCH 48/69] More fixes --- .github/workflows/reusable-control.yml | 8 +++++--- src/tooling/control/src/nx-cache/server.ts | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 8cecdd06d..d706d09c3 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -204,7 +204,7 @@ jobs: } warm_target server:build - warm_target frontend:build + bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public,@metorial/ares --parallel=2 warm_target worker:build - name: Run control @@ -286,6 +286,8 @@ jobs: fi if [ "${FINALIZE_STATUS}" -ne 0 ]; then - exit "${FINALIZE_STATUS}" + echo "::warning::Nx cache bridge finalize failed with status ${FINALIZE_STATUS}; continuing because cache upload is best-effort" + fi + if [ "${SUMMARY_STATUS}" -ne 0 ]; then + echo "::warning::Nx cache bridge summary failed with status ${SUMMARY_STATUS}; continuing because cache reporting is best-effort" fi - exit "${SUMMARY_STATUS}" diff --git a/src/tooling/control/src/nx-cache/server.ts b/src/tooling/control/src/nx-cache/server.ts index bbf632285..3de72355d 100644 --- a/src/tooling/control/src/nx-cache/server.ts +++ b/src/tooling/control/src/nx-cache/server.ts @@ -411,6 +411,7 @@ export let runCacheServer = async (opts: ServerOptions) => { let server = Bun.serve({ hostname: opts.host, port: opts.port, + idleTimeout: 255, async fetch(req) { let url = new URL(req.url); let match = url.pathname.match(/^\/v1\/cache\/([^/]+)$/); From 6362c9ab4f2e851cbb9e46896decbbdfda752299 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 14:33:33 +0200 Subject: [PATCH 49/69] Maybe --- nx.json | 1 + src/tooling/control/src/bootstrap.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/nx.json b/nx.json index d61a27e02..1d3c52d4a 100644 --- a/nx.json +++ b/nx.json @@ -119,6 +119,7 @@ "{projectRoot}/node_modules/.prisma/**", "{projectRoot}/node_modules/@prisma/**", "{projectRoot}/generated/**", + "{projectRoot}/prisma/generated/**", "{projectRoot}/src/generated/**", "{workspaceRoot}/node_modules/.prisma/**", "{workspaceRoot}/node_modules/@prisma/**" diff --git a/src/tooling/control/src/bootstrap.ts b/src/tooling/control/src/bootstrap.ts index 93d43d4b0..628609ac4 100644 --- a/src/tooling/control/src/bootstrap.ts +++ b/src/tooling/control/src/bootstrap.ts @@ -89,6 +89,7 @@ let createNxConfig = (scope: 'repo' | 'oss' = 'repo') => ({ '{projectRoot}/node_modules/.prisma/**', '{projectRoot}/node_modules/@prisma/**', '{projectRoot}/generated/**', + '{projectRoot}/prisma/generated/**', '{projectRoot}/src/generated/**', '{workspaceRoot}/node_modules/.prisma/**', '{workspaceRoot}/node_modules/@prisma/**' From b76156a83384eb6de903cccdab822971308f1e5d Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 17:17:35 +0200 Subject: [PATCH 50/69] More cache improvements --- .github/workflows/control.yml | 1 + .github/workflows/reusable-control.yml | 69 +++++++-------- src/tooling/control/src/builders/base.ts | 3 + src/tooling/control/src/builders/context.ts | 90 ++++++++++++++++--- src/tooling/control/src/builders/node.ts | 17 ++-- src/tooling/control/src/cli.ts | 26 ++++++ src/tooling/control/src/nx-cache/server.ts | 20 +++-- src/tooling/control/src/run/runner.ts | 72 ++++++++++++++++ src/tooling/control/src/run/warm-cache.ts | 95 +++++++++++++++++++++ 9 files changed, 335 insertions(+), 58 deletions(-) create mode 100644 src/tooling/control/src/run/warm-cache.ts diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index 38d847f97..bb4b4fb3a 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -8,6 +8,7 @@ on: permissions: contents: read packages: read + actions: write jobs: warm-cache: diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index d706d09c3..5bb843c60 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -57,6 +57,7 @@ jobs: permissions: contents: read packages: read + actions: write steps: - name: Checkout repository @@ -87,34 +88,30 @@ jobs: run: | set -euo pipefail - if [ -n "${CACHE_PREFIX}" ]; then - SCOPE="${CACHE_PREFIX}" + PREFIX="${CACHE_PREFIX:-control}" + if [ "${COMMAND}" = "warm-cache" ]; then + SCOPE="${PREFIX}-warm-cache" elif [ "${ALL}" = "true" ]; then - SCOPE="${COMMAND}-${MODE:-none}-all" + SCOPE="${PREFIX}-${COMMAND}-${MODE:-none}-all" elif [ -n "${FILTER}" ]; then - SCOPE="${COMMAND}-${MODE:-none}-${FILTER}" + SCOPE="${PREFIX}-${COMMAND}-${MODE:-none}-${FILTER}" else - SCOPE="${COMMAND}-${MODE:-none}-none" + SCOPE="${PREFIX}-${COMMAND}-${MODE:-none}-none" fi if [ -n "${MODULES}" ]; then SCOPE="${SCOPE}-modules-${MODULES}" fi SCOPE="$(printf '%s' "${SCOPE}" | tr -c 'A-Za-z0-9_.-' '-')" + WARM_SCOPE="$(printf '%s' "${PREFIX}-warm-cache" | tr -c 'A-Za-z0-9_.-' '-')" echo "scope=${SCOPE}" >> "${GITHUB_OUTPUT}" + echo "warm_scope=${WARM_SCOPE}" >> "${GITHUB_OUTPUT}" - name: Prepare cache directories if: ${{ inputs.enable_cache }} run: mkdir -p .nx/cache .control/cache/nx-artifacts .control/cache/nx-manifest - - name: Install control packages - if: ${{ inputs.command == 'build' || (inputs.command == 'ci' && inputs.mode == 'e2e') }} - env: - NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache - run: bun i --filter @metorial/oss --filter @metorial/control - - name: Install packages - if: ${{ inputs.command == 'warm-cache' || (inputs.command == 'ci' && inputs.mode == 'unit') }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache run: bun i @@ -128,6 +125,7 @@ jobs: env: CACHE_NAMESPACE: control-v1-${{ runner.os }}-${{ hashFiles('bun.lock', 'package.json', 'nx.json') }} CACHE_SCOPE: ${{ steps.cache-scope.outputs.scope }} + CACHE_WARM_SCOPE: ${{ steps.cache-scope.outputs.warm_scope }} CACHE_REF: ${{ github.ref_name }} run: | set -euo pipefail @@ -137,6 +135,7 @@ jobs: CACHE_REF_SAFE="$(printf '%s' "${CACHE_REF}" | tr -c 'A-Za-z0-9_.-' '-')" MANIFEST_PREFIX="control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-${CACHE_SCOPE}" MANIFEST_SAVE_KEY="${MANIFEST_PREFIX}-${{ github.run_id }}-${{ github.run_attempt }}" + WARM_MANIFEST_PREFIX="control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-${CACHE_WARM_SCOPE}" bun run control cache-server \ --port "${PORT}" \ @@ -149,6 +148,7 @@ jobs: --manifest-save-key "${MANIFEST_SAVE_KEY}" \ --manifest-primary-key "${MANIFEST_SAVE_KEY}" \ --manifest-restore-key "${MANIFEST_PREFIX}-" \ + --manifest-restore-key "${WARM_MANIFEST_PREFIX}-" \ --manifest-restore-key "control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-" \ --manifest-restore-key "control-nx-used-digests-${CACHE_NAMESPACE}-" \ > .control/cache/nx-server.log 2>&1 & @@ -169,14 +169,14 @@ jobs: exit 1 - name: Generate Prisma Clients - if: ${{ inputs.command == 'warm-cache' || (inputs.command == 'ci' && inputs.mode == 'unit') }} + if: ${{ inputs.command == 'warm-cache' }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} run: bun x nx run-many --target=prisma:generate --all --parallel=1 - name: Build platform system clients - if: ${{ inputs.command == 'warm-cache' || (inputs.command == 'ci' && inputs.mode == 'unit') }} + if: ${{ inputs.command == 'warm-cache' }} env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} @@ -187,31 +187,21 @@ jobs: env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} - run: | - set -euo pipefail + run: bun run control warm-cache --all --include-unit - warm_target() { - local target="$1" - mapfile -t projects < <(bun x nx show projects --with-target="${target}") - if [ "${#projects[@]}" -eq 0 ]; then - echo "No projects for ${target}" - return - fi - - local joined - joined="$(IFS=,; echo "${projects[*]}")" - bun x nx run-many --target="${target}" --projects="${joined}" --parallel=3 - } - - warm_target server:build - bun x nx run-many --target=frontend:build --projects=@metorial-subspace/app-public,@metorial/ares --parallel=2 - warm_target worker:build + - name: Prepare unit cache closure + if: ${{ inputs.command == 'ci' && inputs.mode == 'unit' }} + env: + NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache + NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} + run: bun run control warm-cache --filter "${{ inputs.filter }}" --include-unit - name: Run control if: ${{ inputs.command != 'warm-cache' }} env: CONTROL_BUILDKIT_CACHE: '0' CONTROL_DOCKER_CACHE_MOUNTS: '0' + CONTROL_PREBUILT_BUILD_ARTIFACTS: '1' CONTROL_NX_REMOTE_CACHE_DOCKER_URL: ${{ inputs.enable_cache && 'http://host.docker.internal:43191' || '' }} CONTROL_VERBOSE: '1' NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache @@ -266,10 +256,21 @@ jobs: FINALIZE_STATUS=$? fi - bun run control cache-summary \ + SUMMARY_OUTPUT="$(bun run control cache-summary \ --stats ".control/cache/nx-stats.json" \ - --root ".control/cache/nx-artifacts" + --root ".control/cache/nx-artifacts")" SUMMARY_STATUS=$? + echo "${SUMMARY_OUTPUT}" + + if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then + { + echo "## Nx cache summary" + echo "" + echo '```' + echo "${SUMMARY_OUTPUT}" + echo '```' + } >> "${GITHUB_STEP_SUMMARY}" + fi if [ "${FINALIZE_STATUS}" -ne 0 ] || [ "${SUMMARY_STATUS}" -ne 0 ]; then echo "" diff --git a/src/tooling/control/src/builders/base.ts b/src/tooling/control/src/builders/base.ts index 17e4179d2..f7b630f6d 100644 --- a/src/tooling/control/src/builders/base.ts +++ b/src/tooling/control/src/builders/base.ts @@ -150,6 +150,9 @@ export let formatRunStep = (run: string): string => run.replace(/\n+/g, ' ').tri export let shouldUseDockerCacheMounts = () => process.env.CONTROL_DOCKER_CACHE_MOUNTS !== '0'; +export let shouldUsePrebuiltBuildArtifacts = () => + process.env.CONTROL_PREBUILT_BUILD_ARTIFACTS === '1'; + export let renderAptInstall = (packages: string[]): string[] => { if (packages.length === 0) return []; if (!shouldUseDockerCacheMounts()) { diff --git a/src/tooling/control/src/builders/context.ts b/src/tooling/control/src/builders/context.ts index 9c3ad6c3f..2c99afd0a 100644 --- a/src/tooling/control/src/builders/context.ts +++ b/src/tooling/control/src/builders/context.ts @@ -1,7 +1,17 @@ -import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs'; +import { + copyFileSync, + existsSync, + mkdirSync, + readdirSync, + readFileSync, + rmSync, + statSync, + writeFileSync +} from 'fs'; import { dirname, join, relative, resolve } from 'path'; import { ControlError } from '../errors'; import { copyGitAwareSelection } from '../staging/copyTree'; +import { shouldUsePrebuiltBuildArtifacts } from './base'; import type { GeneratedBuildInstallLayer, GeneratedBuildPath, @@ -95,6 +105,64 @@ let cumulativeManifestFiles = ( return [...files.values()].sort((a, b) => a.relativeToContext.localeCompare(b.relativeToContext)); }; +let copyPath = (source: string, dest: string) => { + let stat = statSync(source); + if (stat.isDirectory()) { + mkdirSync(dest, { recursive: true }); + for (let entry of readdirSync(source)) { + copyPath(join(source, entry), join(dest, entry)); + } + return; + } + + mkdirSync(dirname(dest), { recursive: true }); + copyFileSync(source, dest); +}; + +let materializePrebuiltArtifacts = (opts: { + plan: GeneratedBuildPlan; + contextRoot: string; + sourceRoot: string; +}) => { + let prebuiltRoot = join(opts.contextRoot, '_prebuilt'); + mkdirSync(prebuiltRoot, { recursive: true }); + + for (let artifact of opts.plan.artifacts) { + if (artifact.from.startsWith('/') && !artifact.from.startsWith('//')) continue; + + let source = resolve(opts.sourceRoot, artifact.fromRelativeToContext); + if (!existsSync(source)) { + throw new ControlError({ + code: 'prebuilt_artifact_missing', + message: `Missing prebuilt artifact for ${opts.plan.service.name}: ${artifact.fromRelativeToContext}`, + hint: 'Run the host build preparation before materializing a prebuilt Docker context' + }); + } + + copyPath(source, join(prebuiltRoot, artifact.fromRelativeToContext)); + } +}; + +let materializeSourceInputs = async (opts: { + plan: GeneratedBuildPlan; + contextRoot: string; + sourceRoot: string; +}) => { + for (let layer of opts.plan.sourceLayers) { + let inputPaths = new Set(layer.inputPaths.map(path => path.relativeToContext)); + + for (let file of rootInputFilesForPlan(opts.sourceRoot)) { + inputPaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); + } + + await copyGitAwareSelection({ + sourceRoot: opts.sourceRoot, + destRoot: join(opts.contextRoot, '_inputs', layer.name), + includePaths: [...inputPaths].sort((a, b) => a.localeCompare(b)) + }); + } +}; + let materializeNodeContext = async (opts: { plan: GeneratedBuildPlan; contextRoot: string; @@ -129,20 +197,14 @@ let materializeNodeContext = async (opts: { } - for (let layer of opts.plan.sourceLayers) { - let inputPaths = new Set(layer.inputPaths.map(path => path.relativeToContext)); - - for (let file of rootInputFilesForPlan(opts.sourceRoot)) { - inputPaths.add(resolveRelativeToRoot(opts.sourceRoot, file)); - } - - await copyGitAwareSelection({ - sourceRoot: opts.sourceRoot, - destRoot: join(opts.contextRoot, '_inputs', layer.name), - includePaths: [...inputPaths].sort((a, b) => a.localeCompare(b)) - }); + if (shouldUsePrebuiltBuildArtifacts()) { + await materializeSourceInputs(opts); + materializePrebuiltArtifacts(opts); + return renderNodePrunedDockerfile(opts.plan); } + await materializeSourceInputs(opts); + return renderNodePrunedDockerfile(opts.plan); }; @@ -195,7 +257,7 @@ export let materializeBuildContext = async (opts: { rmSync(contextRoot, { recursive: true, force: true }); mkdirSync(contextRoot, { recursive: true }); - let sourceRoot = resolveSourceRoot(opts); + let sourceRoot = shouldUsePrebuiltBuildArtifacts() ? opts.plan.contextRoot : resolveSourceRoot(opts); let dockerfileContent = opts.plan.builder === 'node' diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 7e8d520bb..1fa13f1c1 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -9,7 +9,8 @@ import { renderApkInstall, renderAptInstall, renderArtifactLines, - shouldUseDockerCacheMounts + shouldUseDockerCacheMounts, + shouldUsePrebuiltBuildArtifacts } from './base'; import { collectNxDependents, @@ -621,12 +622,20 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { let nxCacheId = `control-nx-cache-${plan.service.name}`; let renderPlanNxRun = renderNxRun(nxCacheId); let automationLines = plan.automations.map(automation => renderAutomationCommand(automation)); + let usePrebuiltArtifacts = shouldUsePrebuiltBuildArtifacts(); let sourceLayerLines = plan.sourceLayers.flatMap(layer => [ `COPY _inputs/${layer.name}/ ./`, - ...layer.commands.map(renderPlanNxRun) + ...(usePrebuiltArtifacts ? [] : layer.commands.map(renderPlanNxRun)) ]); let artifactLines = renderArtifactLines(plan); let exposeLines = plan.runtime.expose.map(port => `EXPOSE ${port}`); + let buildLines = usePrebuiltArtifacts + ? [...sourceLayerLines, 'COPY _prebuilt/ ./'] + : [ + ...sourceLayerLines, + ...automationLines.map(renderPlanNxRun), + renderPlanNxRun(`bun x nx run ${plan.project}:${plan.target}`) + ]; let lines = [ '# syntax=docker/dockerfile:1.7', @@ -644,9 +653,7 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { '', 'FROM deps AS build', 'WORKDIR /app', - ...sourceLayerLines, - ...automationLines.map(renderPlanNxRun), - renderPlanNxRun(`bun x nx run ${plan.project}:${plan.target}`), + ...buildLines, '', 'FROM build AS workspace', `WORKDIR ${plan.workspaceRoot}`, diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index 8f86a2966..44531f696 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -21,6 +21,7 @@ import { withWorkspaceSession } from './staging/session'; import type { WorkspaceSession } from './types'; import { runBootstrap } from './bootstrap'; import { installShutdownHandlers } from './run/lifecycle'; +import { runWarmCacheTargets } from './run/warm-cache'; import { printCacheSummary, runCacheServer } from './nx-cache/server'; installShutdownHandlers(); @@ -62,6 +63,9 @@ let collectModules = (argv: string[]): string[] => .map(value => value.trim()) .filter(Boolean); +let readBooleanOption = (opts: Record, names: string[]): boolean => + names.some(name => opts[name] === true); + let collectManifestRestoreKeys = (argv: string[]): string[] => collectRepeatedOption(argv, ['--manifest-restore-key']) .flatMap(value => value.split('\n')) @@ -160,6 +164,28 @@ prog }); }); +prog + .command('warm-cache') + .describe('Warm Nx cache for control build and unit test targets') + .option('--entrypoint, -e', 'Workspace entrypoint') + .option('--all', 'Warm all services with build configs') + .option('--filter, -f', 'Warm named services') + .option('--include-unit', 'Warm cacheable unit test targets') + .option('--parallel', 'Nx parallelism', '3') + .option('--verbose, -v', 'Verbose output') + .action(async (opts: Record) => { + await runCommand(async () => { + await runWarmCacheTargets({ + entrypoint: typeof opts.entrypoint === 'string' ? opts.entrypoint : undefined, + all: opts.all !== false, + filters: collectFilters(process.argv), + includeUnit: readBooleanOption(opts, ['include-unit', 'includeUnit']), + parallel: Number(opts.parallel ?? 3), + verbose: !!opts.verbose + }); + }, { verbose: !!opts.verbose }); + }); + prog .command('ls') .describe('List all control-managed services') diff --git a/src/tooling/control/src/nx-cache/server.ts b/src/tooling/control/src/nx-cache/server.ts index 3de72355d..1974f7388 100644 --- a/src/tooling/control/src/nx-cache/server.ts +++ b/src/tooling/control/src/nx-cache/server.ts @@ -177,6 +177,21 @@ export let printCacheSummary = (statsPath: string, root?: string) => { console.log(` Used digests: ${stats.usedDigests.length}`); if (root) console.log(` Local artifact dir: ${formatBytes(size)}`); + let lookups = stats.localHits + stats.githubHits + stats.misses; + if (lookups > 0) { + let missRate = stats.misses / lookups; + console.log(` Miss rate: ${(missRate * 100).toFixed(1)}%`); + + if (process.env.GITHUB_ACTIONS === 'true' && missRate > 0.5 && stats.manifestMatchedKey) { + console.log( + `::warning::Nx cache miss rate is ${(missRate * 100).toFixed(1)}% despite restoring ${stats.manifestMatchedKey}` + ); + } + } + if (process.env.GITHUB_ACTIONS === 'true' && stats.uploadFailures > 0) { + console.log(`::warning::Nx cache bridge had ${stats.uploadFailures} upload failure(s)`); + } + if (slowest.length > 0) { console.log(''); console.log('Slowest cache operations'); @@ -359,11 +374,6 @@ export let runCacheServer = async (opts: ServerOptions) => { }; let writeManifest = async () => { - let previous = readManifest(manifestPath(opts.manifestDir)); - for (let entry of previous.digests) { - if (!used.has(entry.hash)) used.set(entry.hash, entry); - } - let digests = [...used.values()] .sort((a, b) => b.lastUsedAt.localeCompare(a.lastUsedAt)) .slice(0, opts.maxManifestEntries); diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index ccb00edae..29e1c0810 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -2,6 +2,7 @@ import { mkdirSync, writeFileSync, chmodSync } from 'fs'; import { join, relative, resolve } from 'path'; import { generateCompose, collectContainerNames } from '../compose/generator'; import { createBuildPlan, renderDockerfileForPlan } from '../builders'; +import { shouldUsePrebuiltBuildArtifacts } from '../builders/base'; import { materializeBuildContext } from '../builders/context'; import { generatePostgresInitScript } from '../compose/databaseInit'; import { postgresDatabasesForDep } from '../graph/databases'; @@ -139,6 +140,69 @@ let collectMaterializedBuildContexts = async (opts: { return contexts; }; +let collectBuildGraphs = (graph: ResolvedGraph): ResolvedGraph[] => { + let graphs: ResolvedGraph[] = []; + let seen = new Set(); + + let visit = (graph: ResolvedGraph) => { + if (seen.has(graph.name)) return; + seen.add(graph.name); + graphs.push(graph); + + for (let dep of graph.deps) { + if (dep.kind === 'control' && dep.children) visit(dep.children); + } + }; + + visit(graph); + return graphs; +}; + +let preparePrebuiltBuildArtifacts = async (opts: { + graph: ResolvedGraph; + registry: ServiceRegistry; + verbose?: boolean; +}) => { + let logger = createLogger({ verbose: opts.verbose }); + let commands = new Map(); + + for (let graph of collectBuildGraphs(opts.graph)) { + let service = opts.registry.byName.get(graph.name); + if (!service?.config.build || service.config.build.mode === 'custom') continue; + + let plan = createBuildPlan(service, opts.registry); + if (!plan?.project || !plan.target) continue; + + for (let automation of plan.automations) { + commands.set(`${plan.contextRoot}:${automation.command}`, { + cwd: plan.contextRoot, + command: automation.command, + service: service.name + }); + } + + let mainCommand = `bun x nx run ${plan.project}:${plan.target}`; + commands.set(`${plan.contextRoot}:${mainCommand}`, { + cwd: plan.contextRoot, + command: mainCommand, + service: service.name + }); + } + + if (commands.size === 0) return; + + logger.info(`Preparing ${commands.size} host build artifact task(s)...`); + for (let { cwd, command, service } of commands.values()) { + logger.debug(`Host build prep (${service}): ${command}`); + await runShell(['sh', '-c', command], { + cwd, + phase: 'build', + service, + verbose: opts.verbose + }); + } +}; + export let runControl = async ( opts: RunOptions & { target: string; context?: RunControlContext } ) => { @@ -171,6 +235,14 @@ export let runControl = async ( let runDir = join(repoRoot, '.control', 'runs', runId); mkdirSync(runDir, { recursive: true }); + if (shouldUsePrebuiltBuildArtifacts()) { + await preparePrebuiltBuildArtifacts({ + graph, + registry, + verbose: opts.verbose + }); + } + let buildContexts = await collectMaterializedBuildContexts({ graph, registry, diff --git a/src/tooling/control/src/run/warm-cache.ts b/src/tooling/control/src/run/warm-cache.ts new file mode 100644 index 000000000..de62ee3df --- /dev/null +++ b/src/tooling/control/src/run/warm-cache.ts @@ -0,0 +1,95 @@ +import { createBuildPlan } from '../builders'; +import { nxProjectHasTarget, readNxProjectGraph } from '../builders/nx'; +import { resolveControlCwd } from '../entrypoint'; +import { createLogger } from '../log'; +import { getRegistry, resolveBuildTargets } from '../registry'; +import type { ControlService } from '../types'; +import { runShell } from './shell'; + +type WarmCacheOptions = { + entrypoint?: string; + all?: boolean; + filters?: string[]; + includeUnit?: boolean; + parallel?: number; + services?: ControlService[]; + verbose?: boolean; +}; + +type TargetGroup = { + cwd: string; + target: string; + projects: Set; +}; + +let groupKey = (cwd: string, target: string) => `${cwd}:${target}`; + +let addProject = ( + groups: Map, + opts: { cwd: string; target: string; project: string } +) => { + let key = groupKey(opts.cwd, opts.target); + let group = groups.get(key); + if (!group) { + group = { cwd: opts.cwd, target: opts.target, projects: new Set() }; + groups.set(key, group); + } + group.projects.add(opts.project); +}; + +export let runWarmCacheTargets = async (opts: WarmCacheOptions) => { + let cwd = resolveControlCwd(); + let registry = getRegistry({ cwd, entrypoint: opts.entrypoint }); + let services = opts.services ?? resolveBuildTargets({ + registry, + cwd, + all: opts.all ?? true, + filters: opts.filters + }); + let logger = createLogger(opts); + let groups = new Map(); + + for (let service of services) { + let plan = createBuildPlan(service, registry); + if (!plan?.project || !plan.target) continue; + + for (let automation of plan.automations) { + for (let project of automation.projects) { + addProject(groups, { cwd: plan.contextRoot, target: automation.target, project }); + } + } + + addProject(groups, { cwd: plan.contextRoot, target: plan.target, project: plan.project }); + + if (opts.includeUnit && service.config.test?.unit?.command.trim() === 'bun run test:unit') { + let graph = readNxProjectGraph(plan.contextRoot); + if (nxProjectHasTarget(graph, plan.project, 'test:unit')) { + addProject(groups, { cwd: plan.contextRoot, target: 'test:unit', project: plan.project }); + } + } + } + + logger.info(`Warming ${groups.size} Nx target group(s)...`); + + for (let group of groups.values()) { + let projects = [...group.projects].sort((a, b) => a.localeCompare(b)); + if (projects.length === 0) continue; + + await runShell( + [ + 'bun', + 'x', + 'nx', + 'run-many', + `--target=${group.target}`, + `--projects=${projects.join(',')}`, + `--parallel=${opts.parallel ?? 3}` + ], + { + cwd: group.cwd, + phase: group.target === 'test:unit' ? 'test' : 'build', + verbose: opts.verbose + } + ); + } +}; From 8ceb6a4273c94e61ba47b8acf8fdabe2f5086943 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 19:17:18 +0200 Subject: [PATCH 51/69] Fixes --- src/tooling/control/src/builders/context.ts | 31 +++++++++++++++++++-- src/tooling/control/src/cli.ts | 5 ++-- src/tooling/control/src/run/runner.ts | 10 +++++++ src/tooling/control/src/run/warm-cache.ts | 5 ++-- 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src/tooling/control/src/builders/context.ts b/src/tooling/control/src/builders/context.ts index 2c99afd0a..319594fb1 100644 --- a/src/tooling/control/src/builders/context.ts +++ b/src/tooling/control/src/builders/context.ts @@ -126,12 +126,37 @@ let materializePrebuiltArtifacts = (opts: { }) => { let prebuiltRoot = join(opts.contextRoot, '_prebuilt'); mkdirSync(prebuiltRoot, { recursive: true }); + let copied = new Set(); + let copyRelativePath = (relativePath: string) => { + if (copied.has(relativePath)) return; + let source = resolve(opts.sourceRoot, relativePath); + if (!existsSync(source)) return; + copyPath(source, join(prebuiltRoot, relativePath)); + copied.add(relativePath); + }; + + for (let layer of opts.plan.sourceLayers) { + for (let inputPath of layer.inputPaths) { + if (!existsSync(inputPath.absolutePath)) continue; + if (!statSync(inputPath.absolutePath).isDirectory()) continue; + + for (let output of [ + 'dist', + 'dist-worker', + 'frontend/dist', + 'generated', + 'prisma/generated', + 'src/generated' + ]) { + copyRelativePath(join(inputPath.relativeToContext, output).replace(/\\/g, '/')); + } + } + } for (let artifact of opts.plan.artifacts) { if (artifact.from.startsWith('/') && !artifact.from.startsWith('//')) continue; - let source = resolve(opts.sourceRoot, artifact.fromRelativeToContext); - if (!existsSync(source)) { + if (!existsSync(resolve(opts.sourceRoot, artifact.fromRelativeToContext))) { throw new ControlError({ code: 'prebuilt_artifact_missing', message: `Missing prebuilt artifact for ${opts.plan.service.name}: ${artifact.fromRelativeToContext}`, @@ -139,7 +164,7 @@ let materializePrebuiltArtifacts = (opts: { }); } - copyPath(source, join(prebuiltRoot, artifact.fromRelativeToContext)); + copyRelativePath(artifact.fromRelativeToContext); } }; diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index 44531f696..c4ebe64a8 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -175,10 +175,11 @@ prog .option('--verbose, -v', 'Verbose output') .action(async (opts: Record) => { await runCommand(async () => { + let filters = collectFilters(process.argv); await runWarmCacheTargets({ entrypoint: typeof opts.entrypoint === 'string' ? opts.entrypoint : undefined, - all: opts.all !== false, - filters: collectFilters(process.argv), + all: filters.length === 0 ? opts.all !== false : false, + filters, includeUnit: readBooleanOption(opts, ['include-unit', 'includeUnit']), parallel: Number(opts.parallel ?? 3), verbose: !!opts.verbose diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index 29e1c0810..00b4316c7 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -173,6 +173,16 @@ let preparePrebuiltBuildArtifacts = async (opts: { let plan = createBuildPlan(service, opts.registry); if (!plan?.project || !plan.target) continue; + for (let layer of plan.sourceLayers) { + for (let command of layer.commands) { + commands.set(`${plan.contextRoot}:${command}`, { + cwd: plan.contextRoot, + command, + service: service.name + }); + } + } + for (let automation of plan.automations) { commands.set(`${plan.contextRoot}:${automation.command}`, { cwd: plan.contextRoot, diff --git a/src/tooling/control/src/run/warm-cache.ts b/src/tooling/control/src/run/warm-cache.ts index de62ee3df..05dd23a10 100644 --- a/src/tooling/control/src/run/warm-cache.ts +++ b/src/tooling/control/src/run/warm-cache.ts @@ -40,11 +40,12 @@ let addProject = ( export let runWarmCacheTargets = async (opts: WarmCacheOptions) => { let cwd = resolveControlCwd(); let registry = getRegistry({ cwd, entrypoint: opts.entrypoint }); + let filters = opts.filters?.length ? opts.filters : undefined; let services = opts.services ?? resolveBuildTargets({ registry, cwd, - all: opts.all ?? true, - filters: opts.filters + all: filters ? false : (opts.all ?? true), + filters }); let logger = createLogger(opts); let groups = new Map(); From c41f7bf62208c10774a1d7b600b19b43ec78ba52 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Wed, 27 May 2026 19:52:30 +0200 Subject: [PATCH 52/69] Fixes --- .github/workflows/reusable-control.yml | 1 + nx.json | 3 ++- src/tooling/control/src/bootstrap.ts | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 5bb843c60..1e24525eb 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -201,6 +201,7 @@ jobs: env: CONTROL_BUILDKIT_CACHE: '0' CONTROL_DOCKER_CACHE_MOUNTS: '0' + CONTROL_NO_STAGE: '1' CONTROL_PREBUILT_BUILD_ARTIFACTS: '1' CONTROL_NX_REMOTE_CACHE_DOCKER_URL: ${{ inputs.enable_cache && 'http://host.docker.internal:43191' || '' }} CONTROL_VERBOSE: '1' diff --git a/nx.json b/nx.json index 1d3c52d4a..bf22ea50f 100644 --- a/nx.json +++ b/nx.json @@ -62,7 +62,8 @@ ], "outputs": [ "{projectRoot}/dist/**", - "{projectRoot}/frontend/dist/**" + "{projectRoot}/frontend/dist/**", + "{projectRoot}/frontend/**/dist/**" ] }, "worker:build": { diff --git a/src/tooling/control/src/bootstrap.ts b/src/tooling/control/src/bootstrap.ts index 628609ac4..ee65d28b1 100644 --- a/src/tooling/control/src/bootstrap.ts +++ b/src/tooling/control/src/bootstrap.ts @@ -59,7 +59,7 @@ let createNxConfig = (scope: 'repo' | 'oss' = 'repo') => ({ cache: true, dependsOn: ['^build'], inputs: ['production', '^production'], - outputs: ['{projectRoot}/dist/**', '{projectRoot}/frontend/dist/**'] + outputs: ['{projectRoot}/dist/**', '{projectRoot}/frontend/dist/**', '{projectRoot}/frontend/**/dist/**'] }, 'worker:build': { cache: true, From 85e7bbda921c6ac2e4047acf88c3012af7022ca8 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Thu, 28 May 2026 12:10:59 +0200 Subject: [PATCH 53/69] Harden caching --- .github/workflows/reusable-control.yml | 15 --------------- nx.json | 9 +++++++-- src/tooling/control/src/bootstrap.ts | 9 +++++++-- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 1e24525eb..6aabff2f9 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -168,20 +168,6 @@ jobs: fi exit 1 - - name: Generate Prisma Clients - if: ${{ inputs.command == 'warm-cache' }} - env: - NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache - NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} - run: bun x nx run-many --target=prisma:generate --all --parallel=1 - - - name: Build platform system clients - if: ${{ inputs.command == 'warm-cache' }} - env: - NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache - NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} - run: bun x nx run-many --target=build --projects=@metorial-platform-systems/origin-client,@metorial-platform-systems/forge-client,@metorial-platform-systems/function-bay-client,@metorial-platform-systems/signal-client,@metorial-platform-systems/synthesis-client,@metorial-platform-systems/cargo-client,@metorial-platform-systems/ares-client,@metorial/mcp,@metorial/mcp-server,@metorial/mcp-transport-memory,@metorial-platform-systems/shuttle-client,@metorial-platform-systems/slates-client,@metorial-platform-systems/subspace-client - - name: Warm shared build cache if: ${{ inputs.command == 'warm-cache' }} env: @@ -207,7 +193,6 @@ jobs: CONTROL_VERBOSE: '1' NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} run: | set -euo pipefail diff --git a/nx.json b/nx.json index bf22ea50f..3661449c6 100644 --- a/nx.json +++ b/nx.json @@ -9,7 +9,12 @@ "default", "!{projectRoot}/dist/**", "!{projectRoot}/coverage/**", - "!{projectRoot}/.control/**" + "!{projectRoot}/.control/**", + "!{projectRoot}/generated/**", + "!{projectRoot}/prisma/generated/**", + "!{projectRoot}/src/generated/**", + "!{projectRoot}/node_modules/.prisma/**", + "!{projectRoot}/node_modules/@prisma/**" ], "clientProduction": [ "{projectRoot}/**/*", @@ -90,7 +95,7 @@ "test:unit": { "cache": true, "inputs": [ - "default", + "production", "^production" ], "outputs": [ diff --git a/src/tooling/control/src/bootstrap.ts b/src/tooling/control/src/bootstrap.ts index ee65d28b1..35389b0e0 100644 --- a/src/tooling/control/src/bootstrap.ts +++ b/src/tooling/control/src/bootstrap.ts @@ -21,7 +21,12 @@ let createNxConfig = (scope: 'repo' | 'oss' = 'repo') => ({ 'default', '!{projectRoot}/dist/**', '!{projectRoot}/coverage/**', - '!{projectRoot}/.control/**' + '!{projectRoot}/.control/**', + '!{projectRoot}/generated/**', + '!{projectRoot}/prisma/generated/**', + '!{projectRoot}/src/generated/**', + '!{projectRoot}/node_modules/.prisma/**', + '!{projectRoot}/node_modules/@prisma/**' ], clientProduction: [ '{projectRoot}/**/*', @@ -73,7 +78,7 @@ let createNxConfig = (scope: 'repo' | 'oss' = 'repo') => ({ }, 'test:unit': { cache: true, - inputs: ['default', '^production'], + inputs: ['production', '^production'], outputs: ['{projectRoot}/coverage/**'] }, 'check-types': { From d1ef72f20f50ce14729c8f3a47ac42d1b89547ab Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Thu, 28 May 2026 14:18:42 +0200 Subject: [PATCH 54/69] Caching fixes --- .github/workflows/reusable-control.yml | 38 ++++++++++++++++++++-- src/tooling/control/src/cli.ts | 4 ++- src/tooling/control/src/nx-cache/server.ts | 6 ++-- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 6aabff2f9..54ebf2c14 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -80,6 +80,8 @@ jobs: if: ${{ inputs.enable_cache }} env: CACHE_PREFIX: ${{ inputs.cache_prefix }} + CACHE_NAMESPACE: control-v1-${{ runner.os }}-${{ hashFiles('bun.lock', 'package.json', 'nx.json') }} + CACHE_REF: ${{ github.ref_name }} COMMAND: ${{ inputs.command }} MODE: ${{ inputs.mode }} FILTER: ${{ inputs.filter }} @@ -103,14 +105,37 @@ jobs: fi SCOPE="$(printf '%s' "${SCOPE}" | tr -c 'A-Za-z0-9_.-' '-')" + CACHE_REF_SAFE="$(printf '%s' "${CACHE_REF}" | tr -c 'A-Za-z0-9_.-' '-')" WARM_SCOPE="$(printf '%s' "${PREFIX}-warm-cache" | tr -c 'A-Za-z0-9_.-' '-')" + ARTIFACT_PREFIX="control-nx-artifacts-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-${SCOPE}" + WARM_ARTIFACT_PREFIX="control-nx-artifacts-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-${WARM_SCOPE}" + echo "scope=${SCOPE}" >> "${GITHUB_OUTPUT}" echo "warm_scope=${WARM_SCOPE}" >> "${GITHUB_OUTPUT}" + echo "namespace=${CACHE_NAMESPACE}" >> "${GITHUB_OUTPUT}" + echo "ref_safe=${CACHE_REF_SAFE}" >> "${GITHUB_OUTPUT}" + echo "artifact_save_key=${ARTIFACT_PREFIX}-${{ github.run_id }}-${{ github.run_attempt }}" >> "${GITHUB_OUTPUT}" + { + echo "artifact_restore_keys<> "${GITHUB_OUTPUT}" - name: Prepare cache directories if: ${{ inputs.enable_cache }} run: mkdir -p .nx/cache .control/cache/nx-artifacts .control/cache/nx-manifest + - name: Restore Nx artifact directory + if: ${{ inputs.enable_cache }} + uses: actions/cache/restore@v4 + with: + path: .control/cache/nx-artifacts + key: ${{ steps.cache-scope.outputs.artifact_save_key }} + restore-keys: ${{ steps.cache-scope.outputs.artifact_restore_keys }} + - name: Install packages env: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache @@ -123,16 +148,15 @@ jobs: - name: Start Nx cache bridge if: ${{ inputs.enable_cache }} env: - CACHE_NAMESPACE: control-v1-${{ runner.os }}-${{ hashFiles('bun.lock', 'package.json', 'nx.json') }} + CACHE_NAMESPACE: ${{ steps.cache-scope.outputs.namespace }} CACHE_SCOPE: ${{ steps.cache-scope.outputs.scope }} CACHE_WARM_SCOPE: ${{ steps.cache-scope.outputs.warm_scope }} - CACHE_REF: ${{ github.ref_name }} + CACHE_REF_SAFE: ${{ steps.cache-scope.outputs.ref_safe }} run: | set -euo pipefail PORT=43191 SERVER_URL="http://127.0.0.1:${PORT}" - CACHE_REF_SAFE="$(printf '%s' "${CACHE_REF}" | tr -c 'A-Za-z0-9_.-' '-')" MANIFEST_PREFIX="control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-${CACHE_SCOPE}" MANIFEST_SAVE_KEY="${MANIFEST_PREFIX}-${{ github.run_id }}-${{ github.run_attempt }}" WARM_MANIFEST_PREFIX="control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-${CACHE_WARM_SCOPE}" @@ -151,6 +175,7 @@ jobs: --manifest-restore-key "${WARM_MANIFEST_PREFIX}-" \ --manifest-restore-key "control-nx-used-digests-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-" \ --manifest-restore-key "control-nx-used-digests-${CACHE_NAMESPACE}-" \ + --disable-github-uploads \ > .control/cache/nx-server.log 2>&1 & echo "$!" > .control/cache/nx-server.pid @@ -278,3 +303,10 @@ jobs: if [ "${SUMMARY_STATUS}" -ne 0 ]; then echo "::warning::Nx cache bridge summary failed with status ${SUMMARY_STATUS}; continuing because cache reporting is best-effort" fi + + - name: Save warmed Nx artifact directory + if: ${{ always() && inputs.enable_cache && inputs.command == 'warm-cache' }} + uses: actions/cache/save@v4 + with: + path: .control/cache/nx-artifacts + key: ${{ steps.cache-scope.outputs.artifact_save_key }} diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index c4ebe64a8..8c58acaee 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -119,6 +119,7 @@ prog .option('--manifest-primary-key', 'Primary GitHub cache key for digest manifest restore') .option('--manifest-restore-key', 'GitHub cache key or prefix for manifest restore') .option('--max-manifest-entries', 'Maximum digest manifest entries', '500') + .option('--disable-github-uploads', 'Disable GitHub cache uploads from the bridge') .action(async (opts: Record) => { await runCommand(async () => { let argv = process.argv; @@ -133,7 +134,8 @@ prog manifestSaveKey: readCliOption(argv, '--manifest-save-key'), manifestRestoreKey: readCliOption(argv, '--manifest-primary-key') ?? readCliOption(argv, '--manifest-restore-key'), manifestRestoreKeys: collectManifestRestoreKeys(argv), - maxManifestEntries: Number(readCliOption(argv, '--max-manifest-entries', '500')) + maxManifestEntries: Number(readCliOption(argv, '--max-manifest-entries', '500')), + githubUploads: !readBooleanOption(opts, ['disable-github-uploads']) }); }); }); diff --git a/src/tooling/control/src/nx-cache/server.ts b/src/tooling/control/src/nx-cache/server.ts index 1974f7388..11e8a1ccc 100644 --- a/src/tooling/control/src/nx-cache/server.ts +++ b/src/tooling/control/src/nx-cache/server.ts @@ -45,6 +45,7 @@ type ServerOptions = { manifestRestoreKey?: string; manifestRestoreKeys: string[]; maxManifestEntries: number; + githubUploads: boolean; }; type Manifest = { @@ -384,7 +385,7 @@ export let runCacheServer = async (opts: ServerOptions) => { digests } satisfies Manifest); - if (!opts.manifestSaveKey || !isActionsCacheAvailable()) return; + if (!opts.githubUploads || !opts.manifestSaveKey || !isActionsCacheAvailable()) return; let started = Date.now(); try { let actionsCache = await loadActionsCache(); @@ -405,6 +406,7 @@ export let runCacheServer = async (opts: ServerOptions) => { let finalize = async () => { await Promise.allSettled(uploadTasks); await writeManifest(); + process.exitCode = 0; persistStats(); }; @@ -495,7 +497,7 @@ export let runCacheServer = async (opts: ServerOptions) => { ensureDir(artifactDir(opts.root, hash)); writeFileSync(artifactPath(opts.root, hash), Buffer.from(await req.arrayBuffer())); - queueUpload(hash); + if (opts.githubUploads) queueUpload(hash); persistStats(); return new Response('ok'); } From 98f1199bb0948b30eb785cbb962e42b68d0848ba Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Thu, 28 May 2026 16:14:18 +0200 Subject: [PATCH 55/69] Harden cache --- .github/workflows/reusable-control.yml | 50 +++++++++++++++++++++- src/tooling/control/src/nx-cache/server.ts | 12 ++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 54ebf2c14..fd795a057 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -49,6 +49,11 @@ on: required: false default: '' type: string + cache_write_mode: + description: 'Nx cache write policy: auto, warm-cache, trusted, always, or never' + required: false + default: auto + type: string jobs: control: @@ -87,6 +92,10 @@ jobs: FILTER: ${{ inputs.filter }} ALL: ${{ inputs.all }} MODULES: ${{ inputs.modules }} + CACHE_WRITE_MODE: ${{ inputs.cache_write_mode }} + EVENT_NAME: ${{ github.event_name }} + DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} + IS_FORK_PR: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }} run: | set -euo pipefail @@ -109,11 +118,43 @@ jobs: WARM_SCOPE="$(printf '%s' "${PREFIX}-warm-cache" | tr -c 'A-Za-z0-9_.-' '-')" ARTIFACT_PREFIX="control-nx-artifacts-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-${SCOPE}" WARM_ARTIFACT_PREFIX="control-nx-artifacts-${CACHE_NAMESPACE}-${CACHE_REF_SAFE}-${WARM_SCOPE}" + CACHE_UPLOADS="false" + + case "${CACHE_WRITE_MODE}" in + auto) + if [ "${COMMAND}" = "warm-cache" ]; then + CACHE_UPLOADS="true" + elif [ "${EVENT_NAME}" != "pull_request" ] && [ "${CACHE_REF}" = "${DEFAULT_BRANCH}" ]; then + CACHE_UPLOADS="true" + fi + ;; + warm-cache) + if [ "${COMMAND}" = "warm-cache" ]; then + CACHE_UPLOADS="true" + fi + ;; + trusted) + if [ "${IS_FORK_PR}" != "true" ]; then + CACHE_UPLOADS="true" + fi + ;; + always) + CACHE_UPLOADS="true" + ;; + never) + CACHE_UPLOADS="false" + ;; + *) + echo "Unsupported cache_write_mode: ${CACHE_WRITE_MODE}" >&2 + exit 1 + ;; + esac echo "scope=${SCOPE}" >> "${GITHUB_OUTPUT}" echo "warm_scope=${WARM_SCOPE}" >> "${GITHUB_OUTPUT}" echo "namespace=${CACHE_NAMESPACE}" >> "${GITHUB_OUTPUT}" echo "ref_safe=${CACHE_REF_SAFE}" >> "${GITHUB_OUTPUT}" + echo "cache_uploads=${CACHE_UPLOADS}" >> "${GITHUB_OUTPUT}" echo "artifact_save_key=${ARTIFACT_PREFIX}-${{ github.run_id }}-${{ github.run_attempt }}" >> "${GITHUB_OUTPUT}" { echo "artifact_restore_keys< .control/cache/nx-server.log 2>&1 & echo "$!" > .control/cache/nx-server.pid diff --git a/src/tooling/control/src/nx-cache/server.ts b/src/tooling/control/src/nx-cache/server.ts index 11e8a1ccc..3876e5995 100644 --- a/src/tooling/control/src/nx-cache/server.ts +++ b/src/tooling/control/src/nx-cache/server.ts @@ -5,6 +5,7 @@ type CacheStats = { startedAt: string; updatedAt: string; namespace: string; + githubUploads: boolean; artifactKeyPrefix: string; manifestRestoreKey?: string; manifestMatchedKey?: string; @@ -131,6 +132,7 @@ let createStats = (opts: ServerOptions): CacheStats => ({ startedAt: new Date().toISOString(), updatedAt: new Date().toISOString(), namespace: opts.namespace, + githubUploads: opts.githubUploads, artifactKeyPrefix: `control-nx-task-${opts.namespace}-`, manifestRestoreKey: opts.manifestRestoreKey, manifestSaveKey: opts.manifestSaveKey, @@ -165,6 +167,7 @@ export let printCacheSummary = (statsPath: string, root?: string) => { console.log('Nx cache summary'); console.log(` Namespace: ${stats.namespace}`); + console.log(` GitHub uploads: ${stats.githubUploads ? 'enabled' : 'disabled'}`); console.log(` Manifest restored: ${stats.manifestMatchedKey ?? 'none'}`); console.log(` Manifest saved: ${stats.manifestSaved ? (stats.manifestSaveKey ?? 'yes') : 'no'}`); console.log(` Requests: HEAD ${stats.requests.head}, GET ${stats.requests.get}, PUT ${stats.requests.put}`); @@ -192,6 +195,15 @@ export let printCacheSummary = (statsPath: string, root?: string) => { if (process.env.GITHUB_ACTIONS === 'true' && stats.uploadFailures > 0) { console.log(`::warning::Nx cache bridge had ${stats.uploadFailures} upload failure(s)`); } + if ( + process.env.GITHUB_ACTIONS === 'true' && + !stats.githubUploads && + stats.requests.put > 0 + ) { + console.log( + `::warning::Nx cache bridge is read-only; ${stats.requests.put} new PUT request(s) will not be uploaded to GitHub Actions cache` + ); + } if (slowest.length > 0) { console.log(''); From 769164996c2a8cb7431e99b13e4dda78a34edace Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Thu, 28 May 2026 17:37:37 +0200 Subject: [PATCH 56/69] Remove node modules from dockerfiles --- src/backend/apps/api/Dockerfile | 8 +- src/backend/apps/api/control.toml | 12 +- src/systems/ares/service/Dockerfile | 6 +- src/systems/ares/service/control.toml | 3 +- src/systems/cargo/service/Dockerfile | 6 +- src/systems/cargo/service/control.toml | 3 +- src/systems/forge/service/Dockerfile | 6 +- src/systems/forge/service/control.toml | 3 +- src/systems/function-bay/service/Dockerfile | 6 +- src/systems/function-bay/service/control.toml | 3 +- src/systems/origin/apps/service/Dockerfile | 6 +- src/systems/origin/apps/service/control.toml | 3 +- src/systems/relay/service/Dockerfile | 6 +- src/systems/relay/service/control.toml | 3 +- src/systems/shuttle/service/Dockerfile | 6 +- src/systems/shuttle/service/control.toml | 3 +- src/systems/signal/service/Dockerfile | 6 +- src/systems/signal/service/control.toml | 3 +- src/systems/slates/apps/hub/Dockerfile | 6 +- src/systems/slates/apps/hub/control.toml | 3 +- src/systems/slates/apps/registry/Dockerfile | 6 +- src/systems/slates/apps/registry/control.toml | 3 +- .../subspace/apps/controller/Dockerfile | 6 +- .../subspace/apps/controller/control.toml | 1 - src/systems/subspace/apps/public/Dockerfile | 6 +- src/systems/subspace/apps/public/control.toml | 1 - src/systems/subspace/apps/worker/Dockerfile | 6 +- src/systems/subspace/apps/worker/control.toml | 3 +- src/systems/synthesis/service/Dockerfile | 6 +- src/systems/synthesis/service/control.toml | 3 +- src/systems/voyager/service/Dockerfile | 6 +- src/systems/voyager/service/control.toml | 3 +- src/tooling/control/src/builders/context.ts | 122 ++++++++++++++++++ src/tooling/control/src/builders/node.ts | 112 ++++++++++++++++ src/tooling/control/src/types.ts | 29 +++++ 35 files changed, 366 insertions(+), 48 deletions(-) diff --git a/src/backend/apps/api/Dockerfile b/src/backend/apps/api/Dockerfile index 3a29eec4a..bbbd792e5 100644 --- a/src/backend/apps/api/Dockerfile +++ b/src/backend/apps/api/Dockerfile @@ -29,10 +29,14 @@ RUN --mount=type=cache,id=control-nx-cache-app-api,target=/app/.nx/cache cd /app FROM build AS workspace WORKDIR /app/oss/src/backend/apps/api CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-app-api,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/oss/src/backend/apps/api/dist /app/dist -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" -CMD ["sh", "-c", "bun /app/dist/index.js"] +CMD ["sh", "-c", "bun run migrate && bun run start"] diff --git a/src/backend/apps/api/control.toml b/src/backend/apps/api/control.toml index 7d6d8c05e..d0b2c5bb4 100644 --- a/src/backend/apps/api/control.toml +++ b/src/backend/apps/api/control.toml @@ -24,15 +24,21 @@ projects = ["@metorial/db"] [build.artifacts] copy = [ - { from = "dist", to = "/app/dist" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "dist", to = "/app/dist" } +] + +[build.runtime_skeleton] +migrate = true +source = "//oss/deployment/skeleton" +prisma_schemas = [ + { name = "oss", path = "//oss/src/backend/db/prisma" } ] [build.runtime] base_image = "oven/bun:1.2.22-alpine" packages = ["curl"] env = { NODE_ENV = "production" } -command = "bun /app/dist/index.js" +command = "bun run migrate && bun run start" [test.e2e] command = "ROOT=src; [ -d oss/src ] && ROOT=oss/src; bun run --cwd $ROOT/backend/apps/api test:e2e:control" diff --git a/src/systems/ares/service/Dockerfile b/src/systems/ares/service/Dockerfile index 1c9dc0c2f..911bb552e 100644 --- a/src/systems/ares/service/Dockerfile +++ b/src/systems/ares/service/Dockerfile @@ -23,15 +23,19 @@ RUN --mount=type=cache,id=control-nx-cache-ares,target=/app/.nx/cache cd /app && FROM build AS workspace WORKDIR /app/src/systems/ares/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-ares,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/ares/service/dist /app/dist COPY --from=build /app/src/systems/ares/service/prisma /app/prisma COPY --from=build /app/src/systems/ares/service/prisma.config.ts /app/prisma.config.ts COPY --from=build /app/src/systems/ares/service/frontend/auth/dist /app/frontend/auth/dist COPY --from=build /app/src/systems/ares/service/frontend/admin/dist /app/frontend/admin/dist -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52120 EXPOSE 52121 diff --git a/src/systems/ares/service/control.toml b/src/systems/ares/service/control.toml index eb65895a8..1d84b49d8 100644 --- a/src/systems/ares/service/control.toml +++ b/src/systems/ares/service/control.toml @@ -33,8 +33,7 @@ copy = [ { from = "prisma", to = "/app/prisma" }, { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, { from = "frontend/auth/dist", to = "/app/frontend/auth/dist" }, - { from = "frontend/admin/dist", to = "/app/frontend/admin/dist" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "frontend/admin/dist", to = "/app/frontend/admin/dist" } ] [build.runtime] diff --git a/src/systems/cargo/service/Dockerfile b/src/systems/cargo/service/Dockerfile index 6aadd1dc9..5d2bc8179 100644 --- a/src/systems/cargo/service/Dockerfile +++ b/src/systems/cargo/service/Dockerfile @@ -23,13 +23,17 @@ RUN --mount=type=cache,id=control-nx-cache-cargo,target=/app/.nx/cache cd /app & FROM build AS workspace WORKDIR /app/src/systems/cargo/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-cargo,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/cargo/service/dist /app/dist COPY --from=build /app/src/systems/cargo/db/prisma /app/prisma COPY --from=build /app/src/systems/cargo/db/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52150 EXPOSE 52151 diff --git a/src/systems/cargo/service/control.toml b/src/systems/cargo/service/control.toml index 58b5a8f3a..c1198e2c7 100644 --- a/src/systems/cargo/service/control.toml +++ b/src/systems/cargo/service/control.toml @@ -29,8 +29,7 @@ projects = ["@metorial-cargo/db"] copy = [ { from = "dist", to = "/app/dist" }, { from = "../db/prisma", to = "/app/prisma" }, - { from = "../db/prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "../db/prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index f45f05464..0cc6097d0 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -21,13 +21,17 @@ RUN --mount=type=cache,id=control-nx-cache-forge,target=/app/.nx/cache cd /app & FROM build AS workspace WORKDIR /app/src/systems/forge/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-forge,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/forge/service/dist /app/dist COPY --from=build /app/src/systems/forge/service/prisma /app/prisma COPY --from=build /app/src/systems/forge/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="development" EXPOSE 52020 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/src/systems/forge/service/control.toml b/src/systems/forge/service/control.toml index c49cb1973..d1506d2a5 100644 --- a/src/systems/forge/service/control.toml +++ b/src/systems/forge/service/control.toml @@ -24,8 +24,7 @@ projects = ["@metorial/forge"] copy = [ { from = "dist", to = "/app/dist" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/function-bay/service/Dockerfile b/src/systems/function-bay/service/Dockerfile index 5ba407954..0ec8845cc 100644 --- a/src/systems/function-bay/service/Dockerfile +++ b/src/systems/function-bay/service/Dockerfile @@ -22,13 +22,17 @@ RUN --mount=type=cache,id=control-nx-cache-function-bay,target=/app/.nx/cache cd FROM build AS workspace WORKDIR /app/src/systems/function-bay/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-function-bay,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/function-bay/service/dist /app/dist COPY --from=build /app/src/systems/function-bay/service/prisma /app/prisma COPY --from=build /app/src/systems/function-bay/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="development" EXPOSE 52030 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/src/systems/function-bay/service/control.toml b/src/systems/function-bay/service/control.toml index 3294b8702..5b649a7d0 100644 --- a/src/systems/function-bay/service/control.toml +++ b/src/systems/function-bay/service/control.toml @@ -24,8 +24,7 @@ projects = ["@metorial/function-bay", "@metorial/forge"] copy = [ { from = "dist", to = "/app/dist" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/origin/apps/service/Dockerfile b/src/systems/origin/apps/service/Dockerfile index 9f33d31db..afe7e381f 100644 --- a/src/systems/origin/apps/service/Dockerfile +++ b/src/systems/origin/apps/service/Dockerfile @@ -21,13 +21,17 @@ RUN --mount=type=cache,id=control-nx-cache-origin,target=/app/.nx/cache cd /app FROM build AS workspace WORKDIR /app/src/systems/origin/apps/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-origin,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/origin/apps/service/dist /app/dist COPY --from=build /app/src/systems/origin/apps/service/prisma /app/prisma COPY --from=build /app/src/systems/origin/apps/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52090 EXPOSE 52093 diff --git a/src/systems/origin/apps/service/control.toml b/src/systems/origin/apps/service/control.toml index 8f2412383..c96b5ef9f 100644 --- a/src/systems/origin/apps/service/control.toml +++ b/src/systems/origin/apps/service/control.toml @@ -25,8 +25,7 @@ projects = ["@metorial/origin"] copy = [ { from = "dist", to = "/app/dist" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/relay/service/Dockerfile b/src/systems/relay/service/Dockerfile index 92321068a..f761ce221 100644 --- a/src/systems/relay/service/Dockerfile +++ b/src/systems/relay/service/Dockerfile @@ -21,13 +21,17 @@ RUN --mount=type=cache,id=control-nx-cache-relay,target=/app/.nx/cache cd /app & FROM build AS workspace WORKDIR /app/src/systems/relay/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-relay,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/relay/service/dist /app/dist COPY --from=build /app/src/systems/relay/service/prisma /app/prisma COPY --from=build /app/src/systems/relay/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52110 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/src/systems/relay/service/control.toml b/src/systems/relay/service/control.toml index a732b2ff6..44681ff38 100644 --- a/src/systems/relay/service/control.toml +++ b/src/systems/relay/service/control.toml @@ -25,8 +25,7 @@ projects = ["@metorial/relay"] copy = [ { from = "dist", to = "/app/dist" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/shuttle/service/Dockerfile b/src/systems/shuttle/service/Dockerfile index 50127984a..d6d58e6b7 100644 --- a/src/systems/shuttle/service/Dockerfile +++ b/src/systems/shuttle/service/Dockerfile @@ -22,13 +22,17 @@ RUN --mount=type=cache,id=control-nx-cache-shuttle,target=/app/.nx/cache cd /app FROM build AS workspace WORKDIR /app/src/systems/shuttle/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-shuttle,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/shuttle/service/dist /app/dist COPY --from=build /app/src/systems/shuttle/service/prisma /app/prisma COPY --from=build /app/src/systems/shuttle/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52080 EXPOSE 52081 diff --git a/src/systems/shuttle/service/control.toml b/src/systems/shuttle/service/control.toml index adb5a7fc2..9694dca3e 100644 --- a/src/systems/shuttle/service/control.toml +++ b/src/systems/shuttle/service/control.toml @@ -24,8 +24,7 @@ projects = ["@metorial/shuttle", "@metorial/forge", "@metorial/function-bay"] copy = [ { from = "dist", to = "/app/dist" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/signal/service/Dockerfile b/src/systems/signal/service/Dockerfile index 5cacf1249..3ac1150da 100644 --- a/src/systems/signal/service/Dockerfile +++ b/src/systems/signal/service/Dockerfile @@ -21,13 +21,17 @@ RUN --mount=type=cache,id=control-nx-cache-signal,target=/app/.nx/cache cd /app FROM build AS workspace WORKDIR /app/src/systems/signal/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-signal,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/signal/service/dist /app/dist COPY --from=build /app/src/systems/signal/service/prisma /app/prisma COPY --from=build /app/src/systems/signal/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52030 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/src/systems/signal/service/control.toml b/src/systems/signal/service/control.toml index 591f5efd0..3415a3356 100644 --- a/src/systems/signal/service/control.toml +++ b/src/systems/signal/service/control.toml @@ -24,8 +24,7 @@ projects = ["@metorial/signal"] copy = [ { from = "dist", to = "/app/dist" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/slates/apps/hub/Dockerfile b/src/systems/slates/apps/hub/Dockerfile index 08376d7ca..d7de25b67 100644 --- a/src/systems/slates/apps/hub/Dockerfile +++ b/src/systems/slates/apps/hub/Dockerfile @@ -24,14 +24,18 @@ RUN --mount=type=cache,id=control-nx-cache-slates-hub,target=/app/.nx/cache cd / FROM build AS workspace WORKDIR /app/src/systems/slates/apps/hub CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-slates-hub,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/slates/apps/hub/dist /app/dist COPY --from=build /app/src/systems/slates/apps/hub/dist/admin /app/dist/admin COPY --from=build /app/src/systems/slates/apps/hub/prisma /app/prisma COPY --from=build /app/src/systems/slates/apps/hub/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52045 EXPOSE 52046 diff --git a/src/systems/slates/apps/hub/control.toml b/src/systems/slates/apps/hub/control.toml index c3c4dbaba..31e8a6eca 100644 --- a/src/systems/slates/apps/hub/control.toml +++ b/src/systems/slates/apps/hub/control.toml @@ -31,8 +31,7 @@ copy = [ { from = "dist", to = "/app/dist" }, { from = "dist/admin", to = "/app/dist/admin" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/slates/apps/registry/Dockerfile b/src/systems/slates/apps/registry/Dockerfile index 118a1695a..b08380ad9 100644 --- a/src/systems/slates/apps/registry/Dockerfile +++ b/src/systems/slates/apps/registry/Dockerfile @@ -26,14 +26,18 @@ RUN --mount=type=cache,id=control-nx-cache-slates-registry,target=/app/.nx/cache FROM build AS workspace WORKDIR /app/src/systems/slates/apps/registry CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-slates-registry,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/slates/apps/registry/dist /app/dist COPY --from=build /app/src/systems/slates/apps/registry/dist/admin /app/dist/admin COPY --from=build /app/src/systems/slates/apps/registry/prisma /app/prisma COPY --from=build /app/src/systems/slates/apps/registry/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52040 EXPOSE 52041 diff --git a/src/systems/slates/apps/registry/control.toml b/src/systems/slates/apps/registry/control.toml index f9a5ff0cb..17df6cb41 100644 --- a/src/systems/slates/apps/registry/control.toml +++ b/src/systems/slates/apps/registry/control.toml @@ -32,8 +32,7 @@ copy = [ { from = "dist", to = "/app/dist" }, { from = "dist/admin", to = "/app/dist/admin" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/subspace/apps/controller/Dockerfile b/src/systems/subspace/apps/controller/Dockerfile index f62424904..8fc29cb1a 100644 --- a/src/systems/subspace/apps/controller/Dockerfile +++ b/src/systems/subspace/apps/controller/Dockerfile @@ -26,12 +26,16 @@ RUN --mount=type=cache,id=control-nx-cache-subspace-controller,target=/app/.nx/c FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/controller CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-subspace-controller,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/subspace/apps/controller/dist /app/dist COPY --from=build /app/src/systems/subspace/db /app/db -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52070 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/src/systems/subspace/apps/controller/control.toml b/src/systems/subspace/apps/controller/control.toml index 005348bd1..7394c76a6 100644 --- a/src/systems/subspace/apps/controller/control.toml +++ b/src/systems/subspace/apps/controller/control.toml @@ -36,7 +36,6 @@ projects = [ copy = [ { from = "dist", to = "/app/dist" }, { from = "../../db", to = "/app/db" }, - { from = "/app/node_modules", to = "/app/node_modules" }, ] [build.runtime] diff --git a/src/systems/subspace/apps/public/Dockerfile b/src/systems/subspace/apps/public/Dockerfile index 5f475cb76..ab34834b2 100644 --- a/src/systems/subspace/apps/public/Dockerfile +++ b/src/systems/subspace/apps/public/Dockerfile @@ -30,14 +30,18 @@ RUN --mount=type=cache,id=control-nx-cache-subspace-public,target=/app/.nx/cache FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/public CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-subspace-public,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/subspace/apps/public/dist /app/dist COPY --from=build /app/src/systems/subspace/apps/public/frontend/dist /app/frontend/dist COPY --from=build /app/src/systems/subspace/db /app/db COPY --from=build /app/src/packages/frontend/ui /app/src/packages/frontend/ui -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52071 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/src/systems/subspace/apps/public/control.toml b/src/systems/subspace/apps/public/control.toml index f5c66ece5..8ef76c66e 100644 --- a/src/systems/subspace/apps/public/control.toml +++ b/src/systems/subspace/apps/public/control.toml @@ -45,7 +45,6 @@ copy = [ { from = "frontend/dist", to = "/app/frontend/dist" }, { from = "../../db", to = "/app/db" }, { from = "../../../../packages/frontend/ui", to = "/app/src/packages/frontend/ui" }, - { from = "/app/node_modules", to = "/app/node_modules" }, ] [build.runtime] diff --git a/src/systems/subspace/apps/worker/Dockerfile b/src/systems/subspace/apps/worker/Dockerfile index 85d6a5241..f8d4f08ba 100644 --- a/src/systems/subspace/apps/worker/Dockerfile +++ b/src/systems/subspace/apps/worker/Dockerfile @@ -29,12 +29,16 @@ RUN --mount=type=cache,id=control-nx-cache-subspace-worker,target=/app/.nx/cache FROM build AS workspace WORKDIR /app/src/systems/subspace/apps/worker CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-subspace-worker,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/subspace/apps/worker/dist /app/dist COPY --from=build /app/src/systems/subspace/db /app/db -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:12121/ || exit 1 diff --git a/src/systems/subspace/apps/worker/control.toml b/src/systems/subspace/apps/worker/control.toml index a3f316f7a..901f24de1 100644 --- a/src/systems/subspace/apps/worker/control.toml +++ b/src/systems/subspace/apps/worker/control.toml @@ -24,8 +24,7 @@ projects = ["@metorial-subspace/db", "@metorial/slates", "@metorial/forge", "@me [build.artifacts] copy = [ { from = "dist", to = "/app/dist" }, - { from = "../../db", to = "/app/db" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "../../db", to = "/app/db" } ] [build.runtime] diff --git a/src/systems/synthesis/service/Dockerfile b/src/systems/synthesis/service/Dockerfile index ef087f739..4ea12cfca 100644 --- a/src/systems/synthesis/service/Dockerfile +++ b/src/systems/synthesis/service/Dockerfile @@ -22,13 +22,17 @@ RUN --mount=type=cache,id=control-nx-cache-synthesis,target=/app/.nx/cache cd /a FROM build AS workspace WORKDIR /app/src/systems/synthesis/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-synthesis,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/synthesis/service/dist /app/dist COPY --from=build /app/src/systems/synthesis/service/prisma /app/prisma COPY --from=build /app/src/systems/synthesis/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52160 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/src/systems/synthesis/service/control.toml b/src/systems/synthesis/service/control.toml index f4d5890ff..0ff345f24 100644 --- a/src/systems/synthesis/service/control.toml +++ b/src/systems/synthesis/service/control.toml @@ -25,8 +25,7 @@ projects = ["@metorial/synthesis"] copy = [ { from = "dist", to = "/app/dist" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/systems/voyager/service/Dockerfile b/src/systems/voyager/service/Dockerfile index 69327d952..d8ef329db 100644 --- a/src/systems/voyager/service/Dockerfile +++ b/src/systems/voyager/service/Dockerfile @@ -21,13 +21,17 @@ RUN --mount=type=cache,id=control-nx-cache-voyager,target=/app/.nx/cache cd /app FROM build AS workspace WORKDIR /app/src/systems/voyager/service CMD ["sleep", "infinity"] +FROM oven/bun:1.2.22-alpine AS skeleton +WORKDIR /app +COPY _runtime_skeleton/ ./ +RUN --mount=type=cache,id=control-bun-runtime-voyager,target=/root/.bun/install/cache bun install --production --no-frozen-lockfile FROM oven/bun:1.2.22-alpine AS runner WORKDIR /app RUN --mount=type=cache,target=/var/cache/apk,sharing=locked sh -c 'attempt=1; until apk add --cache-dir /var/cache/apk curl; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done' +COPY --from=skeleton /app ./ COPY --from=build /app/src/systems/voyager/service/dist /app/dist COPY --from=build /app/src/systems/voyager/service/prisma /app/prisma COPY --from=build /app/src/systems/voyager/service/prisma.config.ts /app/prisma.config.ts -COPY --from=build /app/node_modules /app/node_modules ENV NODE_ENV="production" EXPOSE 52060 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/src/systems/voyager/service/control.toml b/src/systems/voyager/service/control.toml index 5342f2aaf..025ca4b36 100644 --- a/src/systems/voyager/service/control.toml +++ b/src/systems/voyager/service/control.toml @@ -25,8 +25,7 @@ projects = ["@metorial/voyager"] copy = [ { from = "dist", to = "/app/dist" }, { from = "prisma", to = "/app/prisma" }, - { from = "prisma.config.ts", to = "/app/prisma.config.ts" }, - { from = "/app/node_modules", to = "/app/node_modules" } + { from = "prisma.config.ts", to = "/app/prisma.config.ts" } ] [build.runtime] diff --git a/src/tooling/control/src/builders/context.ts b/src/tooling/control/src/builders/context.ts index 319594fb1..9e046dfb4 100644 --- a/src/tooling/control/src/builders/context.ts +++ b/src/tooling/control/src/builders/context.ts @@ -16,6 +16,7 @@ import type { GeneratedBuildInstallLayer, GeneratedBuildPath, GeneratedBuildPlan, + GeneratedBuildRuntimeSkeleton, ServiceRegistry, WorkspaceSession } from '../types'; @@ -188,6 +189,125 @@ let materializeSourceInputs = async (opts: { } }; +let readJsonFile = (path: string): Record | null => { + if (!existsSync(path)) return null; + return JSON.parse(readFileSync(path, 'utf8')) as Record; +}; + +let runtimeSkeletonSourcePath = ( + skeleton: GeneratedBuildRuntimeSkeleton, + sourceRoot: string, + relativePath: string +): string | null => { + if (!skeleton.source) return null; + return join(sourceRoot, skeleton.source.relativeToContext, relativePath); +}; + +let pickRuntimeDependencies = (opts: { + skeleton: GeneratedBuildRuntimeSkeleton; + sourceRoot: string; +}): Record => { + if (!opts.skeleton.needsPrisma) return {}; + + let packagePath = runtimeSkeletonSourcePath(opts.skeleton, opts.sourceRoot, 'package.json'); + let packageJson = packagePath ? readJsonFile(packagePath) : null; + let dependencies = (packageJson?.dependencies ?? {}) as Record; + let runtimeDependencyNames = [ + '@aws-sdk/rds-signer', + '@prisma/client', + 'jose', + 'prisma', + 'prisma-json-types-generator', + 'typescript' + ]; + let picked: Record = {}; + + for (let name of runtimeDependencyNames) { + if (dependencies[name]) picked[name] = dependencies[name]; + } + + if (!picked.prisma || !picked['@prisma/client']) { + throw new ControlError({ + code: 'runtime_skeleton_missing_prisma_dependencies', + message: 'Runtime skeleton source must declare prisma and @prisma/client dependencies' + }); + } + + return picked; +}; + +let renderRuntimeSkeletonPackageJson = (opts: { + plan: GeneratedBuildPlan; + skeleton: GeneratedBuildRuntimeSkeleton; + sourceRoot: string; +}): string => { + let packagePath = runtimeSkeletonSourcePath(opts.skeleton, opts.sourceRoot, 'package.json'); + let templatePackageJson = packagePath ? readJsonFile(packagePath) : null; + let packageJson = opts.skeleton.needsPrisma && templatePackageJson + ? { ...templatePackageJson } + : { + name: `${opts.plan.service.name}-runtime`, + version: '1.0.0', + private: true, + scripts: { + ...(opts.skeleton.migrate ? { migrate: 'bun ./migrate.ts' } : {}), + 'server:start': 'bun ./dist/index.js', + start: 'bun run server:start' + }, + dependencies: {}, + devDependencies: {} + }; + + packageJson.dependencies = pickRuntimeDependencies({ + skeleton: opts.skeleton, + sourceRoot: opts.sourceRoot + }); + packageJson.devDependencies = {}; + + return `${JSON.stringify(packageJson, null, 2)}\n`; +}; + +let materializeRuntimeSkeleton = (opts: { + plan: GeneratedBuildPlan; + contextRoot: string; + sourceRoot: string; +}) => { + let skeleton = opts.plan.runtimeSkeleton; + if (!skeleton?.enabled) return; + + let skeletonRoot = join(opts.contextRoot, '_runtime_skeleton'); + mkdirSync(skeletonRoot, { recursive: true }); + writeFileSync( + join(skeletonRoot, 'package.json'), + renderRuntimeSkeletonPackageJson({ + plan: opts.plan, + skeleton, + sourceRoot: opts.sourceRoot + }) + ); + + if (skeleton.migrate) { + let migratePath = runtimeSkeletonSourcePath(skeleton, opts.sourceRoot, 'migrate.ts'); + if (!migratePath || !existsSync(migratePath)) { + throw new ControlError({ + code: 'runtime_skeleton_missing_migrate', + message: `Runtime skeleton for "${opts.plan.service.name}" must include migrate.ts` + }); + } + + copyPath(migratePath, join(skeletonRoot, 'migrate.ts')); + } + + if (skeleton.migrate || skeleton.prismaSchemas.length > 0) { + mkdirSync(join(skeletonRoot, 'prisma'), { recursive: true }); + } + + for (let schema of skeleton.prismaSchemas) { + let source = join(opts.sourceRoot, schema.path.relativeToContext); + copyPath(source, join(skeletonRoot, 'prisma', schema.name)); + } +}; + let materializeNodeContext = async (opts: { plan: GeneratedBuildPlan; contextRoot: string; @@ -223,11 +343,13 @@ let materializeNodeContext = async (opts: { } if (shouldUsePrebuiltBuildArtifacts()) { + materializeRuntimeSkeleton(opts); await materializeSourceInputs(opts); materializePrebuiltArtifacts(opts); return renderNodePrunedDockerfile(opts.plan); } + materializeRuntimeSkeleton(opts); await materializeSourceInputs(opts); return renderNodePrunedDockerfile(opts.plan); diff --git a/src/tooling/control/src/builders/node.ts b/src/tooling/control/src/builders/node.ts index 1fa13f1c1..29e8aae9c 100644 --- a/src/tooling/control/src/builders/node.ts +++ b/src/tooling/control/src/builders/node.ts @@ -28,6 +28,8 @@ import type { GeneratedBuildInstallLayer, GeneratedBuildPath, GeneratedBuildPlan, + GeneratedBuildRuntimePrismaSchema, + GeneratedBuildRuntimeSkeleton, GeneratedBuildSourceLayer, ServiceRegistry } from '../types'; @@ -207,6 +209,95 @@ let renderAutomationCommand = (automation: GeneratedBuildAutomation): string => let shouldRetryNxRun = (command: string): boolean => command.includes('--target=prisma:generate') || /:prisma:generate(\s|$)/.test(command); +let serviceIsInOss = (plan: GeneratedBuildPlan, registry: ServiceRegistry): boolean => { + let serviceDir = resolve(plan.service.dir); + let ossRoot = resolve(registry.ossRoot); + return serviceDir === ossRoot || serviceDir.startsWith(`${ossRoot}/`); +}; + +let defaultRuntimeSkeletonSource = ( + plan: GeneratedBuildPlan, + registry: ServiceRegistry +): string => (serviceIsInOss(plan, registry) ? '//oss/deployment/skeleton' : '//deployment/skeleton'); + +let commandNeedsPrisma = (command: string): boolean => + /\bprisma\b/.test(command) || /\bmigrate\b/.test(command); + +let resolveSingleRuntimePath = (opts: { + plan: GeneratedBuildPlan; + registry: ServiceRegistry; + pattern: string; + label: string; + allowMissing?: boolean; +}): GeneratedBuildPath | undefined => { + let paths = resolveBuildPaths({ + service: opts.plan.service, + registry: opts.registry, + contextRoot: opts.plan.contextRoot, + patterns: [opts.pattern], + label: opts.label, + allowMissing: opts.allowMissing + }); + + if (paths.length > 1) { + throw new ControlError({ + code: 'node_build_runtime_path_not_unique', + message: `Node service "${opts.plan.service.name}" resolved multiple paths for ${opts.label}`, + details: paths.map(path => path.relativeToContext) + }); + } + + return paths[0]; +}; + +let resolveRuntimeSkeleton = ( + plan: GeneratedBuildPlan, + registry: ServiceRegistry +): GeneratedBuildRuntimeSkeleton | undefined => { + let config = plan.service.config.build?.runtime_skeleton; + if (config?.enabled === false) return undefined; + + let prismaSchemas: GeneratedBuildRuntimePrismaSchema[] = []; + for (let schema of config?.prisma_schemas ?? []) { + let path = resolveSingleRuntimePath({ + plan, + registry, + pattern: schema.path, + label: `runtime Prisma schema "${schema.name}"` + }); + if (!path) continue; + prismaSchemas.push({ name: schema.name, path }); + } + + let migrate = config?.migrate ?? /\bmigrate\b/.test(plan.runtime.command); + let needsPrisma = + migrate || prismaSchemas.length > 0 || commandNeedsPrisma(plan.runtime.command); + let sourcePattern = config?.source ?? defaultRuntimeSkeletonSource(plan, registry); + let source = resolveSingleRuntimePath({ + plan, + registry, + pattern: sourcePattern, + label: 'runtime skeleton source', + allowMissing: !config?.source + }); + + if ((migrate || needsPrisma) && !source?.exists) { + throw new ControlError({ + code: 'node_build_runtime_skeleton_missing', + message: `Node service "${plan.service.name}" needs a runtime skeleton, but "${sourcePattern}" does not exist` + }); + } + + return { + enabled: true, + source: source?.exists ? source : undefined, + installCommand: config?.install_command ?? 'bun install --production --no-frozen-lockfile', + migrate, + needsPrisma, + prismaSchemas + }; +}; + let renderRetriableCommand = (command: string): string => `{ attempt=1; until ${command}; do code=$?; if [ "$attempt" -ge 3 ]; then exit "$code"; fi; sleep $((attempt * 2)); attempt=$((attempt + 1)); done; }`; @@ -221,6 +312,12 @@ let renderBunInstallRun = (plan: GeneratedBuildPlan, layer: GeneratedBuildInstal return `RUN --mount=type=cache,id=control-bun-install-${plan.service.name}-${layer.name},target=/root/.bun/install/cache ${layer.command}`; }; +let renderRuntimeSkeletonInstallRun = (plan: GeneratedBuildPlan): string => { + let command = plan.runtimeSkeleton?.installCommand ?? 'bun install --production --no-frozen-lockfile'; + if (!shouldUseDockerCacheMounts()) return `RUN ${command}`; + return `RUN --mount=type=cache,id=control-bun-runtime-${plan.service.name},target=/root/.bun/install/cache ${command}`; +}; + let collectNodeProjectUseCounts = (opts: { registry: ServiceRegistry; graph: ReturnType; @@ -636,6 +733,18 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { ...automationLines.map(renderPlanNxRun), renderPlanNxRun(`bun x nx run ${plan.project}:${plan.target}`) ]; + let runtimeSkeletonLines = plan.runtimeSkeleton?.enabled + ? [ + '', + `FROM ${pinBunImage(plan.runtime.base_image)} AS skeleton`, + `WORKDIR ${plan.runtime.workdir}`, + 'COPY _runtime_skeleton/ ./', + renderRuntimeSkeletonInstallRun(plan) + ] + : []; + let runtimeSkeletonCopyLines = plan.runtimeSkeleton?.enabled + ? ['COPY --from=skeleton /app ./'] + : []; let lines = [ '# syntax=docker/dockerfile:1.7', @@ -658,10 +767,12 @@ export let renderNodePrunedDockerfile = (plan: GeneratedBuildPlan): string => { 'FROM build AS workspace', `WORKDIR ${plan.workspaceRoot}`, 'CMD ["sleep", "infinity"]', + ...runtimeSkeletonLines, '', `FROM ${pinBunImage(plan.runtime.base_image)} AS runner`, `WORKDIR ${plan.runtime.workdir}`, ...renderRuntimePackages(plan), + ...runtimeSkeletonCopyLines, ...artifactLines, ...renderEnvLines(plan), ...exposeLines, @@ -811,6 +922,7 @@ export let nodeBuildBuilder: BuildBuilder = { plan.codegenSteps = []; plan.prebuildSteps = []; plan.mainSteps = []; + plan.runtimeSkeleton = resolveRuntimeSkeleton(plan, registry); return plan; }, diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts index 88a69dba2..fcccca463 100644 --- a/src/tooling/control/src/types.ts +++ b/src/tooling/control/src/types.ts @@ -66,6 +66,19 @@ export type ControlBuildRuntime = { workdir?: string; }; +export type ControlBuildRuntimePrismaSchema = { + name: string; + path: string; +}; + +export type ControlBuildRuntimeSkeleton = { + enabled?: boolean; + source?: string; + install_command?: string; + migrate?: boolean; + prisma_schemas?: ControlBuildRuntimePrismaSchema[]; +}; + export type ControlBuildInstallLayer = { name?: string; tool?: 'bun' | 'go' | 'cargo' | 'custom'; @@ -117,6 +130,7 @@ export type ControlBuildConfig = { copy?: ControlBuildCopy[]; }; runtime?: ControlBuildRuntime; + runtime_skeleton?: ControlBuildRuntimeSkeleton; }; export type ControlConfig = { @@ -296,6 +310,20 @@ export type GeneratedBuildArtifact = { fromRelativeToContext: string; }; +export type GeneratedBuildRuntimePrismaSchema = { + name: string; + path: GeneratedBuildPath; +}; + +export type GeneratedBuildRuntimeSkeleton = { + enabled: boolean; + source?: GeneratedBuildPath; + installCommand: string; + migrate: boolean; + needsPrisma: boolean; + prismaSchemas: GeneratedBuildRuntimePrismaSchema[]; +}; + export type GeneratedBuildPlan = { builder: 'node' | 'rust' | 'go'; service: ControlService; @@ -314,6 +342,7 @@ export type GeneratedBuildPlan = { mainSteps: GeneratedBuildStep[]; artifacts: GeneratedBuildArtifact[]; runtime: Required; + runtimeSkeleton?: GeneratedBuildRuntimeSkeleton; project?: string; target?: string; serviceDockerfile?: string; From 2f3e0ab7dc992a12dc54d21bc658838d1c3c2cad Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 29 May 2026 10:07:51 +0200 Subject: [PATCH 57/69] Patch frontend builds --- clients/metorial-custom-portal/package.json | 32 +++++++++++++++++++ clients/metorial-custom-portal/src/index.ts | 12 +++++++ .../metorial-custom-portal/tsconfig.dts.json | 11 +++++++ clients/metorial-custom-portal/tsconfig.json | 26 +++++++++++++++ clients/metorial-custom-portal/tsup.config.ts | 11 +++++++ src/backend/apis/custom-portal/client.ts | 11 ------- .../apis/custom-portal/src/lib/portal.ts | 14 ++++---- .../custom-portal/src/presenters/instance.ts | 4 +-- .../custom-portal/src/presenters/portal.ts | 4 +-- .../apis/custom-portal/src/types/portal.ts | 30 +++++++++++++++++ .../setupSessionEmbed/types.ts | 2 +- .../switcher/actions/createInstance.tsx | 3 +- .../switcher/actions/createProject.tsx | 8 ++--- .../switcher/switcherHorizontal.tsx | 8 ++--- src/frontend/state/src/index.ts | 1 - .../admin/src/pages/_error/routerError.tsx | 2 +- .../admin/src/pages/_error/serviceError.tsx | 2 +- .../frontend/admin/src/pages/_layout.tsx | 4 +-- .../frontend/admin/src/pages/admin/page.tsx | 6 ++-- .../accessGroups/[accessGroupId]/page.tsx | 6 ++-- .../pages/apps/[appId]/accessGroups/page.tsx | 6 ++-- .../admin/src/pages/apps/[appId]/page.tsx | 6 ++-- .../apps/[appId]/sso/[ssoTenantId]/page.tsx | 6 ++-- .../frontend/admin/src/pages/apps/page.tsx | 6 ++-- .../admin/src/pages/auditLogs/page.tsx | 6 ++-- .../admin/src/pages/auth/callback.tsx | 2 +- .../admin/src/pages/settings/page.tsx | 6 ++-- .../src/pages/tenants/[tenantId]/page.tsx | 4 +-- .../frontend/admin/src/pages/tenants/page.tsx | 6 ++-- .../admin/src/pages/users/[userId]/page.tsx | 6 ++-- .../frontend/admin/src/pages/users/page.tsx | 6 ++-- .../service/frontend/admin/src/router.tsx | 2 +- .../service/frontend/admin/src/state/index.ts | 2 +- .../frontend/auth/src/components/layout.tsx | 2 +- .../auth/src/pages/_error/routerError.tsx | 2 +- .../auth/src/pages/_error/serviceError.tsx | 2 +- .../frontend/auth/src/pages/internal.tsx | 4 +-- .../ares/service/frontend/auth/src/router.tsx | 2 +- .../service/frontend/auth/src/scenes/auth.tsx | 2 +- .../frontend/auth/src/scenes/authHome.tsx | 4 +-- .../frontend/auth/src/scenes/authIntent.tsx | 4 +-- .../service/frontend/auth/src/state/auth.ts | 2 +- .../frontend/auth/src/state/authIntent.ts | 2 +- src/systems/ares/service/package.json | 10 +++--- .../hub/admin/src/components/BackLink.tsx | 2 +- .../apps/hub/admin/src/components/Layout.tsx | 4 +-- .../src/components/SpecificationViewer.tsx | 2 +- .../apps/hub/admin/src/components/styled.ts | 2 +- .../slates/apps/hub/admin/src/main.tsx | 2 +- .../pages/deployments/DeploymentDetail.tsx | 4 +-- .../src/pages/deployments/DeploymentList.tsx | 6 ++-- .../src/pages/discoveries/DiscoveryDetail.tsx | 4 +-- .../src/pages/discoveries/DiscoveryList.tsx | 6 ++-- .../hub/admin/src/pages/events/EventList.tsx | 6 ++-- .../admin/src/pages/slates/SlateDetail.tsx | 4 +-- .../hub/admin/src/pages/slates/SlateList.tsx | 6 ++-- .../src/pages/versions/VersionDetail.tsx | 4 +-- .../admin/src/pages/versions/VersionList.tsx | 6 ++-- .../apps/hub/admin/src/state/deployments.ts | 2 +- .../apps/hub/admin/src/state/discoveries.ts | 2 +- .../slates/apps/hub/admin/src/state/events.ts | 2 +- .../slates/apps/hub/admin/src/state/slates.ts | 2 +- .../apps/hub/admin/src/state/versions.ts | 2 +- src/systems/slates/apps/hub/package.json | 8 ++--- .../admin/src/components/BackLink.tsx | 2 +- .../registry/admin/src/components/Layout.tsx | 4 +-- .../registry/admin/src/components/styled.ts | 2 +- .../apps/registry/admin/src/hooks/slates.ts | 2 +- .../registry/admin/src/hooks/subRegistries.ts | 2 +- .../apps/registry/admin/src/hooks/tenants.ts | 2 +- .../apps/registry/admin/src/hooks/users.ts | 2 +- .../registry/admin/src/hooks/workspaces.ts | 2 +- .../slates/apps/registry/admin/src/main.tsx | 2 +- .../src/pages/slates/SlateBulkCreate.tsx | 2 +- .../admin/src/pages/slates/SlateCreate.tsx | 4 +-- .../admin/src/pages/slates/SlateDetail.tsx | 4 +-- .../admin/src/pages/slates/SlateList.tsx | 6 ++-- .../admin/src/pages/slates/SlatePublish.tsx | 4 +-- .../sub-registries/SubRegistryCreate.tsx | 4 +-- .../sub-registries/SubRegistryDetail.tsx | 4 +-- .../pages/sub-registries/SubRegistryList.tsx | 6 ++-- .../admin/src/pages/tenants/TenantCreate.tsx | 4 +-- .../admin/src/pages/tenants/TenantDetail.tsx | 4 +-- .../admin/src/pages/tenants/TenantList.tsx | 6 ++-- .../admin/src/pages/users/UserCreate.tsx | 4 +-- .../admin/src/pages/users/UserDetail.tsx | 4 +-- .../admin/src/pages/users/UserList.tsx | 6 ++-- .../src/pages/workspaces/WorkspaceCreate.tsx | 4 +-- .../src/pages/workspaces/WorkspaceEdit.tsx | 4 +-- .../src/pages/workspaces/WorkspaceList.tsx | 6 ++-- src/systems/slates/apps/registry/package.json | 8 ++--- .../frontend/src/pages/_error/routerError.tsx | 2 +- .../src/pages/_error/serviceError.tsx | 2 +- .../setupSession/steps/authConfigStep.tsx | 2 +- .../pages/setupSession/steps/configStep.tsx | 2 +- .../apps/public/frontend/src/router.tsx | 2 +- src/systems/subspace/apps/public/package.json | 3 +- 97 files changed, 294 insertions(+), 196 deletions(-) create mode 100644 clients/metorial-custom-portal/package.json create mode 100644 clients/metorial-custom-portal/src/index.ts create mode 100644 clients/metorial-custom-portal/tsconfig.dts.json create mode 100644 clients/metorial-custom-portal/tsconfig.json create mode 100644 clients/metorial-custom-portal/tsup.config.ts delete mode 100644 src/backend/apis/custom-portal/client.ts create mode 100644 src/backend/apis/custom-portal/src/types/portal.ts diff --git a/clients/metorial-custom-portal/package.json b/clients/metorial-custom-portal/package.json new file mode 100644 index 000000000..0082c9bb8 --- /dev/null +++ b/clients/metorial-custom-portal/package.json @@ -0,0 +1,32 @@ +{ + "name": "@metorial/custom-portal-client", + "version": "1.0.0-internal", + "author": "Tobias Herber", + "license": "FSL-1.1", + "type": "module", + "files": ["dist"], + "exports": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.js", + "default": "./dist/index.js" + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "NODE_OPTIONS=--max-old-space-size=6144 tsup", + "test": "vitest run --passWithNoTests", + "lint": "prettier src/**/*.ts --check" + }, + "dependencies": { + "@metorial/rpc": "^1.0.0" + }, + "devDependencies": { + "@metorial/api-custom-portal": "workspace:*", + "@metorial/tsconfig": "^1.0.0", + "tsup": "^8.5.1", + "typescript": "5.8.2", + "vitest": "^3.1.2" + } +} diff --git a/clients/metorial-custom-portal/src/index.ts b/clients/metorial-custom-portal/src/index.ts new file mode 100644 index 000000000..cd9ed677e --- /dev/null +++ b/clients/metorial-custom-portal/src/index.ts @@ -0,0 +1,12 @@ +import { createClient } from '@metorial/rpc/client'; +import type { CustomPortalClient } from '../../../src/backend/apis/custom-portal/src'; + +type ClientOpts = Parameters>[0]; + +export let createCustomPortalClient = (endpoint: string) => + createClient({ + endpoint, + referrerPolicy: 'unsafe-url' + }); + +export type { CustomPortalClient }; diff --git a/clients/metorial-custom-portal/tsconfig.dts.json b/clients/metorial-custom-portal/tsconfig.dts.json new file mode 100644 index 000000000..985e9cd22 --- /dev/null +++ b/clients/metorial-custom-portal/tsconfig.dts.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", + "compilerOptions": { + "skipLibCheck": true, + "noEmit": true, + "skipDefaultLibCheck": true, + "types": [] + }, + "exclude": ["dist", "node_modules", "../../node_modules/bun-types"] +} diff --git a/clients/metorial-custom-portal/tsconfig.json b/clients/metorial-custom-portal/tsconfig.json new file mode 100644 index 000000000..669dc354e --- /dev/null +++ b/clients/metorial-custom-portal/tsconfig.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "include": ["src"], + "compilerOptions": { + "outDir": "dist", + "composite": false, + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "inlineSources": false, + "isolatedModules": true, + "moduleResolution": "node", + "module": "esnext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "target": "ESNext", + "noUnusedLocals": false, + "noUnusedParameters": false, + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true, + "downlevelIteration": true, + "resolveJsonModule": true + }, + "exclude": ["dist", "node_modules"] +} diff --git a/clients/metorial-custom-portal/tsup.config.ts b/clients/metorial-custom-portal/tsup.config.ts new file mode 100644 index 000000000..f4e82f33b --- /dev/null +++ b/clients/metorial-custom-portal/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + format: ['cjs', 'esm'], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + outDir: 'dist' +}); diff --git a/src/backend/apis/custom-portal/client.ts b/src/backend/apis/custom-portal/client.ts deleted file mode 100644 index d4ebe5be6..000000000 --- a/src/backend/apis/custom-portal/client.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createClient } from '@metorial/rpc/client'; -import type { CustomPortalClient } from './src'; - -export let createCustomPortalClient = (endpoint: string) => { - return createClient({ - endpoint, - referrerPolicy: 'unsafe-url' - }); -}; - -export type { CustomPortalClient }; diff --git a/src/backend/apis/custom-portal/src/lib/portal.ts b/src/backend/apis/custom-portal/src/lib/portal.ts index 402748213..f86106d13 100644 --- a/src/backend/apis/custom-portal/src/lib/portal.ts +++ b/src/backend/apis/custom-portal/src/lib/portal.ts @@ -12,6 +12,7 @@ import { portalService } from '@metorial/module-consumer'; import type { ServiceRequest } from '@metorial/rpc'; +import type { PortalTokenSession, PortalWithSurface } from '../types/portal'; import { clearPortalSessionCookie, getAuthStateCookieName, @@ -19,11 +20,6 @@ import { setPortalSessionCookie } from './cookies'; -type PortalWithSurface = Awaited>; -type PortalTokenSession = Parameters< - typeof consumerAuthService.getConsumerToken ->[0]['session']; - export let getPortalPublishableApiKey = (d: { portal: PortalWithSurface }) => { let secret = d.portal.surface.publishableApiKey.secrets.find(apiKeySecret => !apiKeySecret.rolledAt) ?? @@ -56,7 +52,9 @@ export let getPortalSsoAuthorizationCodeOrThrow = (d: { code?: string | null }) ); }; -export let resolvePortalFromUrl = async (d: { url: string }) => { +export let resolvePortalFromUrl = async (d: { + url: string; +}): Promise<{ portal: PortalWithSurface; portalUrl: string }> => { let parsed = await portalService.parsePortalIdFromHost({ url: d.url }); @@ -72,7 +70,9 @@ export let resolvePortalFromUrl = async (d: { url: string }) => { }; }; -export let resolvePortalFromId = async (d: { portalId?: string | null }) => { +export let resolvePortalFromId = async (d: { + portalId?: string | null; +}): Promise<{ portal: PortalWithSurface; portalUrl: string }> => { if (!d.portalId) { throw new ServiceError(notFoundError('portal')); } diff --git a/src/backend/apis/custom-portal/src/presenters/instance.ts b/src/backend/apis/custom-portal/src/presenters/instance.ts index 42c4a8ce8..62a906e4b 100644 --- a/src/backend/apis/custom-portal/src/presenters/instance.ts +++ b/src/backend/apis/custom-portal/src/presenters/instance.ts @@ -1,6 +1,4 @@ -import { portalService } from '@metorial/module-consumer'; - -type PortalWithSurface = Awaited>; +import type { PortalWithSurface } from '../types/portal'; export let instancePresenter = (d: { portal: PortalWithSurface }) => ({ object: 'organization.instance' as const, diff --git a/src/backend/apis/custom-portal/src/presenters/portal.ts b/src/backend/apis/custom-portal/src/presenters/portal.ts index 8c955bad6..ac6179695 100644 --- a/src/backend/apis/custom-portal/src/presenters/portal.ts +++ b/src/backend/apis/custom-portal/src/presenters/portal.ts @@ -1,6 +1,4 @@ -import { portalService } from '@metorial/module-consumer'; - -type PortalWithSurface = Awaited>; +import type { PortalWithSurface } from '../types/portal'; export let portalPresenter = async (d: { portal: PortalWithSurface }) => ({ object: 'portal' as const, diff --git a/src/backend/apis/custom-portal/src/types/portal.ts b/src/backend/apis/custom-portal/src/types/portal.ts new file mode 100644 index 000000000..7ecbcf05c --- /dev/null +++ b/src/backend/apis/custom-portal/src/types/portal.ts @@ -0,0 +1,30 @@ +import type { Prisma } from '@metorial/db'; + +export let portalWithSurfaceInclude = { + surface: { + include: { + consumerAuthTenant: true, + publishableApiKey: { + include: { + secrets: true + } + } + } + }, + organization: true, + instance: { + include: { + project: true, + organization: true + } + } +} as const; + +export type PortalWithSurface = Prisma.PortalGetPayload<{ + include: typeof portalWithSurfaceInclude; +}>; + +export type PortalTokenSession = { + id: string; + expiresAt: Date; +}; diff --git a/src/frontend/apps/dashboard/src/slices/product/scenes/providerDeployments/setupSessionEmbed/types.ts b/src/frontend/apps/dashboard/src/slices/product/scenes/providerDeployments/setupSessionEmbed/types.ts index 419ee5f1e..6085ee2f1 100644 --- a/src/frontend/apps/dashboard/src/slices/product/scenes/providerDeployments/setupSessionEmbed/types.ts +++ b/src/frontend/apps/dashboard/src/slices/product/scenes/providerDeployments/setupSessionEmbed/types.ts @@ -2,7 +2,7 @@ import type { DashboardInstanceProviderDeploymentsSetupSessionsCreateOutput, DashboardInstanceProviderDeploymentsSetupSessionsGetOutput, DashboardInstanceProvidersAuthMethodsListOutput -} from '@metorial/state'; +} from '@metorial/dashboard-sdk'; export type AuthMethod = DashboardInstanceProvidersAuthMethodsListOutput['items'][number]; export type CredentialsMode = 'existing' | 'new'; diff --git a/src/frontend/layout/src/applicationLayout/switcher/actions/createInstance.tsx b/src/frontend/layout/src/applicationLayout/switcher/actions/createInstance.tsx index 5cc0ec5f4..596f601dd 100644 --- a/src/frontend/layout/src/applicationLayout/switcher/actions/createInstance.tsx +++ b/src/frontend/layout/src/applicationLayout/switcher/actions/createInstance.tsx @@ -1,5 +1,6 @@ import { useForm } from '@metorial/data-hooks'; -import { MetorialInstance, MetorialProject, useInstance, useInstances } from '@metorial/state'; +import type { MetorialInstance, MetorialProject } from '@metorial/dashboard-sdk'; +import { useInstance, useInstances } from '@metorial/state'; import { Button, Dialog, Input, Select, showModal, Spacer } from '@metorial/ui'; import React from 'react'; diff --git a/src/frontend/layout/src/applicationLayout/switcher/actions/createProject.tsx b/src/frontend/layout/src/applicationLayout/switcher/actions/createProject.tsx index c69394ab6..6b9a36ded 100644 --- a/src/frontend/layout/src/applicationLayout/switcher/actions/createProject.tsx +++ b/src/frontend/layout/src/applicationLayout/switcher/actions/createProject.tsx @@ -1,11 +1,7 @@ import { useForm } from '@metorial/data-hooks'; import { Paths } from '@metorial/frontend-config'; -import { - MetorialOrganization, - MetorialProject, - useProject, - useProjects -} from '@metorial/state'; +import type { MetorialOrganization, MetorialProject } from '@metorial/dashboard-sdk'; +import { useProject, useProjects } from '@metorial/state'; import { Button, Dialog, Input, showModal, Spacer } from '@metorial/ui'; import React from 'react'; diff --git a/src/frontend/layout/src/applicationLayout/switcher/switcherHorizontal.tsx b/src/frontend/layout/src/applicationLayout/switcher/switcherHorizontal.tsx index 503b14ba6..03c517d6b 100644 --- a/src/frontend/layout/src/applicationLayout/switcher/switcherHorizontal.tsx +++ b/src/frontend/layout/src/applicationLayout/switcher/switcherHorizontal.tsx @@ -1,10 +1,6 @@ import { Paths } from '@metorial/frontend-config'; -import { - MetorialOrganization, - MetorialProject, - useBoot, - useCurrentOrganization -} from '@metorial/state'; +import type { MetorialOrganization, MetorialProject } from '@metorial/dashboard-sdk'; +import { useBoot, useCurrentOrganization } from '@metorial/state'; import { Avatar, LinkButton, Logo, Text, theme } from '@metorial/ui'; import * as Popover from '@radix-ui/react-popover'; import { RiArrowRightSLine } from '@remixicon/react'; diff --git a/src/frontend/state/src/index.ts b/src/frontend/state/src/index.ts index 651179ecf..58c1d817d 100644 --- a/src/frontend/state/src/index.ts +++ b/src/frontend/state/src/index.ts @@ -1,4 +1,3 @@ -export type * from '@metorial/dashboard-sdk'; export type { MetorialEnterpriseWindow } from './types/metorialEnterpriseWindow'; export { setConsumerSetup, withDashboardSDK, requireConsumerSetup } from './sdk'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/_error/routerError.tsx b/src/systems/ares/service/frontend/admin/src/pages/_error/routerError.tsx index edc487dff..11b336b48 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/_error/routerError.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/_error/routerError.tsx @@ -1,4 +1,4 @@ -import { ErrorPage, NotFound } from '@metorial-io/pages'; +import { ErrorPage, NotFound } from '@metorial/pages'; import { useRouteError } from 'react-router-dom'; export let RouterErrorPage = () => { diff --git a/src/systems/ares/service/frontend/admin/src/pages/_error/serviceError.tsx b/src/systems/ares/service/frontend/admin/src/pages/_error/serviceError.tsx index f89016217..f42349f8d 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/_error/serviceError.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/_error/serviceError.tsx @@ -1,5 +1,5 @@ import { ServiceError } from '@mtsrc/error'; -import { ErrorPage, NotFound } from '@metorial-io/pages'; +import { ErrorPage, NotFound } from '@metorial/pages'; export let ServiceErrorPage = ({ error }: { error: ServiceError }) => { if (error.data.status == 404) return ; diff --git a/src/systems/ares/service/frontend/admin/src/pages/_layout.tsx b/src/systems/ares/service/frontend/admin/src/pages/_layout.tsx index 01e609d4f..7a6cb4ee5 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/_layout.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/_layout.tsx @@ -1,5 +1,5 @@ -import { ExtraHeaderLayout, LargePaneLayout, SidebarPane } from '@metorial-io/layout'; -import { Logo, ModalRoot, Toaster } from '@metorial-io/ui'; +import { ExtraHeaderLayout, LargePaneLayout, SidebarPane } from '@metorial/layout'; +import { Logo, ModalRoot, Toaster } from '@metorial/ui'; import { RiApps2Line, RiFileListLine, RiGroupLine, RiSettings3Line, RiShieldUserLine, RiUserLine } from '@remixicon/react'; import { Outlet, useLocation } from 'react-router-dom'; import styled from 'styled-components'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/admin/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/admin/page.tsx index 39e18b5b3..a61700af2 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/admin/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/admin/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Button, Input } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Button, Input } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useState } from 'react'; import { adminsState } from '../../state'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/accessGroups/[accessGroupId]/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/accessGroups/[accessGroupId]/page.tsx index 9100e54ae..e8e3b4a1a 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/accessGroups/[accessGroupId]/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/accessGroups/[accessGroupId]/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader, useForm, useMutation } from '@metorial-io/data-hooks'; -import { Button, Dialog, Input, Select, showModal, Spacer, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader, useForm, useMutation } from '@metorial/data-hooks'; +import { Button, Dialog, Input, Select, showModal, Spacer, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { Link, useParams } from 'react-router-dom'; import { accessGroupState } from '../../../../../state'; import { adminClient } from '../../../../../state/client'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/accessGroups/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/accessGroups/page.tsx index cc8992671..9fb22c370 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/accessGroups/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/accessGroups/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader, useForm, useMutation } from '@metorial-io/data-hooks'; -import { Button, Dialog, Input, showModal, Spacer, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader, useForm, useMutation } from '@metorial/data-hooks'; +import { Button, Dialog, Input, showModal, Spacer, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { Link, useParams } from 'react-router-dom'; import { accessGroupsState } from '../../../../state'; import { adminClient } from '../../../../state/client'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/page.tsx index e6bba96f6..1518d0a98 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/page.tsx @@ -1,4 +1,4 @@ -import { renderWithLoader, useForm, useMutation } from '@metorial-io/data-hooks'; +import { renderWithLoader, useForm, useMutation } from '@metorial/data-hooks'; import { Badge, Button, @@ -11,8 +11,8 @@ import { Spacer, Text, Title -} from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +} from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { Link, useParams } from 'react-router-dom'; import { accessGroupsState, diff --git a/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/sso/[ssoTenantId]/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/sso/[ssoTenantId]/page.tsx index 7df9157c2..fd4fd1fa2 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/sso/[ssoTenantId]/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/apps/[appId]/sso/[ssoTenantId]/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader, useMutation } from '@metorial-io/data-hooks'; -import { Button, Datalist, Spacer, Switch, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader, useMutation } from '@metorial/data-hooks'; +import { Button, Datalist, Spacer, Switch, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useParams } from 'react-router-dom'; import { ssoConnectionsState, ssoTenantState } from '../../../../../state'; import { adminClient } from '../../../../../state/client'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/apps/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/apps/page.tsx index 5cfd0f647..d342c6829 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/apps/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/apps/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader, useForm, useMutation } from '@metorial-io/data-hooks'; -import { Button, Checkbox, Dialog, Input, showModal, Spacer } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader, useForm, useMutation } from '@metorial/data-hooks'; +import { Button, Checkbox, Dialog, Input, showModal, Spacer } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { appsState } from '../../state'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/auditLogs/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/auditLogs/page.tsx index 3e372c192..3fe1a5321 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/auditLogs/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/auditLogs/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Button, Select } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Button, Select } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useEffect, useState } from 'react'; import { appsState, auditLogsState } from '../../state'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/auth/callback.tsx b/src/systems/ares/service/frontend/admin/src/pages/auth/callback.tsx index abd6546bc..3a5b1ef10 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/auth/callback.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/auth/callback.tsx @@ -1,4 +1,4 @@ -import { useMutation } from '@metorial-io/data-hooks'; +import { useMutation } from '@metorial/data-hooks'; import { useEffect, useState } from 'react'; import { adminClient } from '../../state/client'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/settings/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/settings/page.tsx index 5c87ad645..d1d5e3e1d 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/settings/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/settings/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Badge, Button, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Badge, Button, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { globalSsoTenantsState } from '../../state'; export let SettingsPage = () => { diff --git a/src/systems/ares/service/frontend/admin/src/pages/tenants/[tenantId]/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/tenants/[tenantId]/page.tsx index b118a30ca..3e6b9717a 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/tenants/[tenantId]/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/tenants/[tenantId]/page.tsx @@ -1,5 +1,5 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Datalist, Title } from '@metorial-io/ui'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Datalist, Title } from '@metorial/ui'; import { useParams } from 'react-router-dom'; import { tenantState } from '../../../state'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/tenants/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/tenants/page.tsx index 449a74cd8..c9f9532d0 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/tenants/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/tenants/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Button, Input } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Button, Input } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useEffect, useState } from 'react'; import { appsState, tenantsState } from '../../state'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/users/[userId]/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/users/[userId]/page.tsx index 0bc456049..d344a16c5 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/users/[userId]/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/users/[userId]/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Datalist, Spacer, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Datalist, Spacer, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useParams } from 'react-router-dom'; import { userState } from '../../../state'; diff --git a/src/systems/ares/service/frontend/admin/src/pages/users/page.tsx b/src/systems/ares/service/frontend/admin/src/pages/users/page.tsx index 96bf5c163..49e160dd5 100644 --- a/src/systems/ares/service/frontend/admin/src/pages/users/page.tsx +++ b/src/systems/ares/service/frontend/admin/src/pages/users/page.tsx @@ -1,6 +1,6 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Button, Input } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Button, Input } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useEffect, useState } from 'react'; import { appsState, usersState } from '../../state'; diff --git a/src/systems/ares/service/frontend/admin/src/router.tsx b/src/systems/ares/service/frontend/admin/src/router.tsx index 980f45caf..13ecfb5e7 100644 --- a/src/systems/ares/service/frontend/admin/src/router.tsx +++ b/src/systems/ares/service/frontend/admin/src/router.tsx @@ -1,4 +1,4 @@ -import { ModalRoot, Toaster } from '@metorial-io/ui'; +import { ModalRoot, Toaster } from '@metorial/ui'; import { createBrowserRouter, Navigate, RouterProvider } from 'react-router-dom'; import { Layout } from './pages/_layout'; import { RouterErrorPage } from './pages/_error/routerError'; diff --git a/src/systems/ares/service/frontend/admin/src/state/index.ts b/src/systems/ares/service/frontend/admin/src/state/index.ts index fadf0488d..bdb078d52 100644 --- a/src/systems/ares/service/frontend/admin/src/state/index.ts +++ b/src/systems/ares/service/frontend/admin/src/state/index.ts @@ -1,5 +1,5 @@ import { isServiceError } from '@mtsrc/error'; -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { adminClient } from './client'; let redirectToAuthIfNotAuthenticated = async (fn: () => Promise) => { diff --git a/src/systems/ares/service/frontend/auth/src/components/layout.tsx b/src/systems/ares/service/frontend/auth/src/components/layout.tsx index 3b321e746..2f569bc52 100644 --- a/src/systems/ares/service/frontend/auth/src/components/layout.tsx +++ b/src/systems/ares/service/frontend/auth/src/components/layout.tsx @@ -1,4 +1,4 @@ -import { Logo, Text, theme, Title } from '@metorial-io/ui'; +import { Logo, Text, theme, Title } from '@metorial/ui'; import React from 'react'; import { styled } from 'styled-components'; diff --git a/src/systems/ares/service/frontend/auth/src/pages/_error/routerError.tsx b/src/systems/ares/service/frontend/auth/src/pages/_error/routerError.tsx index edc487dff..11b336b48 100644 --- a/src/systems/ares/service/frontend/auth/src/pages/_error/routerError.tsx +++ b/src/systems/ares/service/frontend/auth/src/pages/_error/routerError.tsx @@ -1,4 +1,4 @@ -import { ErrorPage, NotFound } from '@metorial-io/pages'; +import { ErrorPage, NotFound } from '@metorial/pages'; import { useRouteError } from 'react-router-dom'; export let RouterErrorPage = () => { diff --git a/src/systems/ares/service/frontend/auth/src/pages/_error/serviceError.tsx b/src/systems/ares/service/frontend/auth/src/pages/_error/serviceError.tsx index f89016217..f42349f8d 100644 --- a/src/systems/ares/service/frontend/auth/src/pages/_error/serviceError.tsx +++ b/src/systems/ares/service/frontend/auth/src/pages/_error/serviceError.tsx @@ -1,5 +1,5 @@ import { ServiceError } from '@mtsrc/error'; -import { ErrorPage, NotFound } from '@metorial-io/pages'; +import { ErrorPage, NotFound } from '@metorial/pages'; export let ServiceErrorPage = ({ error }: { error: ServiceError }) => { if (error.data.status == 404) return ; diff --git a/src/systems/ares/service/frontend/auth/src/pages/internal.tsx b/src/systems/ares/service/frontend/auth/src/pages/internal.tsx index be501d05b..7e0df3495 100644 --- a/src/systems/ares/service/frontend/auth/src/pages/internal.tsx +++ b/src/systems/ares/service/frontend/auth/src/pages/internal.tsx @@ -1,5 +1,5 @@ -import { useMutation } from '@metorial-io/data-hooks'; -import { Error } from '@metorial-io/ui'; +import { useMutation } from '@metorial/data-hooks'; +import { Error } from '@metorial/ui'; import { useEffect, useRef } from 'react'; import { useSearchParams } from 'react-router-dom'; import { AuthLayout } from '../components/layout'; diff --git a/src/systems/ares/service/frontend/auth/src/router.tsx b/src/systems/ares/service/frontend/auth/src/router.tsx index f6150d8bb..2c917603a 100644 --- a/src/systems/ares/service/frontend/auth/src/router.tsx +++ b/src/systems/ares/service/frontend/auth/src/router.tsx @@ -1,4 +1,4 @@ -import { ModalRoot, Toaster } from '@metorial-io/ui'; +import { ModalRoot, Toaster } from '@metorial/ui'; import { useEffect, useRef } from 'react'; import { createBrowserRouter, Outlet, RouterProvider } from 'react-router-dom'; import { RouterErrorPage } from './pages/_error/routerError'; diff --git a/src/systems/ares/service/frontend/auth/src/scenes/auth.tsx b/src/systems/ares/service/frontend/auth/src/scenes/auth.tsx index 313a10f4e..768a20116 100644 --- a/src/systems/ares/service/frontend/auth/src/scenes/auth.tsx +++ b/src/systems/ares/service/frontend/auth/src/scenes/auth.tsx @@ -1,4 +1,4 @@ -import { Error } from '@metorial-io/ui'; +import { Error } from '@metorial/ui'; import { useState } from 'react'; import { useSearchParams } from 'react-router-dom'; import { AuthLayout } from '../components/layout'; diff --git a/src/systems/ares/service/frontend/auth/src/scenes/authHome.tsx b/src/systems/ares/service/frontend/auth/src/scenes/authHome.tsx index cbdc3eaec..3ce14343b 100644 --- a/src/systems/ares/service/frontend/auth/src/scenes/authHome.tsx +++ b/src/systems/ares/service/frontend/auth/src/scenes/authHome.tsx @@ -1,7 +1,7 @@ import { useInterval } from '@looped/hooks'; import { delay } from '@mtsrc/delay'; import { Turnstile } from '@marsidev/react-turnstile'; -import { useForm, useMutation } from '@metorial-io/data-hooks'; +import { useForm, useMutation } from '@metorial/data-hooks'; import { Avatar, Button, @@ -12,7 +12,7 @@ import { Or, Spacer, Text -} from '@metorial-io/ui'; +} from '@metorial/ui'; import { Fragment, useEffect, useRef, useState } from 'react'; import { Link } from 'react-router-dom'; import { GithubLogo } from '../components/github'; diff --git a/src/systems/ares/service/frontend/auth/src/scenes/authIntent.tsx b/src/systems/ares/service/frontend/auth/src/scenes/authIntent.tsx index f3c8ef797..cc6c73112 100644 --- a/src/systems/ares/service/frontend/auth/src/scenes/authIntent.tsx +++ b/src/systems/ares/service/frontend/auth/src/scenes/authIntent.tsx @@ -1,6 +1,6 @@ import { useInterval } from '@looped/hooks'; import { Turnstile } from '@marsidev/react-turnstile'; -import { useForm, useMutation } from '@metorial-io/data-hooks'; +import { useForm, useMutation } from '@metorial/data-hooks'; import { Button, CenteredSpinner, @@ -10,7 +10,7 @@ import { Spacer, Switch, Text -} from '@metorial-io/ui'; +} from '@metorial/ui'; import { differenceInMinutes } from 'date-fns'; import { useEffect, useMemo, useRef, useState } from 'react'; import { useNavigate } from 'react-router-dom'; diff --git a/src/systems/ares/service/frontend/auth/src/state/auth.ts b/src/systems/ares/service/frontend/auth/src/state/auth.ts index ae596e5fe..c63684dbb 100644 --- a/src/systems/ares/service/frontend/auth/src/state/auth.ts +++ b/src/systems/ares/service/frontend/auth/src/state/auth.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { authIntentState } from './authIntent'; import { authClient } from './client'; diff --git a/src/systems/ares/service/frontend/auth/src/state/authIntent.ts b/src/systems/ares/service/frontend/auth/src/state/authIntent.ts index 1614b9758..1802cbd8d 100644 --- a/src/systems/ares/service/frontend/auth/src/state/authIntent.ts +++ b/src/systems/ares/service/frontend/auth/src/state/authIntent.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { authClient } from './client'; export let authIntentState = createLoader({ diff --git a/src/systems/ares/service/package.json b/src/systems/ares/service/package.json index d9cff73e6..a7c6aba32 100644 --- a/src/systems/ares/service/package.json +++ b/src/systems/ares/service/package.json @@ -45,11 +45,11 @@ "@boxyhq/saml-jackson": "^1.52.2", "@looped/hooks": "^0.1.3", "@marsidev/react-turnstile": "^1.4.2", - "@metorial-io/data-hooks": "^1.0.1", - "@metorial-io/layout": "^1.0.1", - "@metorial-io/pages": "^1.0.0", - "@metorial-io/ui": "^1.0.0", - "@metorial-io/ui-product": "^1.0.0", + "@metorial/data-hooks": "workspace:*", + "@metorial/layout": "workspace:*", + "@metorial/pages": "workspace:*", + "@metorial/ui": "workspace:*", + "@metorial/ui-product": "workspace:*", "@metorial-platform-systems/relay-client": "workspace:*", "@prisma/adapter-pg": "7.4.2", "@prisma/client": "7.4.2", diff --git a/src/systems/slates/apps/hub/admin/src/components/BackLink.tsx b/src/systems/slates/apps/hub/admin/src/components/BackLink.tsx index ea5e3f645..efb3af87e 100644 --- a/src/systems/slates/apps/hub/admin/src/components/BackLink.tsx +++ b/src/systems/slates/apps/hub/admin/src/components/BackLink.tsx @@ -1,4 +1,4 @@ -import { Button } from '@metorial-io/ui'; +import { Button } from '@metorial/ui'; import { RiArrowLeftLine } from '@remixicon/react'; import { Link } from 'react-router-dom'; diff --git a/src/systems/slates/apps/hub/admin/src/components/Layout.tsx b/src/systems/slates/apps/hub/admin/src/components/Layout.tsx index 72bb6c735..5d400d1d6 100644 --- a/src/systems/slates/apps/hub/admin/src/components/Layout.tsx +++ b/src/systems/slates/apps/hub/admin/src/components/Layout.tsx @@ -3,8 +3,8 @@ import { ExtraHeaderLayout, LargePaneLayout, SidebarPane -} from '@metorial-io/layout'; -import { Logo } from '@metorial-io/ui'; +} from '@metorial/layout'; +import { Logo } from '@metorial/ui'; import { RiFileList3Line, RiRocketLine, RiSearchEyeLine, RiTimeLine } from '@remixicon/react'; import { Outlet, useLocation, useParams } from 'react-router-dom'; import styled from 'styled-components'; diff --git a/src/systems/slates/apps/hub/admin/src/components/SpecificationViewer.tsx b/src/systems/slates/apps/hub/admin/src/components/SpecificationViewer.tsx index 6e7ffedd5..e0842dbc8 100644 --- a/src/systems/slates/apps/hub/admin/src/components/SpecificationViewer.tsx +++ b/src/systems/slates/apps/hub/admin/src/components/SpecificationViewer.tsx @@ -7,7 +7,7 @@ import { Group, Tabs, Text -} from '@metorial-io/ui'; +} from '@metorial/ui'; import { useState } from 'react'; import { useDiscoverySpecification } from '../state/discoveries.js'; import { MonoCode } from './styled'; diff --git a/src/systems/slates/apps/hub/admin/src/components/styled.ts b/src/systems/slates/apps/hub/admin/src/components/styled.ts index b88bcf59a..d3090cd14 100644 --- a/src/systems/slates/apps/hub/admin/src/components/styled.ts +++ b/src/systems/slates/apps/hub/admin/src/components/styled.ts @@ -1,4 +1,4 @@ -import { Flex } from '@metorial-io/ui'; +import { Flex } from '@metorial/ui'; import { Link } from 'react-router-dom'; import { styled } from 'styled-components'; diff --git a/src/systems/slates/apps/hub/admin/src/main.tsx b/src/systems/slates/apps/hub/admin/src/main.tsx index d51b107ab..daa682ea4 100644 --- a/src/systems/slates/apps/hub/admin/src/main.tsx +++ b/src/systems/slates/apps/hub/admin/src/main.tsx @@ -1,4 +1,4 @@ -import { Toaster } from '@metorial-io/ui'; +import { Toaster } from '@metorial/ui'; import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; diff --git a/src/systems/slates/apps/hub/admin/src/pages/deployments/DeploymentDetail.tsx b/src/systems/slates/apps/hub/admin/src/pages/deployments/DeploymentDetail.tsx index 52cf4ae4c..9b6d54ed3 100644 --- a/src/systems/slates/apps/hub/admin/src/pages/deployments/DeploymentDetail.tsx +++ b/src/systems/slates/apps/hub/admin/src/pages/deployments/DeploymentDetail.tsx @@ -1,4 +1,4 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; +import { renderWithLoader } from '@metorial/data-hooks'; import { Badge, Button, @@ -8,7 +8,7 @@ import { InlineCopy, RenderDate, Text -} from '@metorial-io/ui'; +} from '@metorial/ui'; import { useState } from 'react'; import { Link, useParams } from 'react-router-dom'; import { deploymentStatusColors } from '../../constants/statusColors.js'; diff --git a/src/systems/slates/apps/hub/admin/src/pages/deployments/DeploymentList.tsx b/src/systems/slates/apps/hub/admin/src/pages/deployments/DeploymentList.tsx index 162ae877b..72c6e431a 100644 --- a/src/systems/slates/apps/hub/admin/src/pages/deployments/DeploymentList.tsx +++ b/src/systems/slates/apps/hub/admin/src/pages/deployments/DeploymentList.tsx @@ -1,6 +1,6 @@ -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Badge, Flex, Group, RenderDate, Spacer, Text, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Badge, Flex, Group, RenderDate, Spacer, Text, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useState } from 'react'; import { useParams } from 'react-router-dom'; import { BackLink } from '../../components/BackLink.js'; diff --git a/src/systems/slates/apps/hub/admin/src/pages/discoveries/DiscoveryDetail.tsx b/src/systems/slates/apps/hub/admin/src/pages/discoveries/DiscoveryDetail.tsx index bb631bcb0..a02b774cc 100644 --- a/src/systems/slates/apps/hub/admin/src/pages/discoveries/DiscoveryDetail.tsx +++ b/src/systems/slates/apps/hub/admin/src/pages/discoveries/DiscoveryDetail.tsx @@ -1,4 +1,4 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; +import { renderWithLoader } from '@metorial/data-hooks'; import { Badge, Datalist, @@ -7,7 +7,7 @@ import { InlineCopy, RenderDate, Text -} from '@metorial-io/ui'; +} from '@metorial/ui'; import { useParams } from 'react-router-dom'; import { discoveryStatusColors } from '../../constants/statusColors.js'; import { diff --git a/src/systems/slates/apps/hub/admin/src/pages/discoveries/DiscoveryList.tsx b/src/systems/slates/apps/hub/admin/src/pages/discoveries/DiscoveryList.tsx index 38154e9b8..cc21d7784 100644 --- a/src/systems/slates/apps/hub/admin/src/pages/discoveries/DiscoveryList.tsx +++ b/src/systems/slates/apps/hub/admin/src/pages/discoveries/DiscoveryList.tsx @@ -1,6 +1,6 @@ -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Badge, Flex, Group, RenderDate, Spacer, Text, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Badge, Flex, Group, RenderDate, Spacer, Text, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useState } from 'react'; import { useParams } from 'react-router-dom'; import { BackLink } from '../../components/BackLink.js'; diff --git a/src/systems/slates/apps/hub/admin/src/pages/events/EventList.tsx b/src/systems/slates/apps/hub/admin/src/pages/events/EventList.tsx index 94fabcaed..71bb88356 100644 --- a/src/systems/slates/apps/hub/admin/src/pages/events/EventList.tsx +++ b/src/systems/slates/apps/hub/admin/src/pages/events/EventList.tsx @@ -1,6 +1,6 @@ -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Badge, Flex, Group, RenderDate, Spacer, Text, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Badge, Flex, Group, RenderDate, Spacer, Text, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useState } from 'react'; import { useParams } from 'react-router-dom'; import { BackLink } from '../../components/BackLink.js'; diff --git a/src/systems/slates/apps/hub/admin/src/pages/slates/SlateDetail.tsx b/src/systems/slates/apps/hub/admin/src/pages/slates/SlateDetail.tsx index 144d33a82..33784dd4a 100644 --- a/src/systems/slates/apps/hub/admin/src/pages/slates/SlateDetail.tsx +++ b/src/systems/slates/apps/hub/admin/src/pages/slates/SlateDetail.tsx @@ -1,5 +1,5 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Badge, Datalist, Flex, Group, InlineCopy, RenderDate, Text } from '@metorial-io/ui'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Badge, Datalist, Flex, Group, InlineCopy, RenderDate, Text } from '@metorial/ui'; import { Link, useParams } from 'react-router-dom'; import { styled } from 'styled-components'; import { diff --git a/src/systems/slates/apps/hub/admin/src/pages/slates/SlateList.tsx b/src/systems/slates/apps/hub/admin/src/pages/slates/SlateList.tsx index 386f3ac8d..0b56bdf08 100644 --- a/src/systems/slates/apps/hub/admin/src/pages/slates/SlateList.tsx +++ b/src/systems/slates/apps/hub/admin/src/pages/slates/SlateList.tsx @@ -1,6 +1,6 @@ -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Badge, Flex, Group, Input, Spacer, Text, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Badge, Flex, Group, Input, Spacer, Text, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useEffect, useState } from 'react'; import { styled } from 'styled-components'; import { EmptyState, SlateLogoPlaceholder } from '../../components/styled.js'; diff --git a/src/systems/slates/apps/hub/admin/src/pages/versions/VersionDetail.tsx b/src/systems/slates/apps/hub/admin/src/pages/versions/VersionDetail.tsx index 699a44d8b..cb9373327 100644 --- a/src/systems/slates/apps/hub/admin/src/pages/versions/VersionDetail.tsx +++ b/src/systems/slates/apps/hub/admin/src/pages/versions/VersionDetail.tsx @@ -1,5 +1,5 @@ -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Badge, Button, Datalist, Flex, Group, InlineCopy, Text } from '@metorial-io/ui'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Badge, Button, Datalist, Flex, Group, InlineCopy, Text } from '@metorial/ui'; import { Link, useParams } from 'react-router-dom'; import { deploymentStatusColors, versionStatusColors } from '../../constants/statusColors.js'; import { diff --git a/src/systems/slates/apps/hub/admin/src/pages/versions/VersionList.tsx b/src/systems/slates/apps/hub/admin/src/pages/versions/VersionList.tsx index 34cc44e54..115cbe3c0 100644 --- a/src/systems/slates/apps/hub/admin/src/pages/versions/VersionList.tsx +++ b/src/systems/slates/apps/hub/admin/src/pages/versions/VersionList.tsx @@ -1,6 +1,6 @@ -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Badge, Flex, Group, RenderDate, Spacer, Text, Title } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Badge, Flex, Group, RenderDate, Spacer, Text, Title } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useParams } from 'react-router-dom'; import { BackLink } from '../../components/BackLink.js'; import { EmptyState } from '../../components/styled.js'; diff --git a/src/systems/slates/apps/hub/admin/src/state/deployments.ts b/src/systems/slates/apps/hub/admin/src/state/deployments.ts index 0e285bd2b..56abe4ede 100644 --- a/src/systems/slates/apps/hub/admin/src/state/deployments.ts +++ b/src/systems/slates/apps/hub/admin/src/state/deployments.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { adminClient, withAuthRedirect } from '../hooks/client.js'; import { usePaginatedLoader } from './usePaginatedLoader.js'; diff --git a/src/systems/slates/apps/hub/admin/src/state/discoveries.ts b/src/systems/slates/apps/hub/admin/src/state/discoveries.ts index a81d283e5..fa5abc10c 100644 --- a/src/systems/slates/apps/hub/admin/src/state/discoveries.ts +++ b/src/systems/slates/apps/hub/admin/src/state/discoveries.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { adminClient, withAuthRedirect } from '../hooks/client.js'; import { usePaginatedLoader } from './usePaginatedLoader.js'; diff --git a/src/systems/slates/apps/hub/admin/src/state/events.ts b/src/systems/slates/apps/hub/admin/src/state/events.ts index 9633f1228..339dab36a 100644 --- a/src/systems/slates/apps/hub/admin/src/state/events.ts +++ b/src/systems/slates/apps/hub/admin/src/state/events.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { adminClient, withAuthRedirect } from '../hooks/client.js'; import { usePaginatedLoader } from './usePaginatedLoader.js'; diff --git a/src/systems/slates/apps/hub/admin/src/state/slates.ts b/src/systems/slates/apps/hub/admin/src/state/slates.ts index 7b4616495..70bf57f82 100644 --- a/src/systems/slates/apps/hub/admin/src/state/slates.ts +++ b/src/systems/slates/apps/hub/admin/src/state/slates.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { adminClient, withAuthRedirect } from '../hooks/client.js'; import { usePaginatedLoader } from './usePaginatedLoader.js'; diff --git a/src/systems/slates/apps/hub/admin/src/state/versions.ts b/src/systems/slates/apps/hub/admin/src/state/versions.ts index 1e7da2295..665e51a35 100644 --- a/src/systems/slates/apps/hub/admin/src/state/versions.ts +++ b/src/systems/slates/apps/hub/admin/src/state/versions.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { adminClient, withAuthRedirect } from '../hooks/client.js'; import { slateLoader } from './slates.js'; import { usePaginatedLoader } from './usePaginatedLoader.js'; diff --git a/src/systems/slates/apps/hub/package.json b/src/systems/slates/apps/hub/package.json index 3507aa404..0d66ecbce 100644 --- a/src/systems/slates/apps/hub/package.json +++ b/src/systems/slates/apps/hub/package.json @@ -48,10 +48,10 @@ "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", "@hono/zod-validator": "^0.7.6", - "@metorial-io/data-hooks": "^1.0.1", - "@metorial-io/layout": "^1.0.1", - "@metorial-io/ui": "^1.0.0", - "@metorial-io/ui-product": "^1.0.0", + "@metorial/data-hooks": "workspace:*", + "@metorial/layout": "workspace:*", + "@metorial/ui": "workspace:*", + "@metorial/ui-product": "workspace:*", "@metorial-platform-systems/ares-client": "^1.0.0", "@metorial-platform-systems/function-bay-client": "workspace:*", "@metorial-platform-systems/signal-client": "workspace:*", diff --git a/src/systems/slates/apps/registry/admin/src/components/BackLink.tsx b/src/systems/slates/apps/registry/admin/src/components/BackLink.tsx index fd497740f..1fe3581e4 100644 --- a/src/systems/slates/apps/registry/admin/src/components/BackLink.tsx +++ b/src/systems/slates/apps/registry/admin/src/components/BackLink.tsx @@ -1,5 +1,5 @@ import { Link } from 'react-router-dom'; -import { Button } from '@metorial-io/ui'; +import { Button } from '@metorial/ui'; import { RiArrowLeftLine } from '@remixicon/react'; type BackLinkProps = { diff --git a/src/systems/slates/apps/registry/admin/src/components/Layout.tsx b/src/systems/slates/apps/registry/admin/src/components/Layout.tsx index 9cfe14b0c..a3e29a7e6 100644 --- a/src/systems/slates/apps/registry/admin/src/components/Layout.tsx +++ b/src/systems/slates/apps/registry/admin/src/components/Layout.tsx @@ -1,5 +1,5 @@ -import { Breadcrumbs, ExtraHeaderLayout, LargePaneLayout, SidebarPane } from '@metorial-io/layout'; -import { Logo } from '@metorial-io/ui'; +import { Breadcrumbs, ExtraHeaderLayout, LargePaneLayout, SidebarPane } from '@metorial/layout'; +import { Logo } from '@metorial/ui'; import { RiApps2Line, RiBuildingLine, diff --git a/src/systems/slates/apps/registry/admin/src/components/styled.ts b/src/systems/slates/apps/registry/admin/src/components/styled.ts index 5949ef189..f0eae96de 100644 --- a/src/systems/slates/apps/registry/admin/src/components/styled.ts +++ b/src/systems/slates/apps/registry/admin/src/components/styled.ts @@ -1,5 +1,5 @@ import { styled } from 'styled-components'; -import { Flex } from '@metorial-io/ui'; +import { Flex } from '@metorial/ui'; // Empty state container used in list pages export let EmptyState = styled(Flex)` diff --git a/src/systems/slates/apps/registry/admin/src/hooks/slates.ts b/src/systems/slates/apps/registry/admin/src/hooks/slates.ts index f1dec9f4d..6c7cc1a02 100644 --- a/src/systems/slates/apps/registry/admin/src/hooks/slates.ts +++ b/src/systems/slates/apps/registry/admin/src/hooks/slates.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { useEffect, useMemo, useState } from 'react'; import { adminClient, withAuthRedirect } from './client'; diff --git a/src/systems/slates/apps/registry/admin/src/hooks/subRegistries.ts b/src/systems/slates/apps/registry/admin/src/hooks/subRegistries.ts index 760c1cb49..1234fdacd 100644 --- a/src/systems/slates/apps/registry/admin/src/hooks/subRegistries.ts +++ b/src/systems/slates/apps/registry/admin/src/hooks/subRegistries.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { useMemo, useState } from 'react'; import { adminClient, withAuthRedirect } from './client'; diff --git a/src/systems/slates/apps/registry/admin/src/hooks/tenants.ts b/src/systems/slates/apps/registry/admin/src/hooks/tenants.ts index 50469c72e..51a261bd4 100644 --- a/src/systems/slates/apps/registry/admin/src/hooks/tenants.ts +++ b/src/systems/slates/apps/registry/admin/src/hooks/tenants.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { useMemo, useState } from 'react'; import { adminClient, withAuthRedirect } from './client'; diff --git a/src/systems/slates/apps/registry/admin/src/hooks/users.ts b/src/systems/slates/apps/registry/admin/src/hooks/users.ts index ba5c6a757..d30ee6ff8 100644 --- a/src/systems/slates/apps/registry/admin/src/hooks/users.ts +++ b/src/systems/slates/apps/registry/admin/src/hooks/users.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { useMemo, useState } from 'react'; import { adminClient, withAuthRedirect } from './client'; diff --git a/src/systems/slates/apps/registry/admin/src/hooks/workspaces.ts b/src/systems/slates/apps/registry/admin/src/hooks/workspaces.ts index 178b3b459..24367c550 100644 --- a/src/systems/slates/apps/registry/admin/src/hooks/workspaces.ts +++ b/src/systems/slates/apps/registry/admin/src/hooks/workspaces.ts @@ -1,4 +1,4 @@ -import { createLoader } from '@metorial-io/data-hooks'; +import { createLoader } from '@metorial/data-hooks'; import { useMemo, useState } from 'react'; import { adminClient, withAuthRedirect } from './client'; diff --git a/src/systems/slates/apps/registry/admin/src/main.tsx b/src/systems/slates/apps/registry/admin/src/main.tsx index 0fbf2a793..42fd11768 100644 --- a/src/systems/slates/apps/registry/admin/src/main.tsx +++ b/src/systems/slates/apps/registry/admin/src/main.tsx @@ -1,7 +1,7 @@ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; -import { Toaster } from '@metorial-io/ui'; +import { Toaster } from '@metorial/ui'; import { App } from './App'; import { AuthProvider } from './context/AuthContext'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/slates/SlateBulkCreate.tsx b/src/systems/slates/apps/registry/admin/src/pages/slates/SlateBulkCreate.tsx index df5b9fa7a..494990dfe 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/slates/SlateBulkCreate.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/slates/SlateBulkCreate.tsx @@ -1,6 +1,6 @@ import { useCallback, useRef, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; -import { Badge, Button, Flex, Group, Select, Spacer, Text } from '@metorial-io/ui'; +import { Badge, Button, Flex, Group, Select, Spacer, Text } from '@metorial/ui'; import { BackLink } from '../../components/BackLink'; import { FormWrapper } from '../../components/styled'; import { adminClient, withAuthRedirect } from '../../hooks/client'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/slates/SlateCreate.tsx b/src/systems/slates/apps/registry/admin/src/pages/slates/SlateCreate.tsx index 9cc05c01a..bb6751677 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/slates/SlateCreate.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/slates/SlateCreate.tsx @@ -1,5 +1,5 @@ -import { useForm } from '@metorial-io/data-hooks'; -import { Button, Flex, Group, Select, Spacer, Text } from '@metorial-io/ui'; +import { useForm } from '@metorial/data-hooks'; +import { Button, Flex, Group, Select, Spacer, Text } from '@metorial/ui'; import { useNavigate, useParams } from 'react-router-dom'; import { BackLink } from '../../components/BackLink'; import { FileInput, FormWrapper } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/slates/SlateDetail.tsx b/src/systems/slates/apps/registry/admin/src/pages/slates/SlateDetail.tsx index 9ee4bb049..a06efcba4 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/slates/SlateDetail.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/slates/SlateDetail.tsx @@ -1,5 +1,5 @@ import { useNavigate, useParams } from 'react-router-dom'; -import { renderWithLoader } from '@metorial-io/data-hooks'; +import { renderWithLoader } from '@metorial/data-hooks'; import { Badge, Button, @@ -9,7 +9,7 @@ import { CenteredSpinner, RenderDate, Datalist -} from '@metorial-io/ui'; +} from '@metorial/ui'; import { useSlate, useSlateVersions } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { MonoCode, SlateLogoImage, SlateLogoPlaceholder } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/slates/SlateList.tsx b/src/systems/slates/apps/registry/admin/src/pages/slates/SlateList.tsx index 8750c8e42..b53558e48 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/slates/SlateList.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/slates/SlateList.tsx @@ -1,7 +1,7 @@ import { Link, useNavigate, useParams } from 'react-router-dom'; -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Button, Text, Title, Badge, Flex, Spacer, Group, Input } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Button, Text, Title, Badge, Flex, Spacer, Group, Input } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useEffect, useState } from 'react'; import { useSlates } from '../../hooks'; import { EmptyState, SlateLogoImage, SlateLogoPlaceholder } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/slates/SlatePublish.tsx b/src/systems/slates/apps/registry/admin/src/pages/slates/SlatePublish.tsx index 6c1f09286..c51f66004 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/slates/SlatePublish.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/slates/SlatePublish.tsx @@ -1,6 +1,6 @@ import { useNavigate, useParams } from 'react-router-dom'; -import { renderWithLoader, useForm } from '@metorial-io/data-hooks'; -import { Button, Flex, Group, Text, Select, Callout } from '@metorial-io/ui'; +import { renderWithLoader, useForm } from '@metorial/data-hooks'; +import { Button, Flex, Group, Text, Select, Callout } from '@metorial/ui'; import { usePublishSlate, useSlate } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { FormWrapper, FileInput, MonoCode } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryCreate.tsx b/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryCreate.tsx index 1453bf17b..5c720191d 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryCreate.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryCreate.tsx @@ -1,6 +1,6 @@ import { useNavigate, useParams } from 'react-router-dom'; -import { useForm } from '@metorial-io/data-hooks'; -import { Button, Input, Flex, Group, Spacer } from '@metorial-io/ui'; +import { useForm } from '@metorial/data-hooks'; +import { Button, Input, Flex, Group, Spacer } from '@metorial/ui'; import { useCreateSubRegistry } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { FormWrapper } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryDetail.tsx b/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryDetail.tsx index 7792820a2..da60c83b1 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryDetail.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryDetail.tsx @@ -1,7 +1,7 @@ import { useState } from 'react'; import { useParams } from 'react-router-dom'; -import { renderWithLoader, useForm } from '@metorial-io/data-hooks'; -import { Button, Flex, Text, Group, Badge, Input, Spacer, Datalist, Select, Callout, RenderDate, confirm } from '@metorial-io/ui'; +import { renderWithLoader, useForm } from '@metorial/data-hooks'; +import { Button, Flex, Text, Group, Badge, Input, Spacer, Datalist, Select, Callout, RenderDate, confirm } from '@metorial/ui'; import { useSubRegistry, useTenant, useAddSubRegistryFilter, useRemoveSubRegistryFilter } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { MonoCode, MonoText } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryList.tsx b/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryList.tsx index 19f66b16c..cae11856b 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryList.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/sub-registries/SubRegistryList.tsx @@ -1,7 +1,7 @@ import { useNavigate, useParams } from 'react-router-dom'; -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Avatar, Button, Text, Title, Flex, Spacer, Badge, Group, RenderDate } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Avatar, Button, Text, Title, Flex, Spacer, Badge, Group, RenderDate } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useSubRegistries } from '../../hooks'; import { EmptyState, MonoText } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantCreate.tsx b/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantCreate.tsx index ee1526894..74202db75 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantCreate.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantCreate.tsx @@ -1,6 +1,6 @@ import { useNavigate } from 'react-router-dom'; -import { useForm } from '@metorial-io/data-hooks'; -import { Button, Input, Flex, Group, Spacer } from '@metorial-io/ui'; +import { useForm } from '@metorial/data-hooks'; +import { Button, Input, Flex, Group, Spacer } from '@metorial/ui'; import { useCreateTenant } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { FormWrapper } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantDetail.tsx b/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantDetail.tsx index 1cd5896bc..06bfea426 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantDetail.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantDetail.tsx @@ -1,6 +1,6 @@ import { useParams } from 'react-router-dom'; -import { renderWithLoader } from '@metorial-io/data-hooks'; -import { Flex, Group, Badge as UiBadge, Datalist, RenderDate } from '@metorial-io/ui'; +import { renderWithLoader } from '@metorial/data-hooks'; +import { Flex, Group, Badge as UiBadge, Datalist, RenderDate } from '@metorial/ui'; import { useTenant } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { MonoCode } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantList.tsx b/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantList.tsx index 45accac0e..6ab2af563 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantList.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/tenants/TenantList.tsx @@ -1,7 +1,7 @@ import { useNavigate } from 'react-router-dom'; -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Avatar, Button, Text, Title, Flex, Spacer, Group, RenderDate } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Avatar, Button, Text, Title, Flex, Spacer, Group, RenderDate } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useTenants } from '../../hooks'; import { EmptyState, MonoText } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/users/UserCreate.tsx b/src/systems/slates/apps/registry/admin/src/pages/users/UserCreate.tsx index 9f51d9a77..32be0f517 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/users/UserCreate.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/users/UserCreate.tsx @@ -1,6 +1,6 @@ import { useNavigate, useParams } from 'react-router-dom'; -import { useForm } from '@metorial-io/data-hooks'; -import { Button, Flex, Group, Input, Spacer } from '@metorial-io/ui'; +import { useForm } from '@metorial/data-hooks'; +import { Button, Flex, Group, Input, Spacer } from '@metorial/ui'; import { useCreateUser } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { FormWrapper } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/users/UserDetail.tsx b/src/systems/slates/apps/registry/admin/src/pages/users/UserDetail.tsx index baced2375..91691e16d 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/users/UserDetail.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/users/UserDetail.tsx @@ -1,7 +1,7 @@ import { useState } from 'react'; import { useParams } from 'react-router-dom'; -import { renderWithLoader, useForm } from '@metorial-io/data-hooks'; -import { Button, Flex, Text, Group, Badge, Input, Spacer, Datalist, Callout, RenderDate, Copy, confirm } from '@metorial-io/ui'; +import { renderWithLoader, useForm } from '@metorial/data-hooks'; +import { Button, Flex, Text, Group, Badge, Input, Spacer, Datalist, Callout, RenderDate, Copy, confirm } from '@metorial/ui'; import { useUser, useUserTokens, useCreateUserToken, useRevokeUserToken } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { MonoCode } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/users/UserList.tsx b/src/systems/slates/apps/registry/admin/src/pages/users/UserList.tsx index a5494bf9f..44f498916 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/users/UserList.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/users/UserList.tsx @@ -1,7 +1,7 @@ import { useNavigate, useParams } from 'react-router-dom'; -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Avatar, Button, Text, Title, Badge, Flex, Spacer, Group, RenderDate } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Avatar, Button, Text, Title, Badge, Flex, Spacer, Group, RenderDate } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useUsers } from '../../hooks'; import { EmptyState, MonoText } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceCreate.tsx b/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceCreate.tsx index d65ecef1d..83e0da187 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceCreate.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceCreate.tsx @@ -1,6 +1,6 @@ import { useNavigate, useParams } from 'react-router-dom'; -import { useForm } from '@metorial-io/data-hooks'; -import { Button, Input, Flex, Group, Spacer } from '@metorial-io/ui'; +import { useForm } from '@metorial/data-hooks'; +import { Button, Input, Flex, Group, Spacer } from '@metorial/ui'; import { useCreateWorkspace } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { FormWrapper } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceEdit.tsx b/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceEdit.tsx index fddc92a92..dd888dd62 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceEdit.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceEdit.tsx @@ -1,6 +1,6 @@ import { useNavigate, useParams } from 'react-router-dom'; -import { renderWithLoader, useForm } from '@metorial-io/data-hooks'; -import { Button, Flex, Group, Input } from '@metorial-io/ui'; +import { renderWithLoader, useForm } from '@metorial/data-hooks'; +import { Button, Flex, Group, Input } from '@metorial/ui'; import { useUpdateWorkspace, useWorkspace } from '../../hooks'; import { BackLink } from '../../components/BackLink'; import { FormWrapper, MonoCode } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceList.tsx b/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceList.tsx index 20266355c..bdb3a350c 100644 --- a/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceList.tsx +++ b/src/systems/slates/apps/registry/admin/src/pages/workspaces/WorkspaceList.tsx @@ -1,7 +1,7 @@ import { useNavigate, useParams } from 'react-router-dom'; -import { renderWithPagination } from '@metorial-io/data-hooks'; -import { Avatar, Button, Text, Title, Badge, Flex, Spacer, Group, RenderDate } from '@metorial-io/ui'; -import { Table } from '@metorial-io/ui-product'; +import { renderWithPagination } from '@metorial/data-hooks'; +import { Avatar, Button, Text, Title, Badge, Flex, Spacer, Group, RenderDate } from '@metorial/ui'; +import { Table } from '@metorial/ui-product'; import { useWorkspaces } from '../../hooks'; import { EmptyState, MonoText } from '../../components/styled'; diff --git a/src/systems/slates/apps/registry/package.json b/src/systems/slates/apps/registry/package.json index 7fd65eef1..e2960f63d 100644 --- a/src/systems/slates/apps/registry/package.json +++ b/src/systems/slates/apps/registry/package.json @@ -45,10 +45,10 @@ "@aws-sdk/client-iam": "^3.957.0", "@aws-sdk/client-lambda": "^3.958.0", "@hono/zod-validator": "^0.7.6", - "@metorial-io/data-hooks": "^1.0.1", - "@metorial-io/layout": "^1.0.1", - "@metorial-io/ui": "^1.0.0", - "@metorial-io/ui-product": "^1.0.0", + "@metorial/data-hooks": "workspace:*", + "@metorial/layout": "workspace:*", + "@metorial/ui": "workspace:*", + "@metorial/ui-product": "workspace:*", "@metorial-platform-systems/ares-client": "^1.0.0", "@metorial/util-endpoint": "^1.0.1", "@prisma/adapter-pg": "7.4.2", diff --git a/src/systems/subspace/apps/public/frontend/src/pages/_error/routerError.tsx b/src/systems/subspace/apps/public/frontend/src/pages/_error/routerError.tsx index 20c2afda0..cb8744508 100644 --- a/src/systems/subspace/apps/public/frontend/src/pages/_error/routerError.tsx +++ b/src/systems/subspace/apps/public/frontend/src/pages/_error/routerError.tsx @@ -1,4 +1,4 @@ -import { ErrorPage, NotFound } from '@metorial-io/pages'; +import { ErrorPage, NotFound } from '@metorial/pages'; import { isRouteErrorResponse, useRouteError } from 'react-router-dom'; import { useHideBootSpinner } from '../../hooks/useHideBootSpinner'; diff --git a/src/systems/subspace/apps/public/frontend/src/pages/_error/serviceError.tsx b/src/systems/subspace/apps/public/frontend/src/pages/_error/serviceError.tsx index 8515015ed..c31fe1c60 100644 --- a/src/systems/subspace/apps/public/frontend/src/pages/_error/serviceError.tsx +++ b/src/systems/subspace/apps/public/frontend/src/pages/_error/serviceError.tsx @@ -1,5 +1,5 @@ import { ServiceError } from '@mtsrc/error'; -import { ErrorPage, NotFound } from '@metorial-io/pages'; +import { ErrorPage, NotFound } from '@metorial/pages'; export let ServiceErrorPage = ({ error }: { error: ServiceError }) => { if (error.data.status === 404) return ; diff --git a/src/systems/subspace/apps/public/frontend/src/pages/setupSession/steps/authConfigStep.tsx b/src/systems/subspace/apps/public/frontend/src/pages/setupSession/steps/authConfigStep.tsx index 816ef9200..8a3726b99 100644 --- a/src/systems/subspace/apps/public/frontend/src/pages/setupSession/steps/authConfigStep.tsx +++ b/src/systems/subspace/apps/public/frontend/src/pages/setupSession/steps/authConfigStep.tsx @@ -1,4 +1,4 @@ -import { useForm } from '@metorial-io/data-hooks'; +import { useForm } from '@metorial/data-hooks'; import { Button, Flex } from '@metorial/ui'; import type { JsonSchema } from '../../../lib/jsonSchema'; import { getDefaultValues, schemaToYup } from '../../../lib/jsonSchema'; diff --git a/src/systems/subspace/apps/public/frontend/src/pages/setupSession/steps/configStep.tsx b/src/systems/subspace/apps/public/frontend/src/pages/setupSession/steps/configStep.tsx index 39998d539..31662ff29 100644 --- a/src/systems/subspace/apps/public/frontend/src/pages/setupSession/steps/configStep.tsx +++ b/src/systems/subspace/apps/public/frontend/src/pages/setupSession/steps/configStep.tsx @@ -1,4 +1,4 @@ -import { useForm } from '@metorial-io/data-hooks'; +import { useForm } from '@metorial/data-hooks'; import { Button, Flex } from '@metorial/ui'; import type { JsonSchema } from '../../../lib/jsonSchema'; import { getDefaultValues, schemaToYup } from '../../../lib/jsonSchema'; diff --git a/src/systems/subspace/apps/public/frontend/src/router.tsx b/src/systems/subspace/apps/public/frontend/src/router.tsx index b7c84d57a..279ddd931 100644 --- a/src/systems/subspace/apps/public/frontend/src/router.tsx +++ b/src/systems/subspace/apps/public/frontend/src/router.tsx @@ -1,4 +1,4 @@ -import { ModalRoot, Toaster } from '@metorial-io/ui'; +import { ModalRoot, Toaster } from '@metorial/ui'; import { createBrowserRouter, Outlet, RouterProvider } from 'react-router-dom'; import { RouterErrorPage } from './pages/_error/routerError'; import { IntegrationSetupSessionPage } from './pages/integrationSetupSession'; diff --git a/src/systems/subspace/apps/public/package.json b/src/systems/subspace/apps/public/package.json index dea26d40d..86637fdf1 100644 --- a/src/systems/subspace/apps/public/package.json +++ b/src/systems/subspace/apps/public/package.json @@ -34,8 +34,7 @@ "@hono/zod-validator": "^0.7.6", "@hookform/resolvers": "^5.2.2", "@metorial/data-hooks": "workspace:*", - "@metorial-io/data-hooks": "^1.0.1", - "@metorial-io/pages": "^1.0.0", + "@metorial/pages": "^1.0.0", "@metorial/ui": "workspace:*", "@metorial-subspace/app-controller": "workspace:*", "@metorial-subspace/module-auth": "^1.0.0", From b1260b9cc258aed3ae1a6ed372575a834ac5cc47 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 29 May 2026 10:49:32 +0200 Subject: [PATCH 58/69] fixes --- .github/workflows/test.yml | 16 +++++++++------- nx.json | 13 +++++++++++++ src/packages/frontend/ui/package.json | 12 ++++++++++-- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ccdeb3b9f..8c388ca35 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,19 +24,21 @@ jobs: - name: Install Bun uses: oven-sh/setup-bun@v2 - # - name: Patch bun - # run: mv _package.json package.json - - name: Install Packages run: bun i - name: Generate Prisma Clients run: | - bunx turbo run --ui=stream prisma:generate --filter=!./src/systems/** - bun run --cwd ./src/systems/cargo/db prisma:generate + bun x nx run-many --target=prisma:generate --all --parallel=1 \ + --exclude=@metorial/slates,@metorial/slates-registry,@metorial/synthesis,@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/cargo,@metorial/shuttle,@metorial/origin,@metorial/voyager,@metorial-subspace/app-public,@metorial-subspace/app-controller,@metorial-subspace/app-worker,@metorial-cargo/service,@metorial-cargo/db,@metorial-subspace/db + bun x nx run @metorial-cargo/db:prisma:generate - name: Build Packages - run: bunx turbo run --ui=stream build --filter=!./src/systems/** + run: | + bun x nx run-many --target=build --all --parallel=1 \ + --exclude=@metorial/slates,@metorial/slates-registry,@metorial/synthesis,@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/cargo,@metorial/shuttle,@metorial/origin,@metorial/voyager,@metorial-subspace/app-public,@metorial-subspace/app-controller,@metorial-subspace/app-worker,@metorial-cargo/service - name: Test - run: bunx turbo run --concurrency=1 --ui=stream test --filter=!./src/systems/** + run: | + bun x nx run-many --target=test --all --parallel=1 \ + --exclude=@metorial/slates,@metorial/slates-registry,@metorial/synthesis,@metorial/ares,@metorial/forge,@metorial/function-bay,@metorial/signal,@metorial/cargo,@metorial/shuttle,@metorial/origin,@metorial/voyager,@metorial-subspace/app-public,@metorial-subspace/app-controller,@metorial-subspace/app-worker,@metorial-cargo/service diff --git a/nx.json b/nx.json index 3661449c6..c6cdb57a3 100644 --- a/nx.json +++ b/nx.json @@ -71,6 +71,19 @@ "{projectRoot}/frontend/**/dist/**" ] }, + "admin:build": { + "cache": true, + "dependsOn": [ + "^build" + ], + "inputs": [ + "production", + "^production" + ], + "outputs": [ + "{projectRoot}/dist/admin/**" + ] + }, "worker:build": { "cache": true, "dependsOn": [ diff --git a/src/packages/frontend/ui/package.json b/src/packages/frontend/ui/package.json index d0e50d6c6..9a55ad951 100644 --- a/src/packages/frontend/ui/package.json +++ b/src/packages/frontend/ui/package.json @@ -3,8 +3,16 @@ "version": "1.0.0", "author": "Tobias Herber", "license": "FSL-1.1", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "src/index.ts", + "types": "src/index.ts", + "exports": { + ".": { + "types": "./src/index.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs", + "default": "./src/index.ts" + } + }, "type": "module", "scripts": { "build": "tsup" From a4b6ccf7271e1817fc1d98f0b4711680a743c69c Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 29 May 2026 11:30:05 +0200 Subject: [PATCH 59/69] maybe --- src/packages/frontend/ui/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/packages/frontend/ui/package.json b/src/packages/frontend/ui/package.json index 9a55ad951..bd1e08d75 100644 --- a/src/packages/frontend/ui/package.json +++ b/src/packages/frontend/ui/package.json @@ -8,8 +8,8 @@ "exports": { ".": { "types": "./src/index.ts", - "import": "./dist/index.js", - "require": "./dist/index.cjs", + "import": "./src/index.ts", + "require": "./src/index.ts", "default": "./src/index.ts" } }, From ba7111baa2470b9269b8b2235626ca4475af378d Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 29 May 2026 12:26:09 +0200 Subject: [PATCH 60/69] Update run flow --- .github/workflows/control.yml | 73 ++++++- .github/workflows/reusable-control.yml | 188 ++++++++++++++++++- src/tooling/control/src/cli.ts | 27 ++- src/tooling/control/src/compose/builds.ts | 11 +- src/tooling/control/src/compose/generator.ts | 50 ++++- src/tooling/control/src/run/build.ts | 48 ++++- src/tooling/control/src/run/runner.ts | 35 +++- src/tooling/control/src/types.ts | 4 + 8 files changed, 399 insertions(+), 37 deletions(-) diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index bb4b4fb3a..e5a2d7559 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -7,7 +7,7 @@ on: permissions: contents: read - packages: read + packages: write actions: write jobs: @@ -56,7 +56,7 @@ jobs: e2e: name: E2E (${{ matrix.service }}) - needs: warm-cache + needs: build-images uses: ./.github/workflows/reusable-control.yml secrets: inherit strategy: @@ -88,11 +88,15 @@ jobs: cache_prefix: control-ci project_prefix: ${{ matrix.service }}-ci runs-on: ubuntu-latest + download_image_artifacts: true + image_artifact_pattern: control-image-* + prebuilt_images: true + prebuilt_image_prefix: control checkout_submodules: ${{ matrix.service == 'subspace-controller' }} core-api-e2e: name: E2E (app-api) - needs: warm-cache + needs: build-images uses: ./.github/workflows/reusable-control.yml secrets: inherit with: @@ -103,3 +107,66 @@ jobs: cache_prefix: control-ci project_prefix: app-api-ci runs-on: ubuntu-latest + download_image_artifacts: true + image_artifact_pattern: control-image-* + prebuilt_images: true + prebuilt_image_prefix: control + + build-images: + name: Build Image (${{ matrix.service }}) + needs: unit + uses: ./.github/workflows/reusable-control.yml + secrets: inherit + strategy: + fail-fast: false + matrix: + include: + - service: ares + image: ghcr.io/metorial/mte-ares + - service: cargo + image: ghcr.io/metorial/mte-cargo + - service: code-bucket + image: ghcr.io/metorial/mte-code-bucket + - service: deflector + image: ghcr.io/metorial/mte-deflector + - service: forge + image: ghcr.io/metorial/mte-forge + - service: function-bay + image: ghcr.io/metorial/mte-function-bay + - service: origin + image: ghcr.io/metorial/mte-origin + - service: shuttle + image: ghcr.io/metorial/mte-shuttle + - service: signal + image: ghcr.io/metorial/mte-signal + - service: slates-hub + image: ghcr.io/metorial/mte-slates-hub + - service: slates-registry + image: ghcr.io/metorial/mte-slates-registry + - service: subspace-controller + image: ghcr.io/metorial/mte-subspace-controller + - service: subspace-public + image: ghcr.io/metorial/mte-subspace-public + - service: subspace-worker + image: ghcr.io/metorial/mte-subspace-worker + - service: synthesis + image: ghcr.io/metorial/mte-synthesis + - service: voyager + image: ghcr.io/metorial/mte-voyager + - service: relay + image: ghcr.io/metorial/mte-relay + - service: object-storage + image: ghcr.io/metorial/mte-object-storage + - service: app-api + image: ghcr.io/metorial/metorial-api + with: + command: build + filter: ${{ matrix.service }} + cache_prefix: control-ci + runs-on: ubuntu-latest + image: ${{ matrix.image }} + push_image: ${{ github.event_name != 'pull_request' }} + build_test_runner: true + save_image_artifact: true + image_artifact_name: control-image-${{ matrix.service }} + checkout_submodules: ${{ matrix.service == 'subspace-controller' }} diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index fd795a057..2a5620925 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -54,6 +54,61 @@ on: required: false default: auto type: string + image: + description: 'Image repository for control build' + required: false + default: '' + type: string + image_tag: + description: 'Image tag for control build; defaults to sanitized branch name plus commit SHA' + required: false + default: '' + type: string + push_image: + description: 'Push built images' + required: false + default: false + type: boolean + target_role: + description: 'Control build target role: service or test-runner' + required: false + default: service + type: string + build_test_runner: + description: 'Also build a test-runner image for e2e artifact reuse' + required: false + default: false + type: boolean + save_image_artifact: + description: 'Save built images as a Docker archive artifact' + required: false + default: false + type: boolean + image_artifact_name: + description: 'Artifact name for saved Docker image archive' + required: false + default: '' + type: string + download_image_artifacts: + description: 'Download Docker image archive artifacts before running control' + required: false + default: false + type: boolean + image_artifact_pattern: + description: 'Artifact name pattern for Docker image archives' + required: false + default: '' + type: string + prebuilt_images: + description: 'Run e2e compose with prebuilt control images' + required: false + default: false + type: boolean + prebuilt_image_prefix: + description: 'Image prefix used by prebuilt e2e compose' + required: false + default: control + type: string jobs: control: @@ -61,7 +116,7 @@ jobs: runs-on: ${{ inputs.runs-on }} permissions: contents: read - packages: read + packages: write actions: write steps: @@ -182,6 +237,53 @@ jobs: NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache run: bun i + - name: Compute image tag + id: image-tag + env: + INPUT_IMAGE_TAG: ${{ inputs.image_tag }} + RAW_REF: ${{ github.head_ref || github.ref_name }} + run: | + set -euo pipefail + + if [ -n "${INPUT_IMAGE_TAG}" ]; then + TAG="${INPUT_IMAGE_TAG}" + else + SAFE_REF="$(printf '%s' "${RAW_REF}" | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9_.-' '-' | sed -E 's/^-+//; s/-+$//; s/-+/-/g' | cut -c1-80)" + TAG="${SAFE_REF}-${{ github.sha }}" + fi + + echo "tag=${TAG}" >> "${GITHUB_OUTPUT}" + + - name: Download prebuilt image artifacts + if: ${{ inputs.download_image_artifacts }} + uses: actions/download-artifact@v4 + with: + pattern: ${{ inputs.image_artifact_pattern }} + path: .control/prebuilt-images + merge-multiple: true + + - name: Load prebuilt images + if: ${{ inputs.download_image_artifacts }} + run: | + set -euo pipefail + shopt -s nullglob + archives=(.control/prebuilt-images/*.tar) + if [ "${#archives[@]}" -eq 0 ]; then + echo "No prebuilt image archives found" >&2 + exit 1 + fi + for archive in "${archives[@]}"; do + docker load -i "${archive}" + done + + - name: Log in to GitHub Container Registry + if: ${{ inputs.command == 'build' && inputs.push_image }} + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Expose GitHub Actions cache runtime if: ${{ inputs.enable_cache }} uses: crazy-max/ghaction-github-runtime@v3 @@ -261,32 +363,66 @@ jobs: CONTROL_BUILDKIT_CACHE: '0' CONTROL_DOCKER_CACHE_MOUNTS: '0' CONTROL_NO_STAGE: '1' - CONTROL_PREBUILT_BUILD_ARTIFACTS: '1' + CONTROL_PREBUILT_BUILD_ARTIFACTS: ${{ inputs.prebuilt_images && '0' || '1' }} + CONTROL_PREBUILT_IMAGES: ${{ inputs.prebuilt_images && '1' || '0' }} + CONTROL_PREBUILT_IMAGE_PREFIX: ${{ inputs.prebuilt_image_prefix }} + CONTROL_PREBUILT_IMAGE_TAG: ${{ steps.image-tag.outputs.tag }} CONTROL_NX_REMOTE_CACHE_DOCKER_URL: ${{ inputs.enable_cache && 'http://host.docker.internal:43191' || '' }} CONTROL_VERBOSE: '1' NX_CACHE_DIRECTORY: ${{ github.workspace }}/.nx/cache NX_SELF_HOSTED_REMOTE_CACHE_SERVER: ${{ inputs.enable_cache && 'http://127.0.0.1:43191' || '' }} + CONTROL_IMAGE: ${{ inputs.image }} + CONTROL_IMAGE_TAG: ${{ steps.image-tag.outputs.tag }} + CONTROL_PUSH_IMAGE: ${{ inputs.push_image && '1' || '0' }} + CONTROL_TARGET_ROLE: ${{ inputs.target_role }} + CONTROL_BUILD_TEST_RUNNER: ${{ inputs.build_test_runner && '1' || '0' }} run: | set -euo pipefail - if [ "${{ inputs.command }}" = "build" ]; then - ARGS=(build) + add_selection_args() { if [ "${{ inputs.all }}" = "true" ]; then ARGS+=(--all) elif [ -n "${{ inputs.filter }}" ]; then ARGS+=(--filter "${{ inputs.filter }}") fi + } + + add_build_image_args() { + if [ -n "${CONTROL_IMAGE}" ]; then + ARGS+=(--image "${CONTROL_IMAGE}") + fi + if [ -n "${CONTROL_IMAGE_TAG}" ]; then + ARGS+=(--tag "${CONTROL_IMAGE_TAG}") + fi + if [ "${CONTROL_PUSH_IMAGE}" = "1" ]; then + ARGS+=(--push) + fi + } + + if [ "${{ inputs.command }}" = "build" ]; then + ARGS=(build --target-role "${CONTROL_TARGET_ROLE}") + add_selection_args + add_build_image_args + bun run control "${ARGS[@]}" + + if [ "${CONTROL_BUILD_TEST_RUNNER}" = "1" ]; then + if [ -z "${CONTROL_IMAGE}" ]; then + echo "image is required when build_test_runner is true" >&2 + exit 1 + fi + ARGS=(build --target-role test-runner) + add_selection_args + CONTROL_IMAGE="${{ inputs.image }}-test" + add_build_image_args + bun run control "${ARGS[@]}" + fi elif [ "${{ inputs.command }}" = "ci" ]; then if [ -z "${{ inputs.mode }}" ]; then echo "mode is required when command is ci" >&2 exit 1 fi ARGS=(ci "${{ inputs.mode }}") - if [ "${{ inputs.all }}" = "true" ]; then - ARGS+=(--all) - elif [ -n "${{ inputs.filter }}" ]; then - ARGS+=(--filter "${{ inputs.filter }}") - fi + add_selection_args if [ -n "${{ inputs.project_prefix }}" ]; then ARGS+=(--project-prefix "${{ inputs.project_prefix }}") fi @@ -300,7 +436,39 @@ jobs: exit 1 fi - bun run control "${ARGS[@]}" + if [ "${{ inputs.command }}" != "build" ]; then + bun run control "${ARGS[@]}" + fi + + - name: Save image archive + if: ${{ inputs.save_image_artifact }} + env: + SERVICE: ${{ inputs.filter }} + IMAGE: ${{ inputs.image }} + IMAGE_TAG: ${{ steps.image-tag.outputs.tag }} + run: | + set -euo pipefail + + if [ -z "${SERVICE}" ] || [ -z "${IMAGE}" ] || [ -z "${IMAGE_TAG}" ]; then + echo "filter, image, and image tag are required to save image artifacts" >&2 + exit 1 + fi + + mkdir -p .control/image-artifacts + docker tag "${IMAGE}:${IMAGE_TAG}" "control/${SERVICE}:${IMAGE_TAG}" + docker tag "${IMAGE}-test:${IMAGE_TAG}" "control/${SERVICE}-test:${IMAGE_TAG}" + docker save \ + -o ".control/image-artifacts/${SERVICE}.tar" \ + "control/${SERVICE}:${IMAGE_TAG}" \ + "control/${SERVICE}-test:${IMAGE_TAG}" + + - name: Upload image archive + if: ${{ inputs.save_image_artifact }} + uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.image_artifact_name || format('control-image-{0}', inputs.filter) }} + path: .control/image-artifacts/*.tar + retention-days: 1 - name: Finalize Nx cache bridge if: ${{ always() && inputs.enable_cache }} diff --git a/src/tooling/control/src/cli.ts b/src/tooling/control/src/cli.ts index 8c58acaee..d08442bb3 100755 --- a/src/tooling/control/src/cli.ts +++ b/src/tooling/control/src/cli.ts @@ -63,6 +63,12 @@ let collectModules = (argv: string[]): string[] => .map(value => value.trim()) .filter(Boolean); +let collectTags = (argv: string[]): string[] => + collectRepeatedOption(argv, ['--tag']) + .flatMap(value => value.split(',')) + .map(value => value.trim()) + .filter(Boolean); + let readBooleanOption = (opts: Record, names: string[]): boolean => names.some(name => opts[name] === true); @@ -371,7 +377,7 @@ addRunCommand('unit', 'unit'); prog .command('build [target]') - .describe('Build prod runner Docker images for selected services') + .describe('Build runner Docker images for selected services') .option('--entrypoint, -e', 'Workspace entrypoint') .option('--all', 'Build all services with [service] config') .option('--filter, -f', 'Build named services') @@ -379,9 +385,16 @@ prog .option('--no-stage', 'Build against the live checkout instead of a staged copy') .option('--verbose, -v', 'Verbose output') .option('--tag-prefix', 'Image tag prefix', 'control') + .option('--image', 'Override image repository for the built runner image') + .option('--tag', 'Image tag to apply; repeat or comma-separate for multiple tags') + .option('--push', 'Push built image tags after a successful build') + .option('--target-role', 'Dockerfile target role to build: service or test-runner', 'service') .action(async (target: string | undefined, opts: StagedCliOpts & { all?: boolean; 'tag-prefix'?: string; + image?: string; + push?: boolean; + 'target-role'?: string; filter?: string; }) => { await runCommand(async () => { @@ -399,6 +412,14 @@ prog session }); let filters = collectFilters(process.argv); + let tags = collectTags(process.argv); + if ( + opts['target-role'] && + opts['target-role'] !== 'service' && + opts['target-role'] !== 'test-runner' + ) { + throw new InvalidFlagsError('target-role must be service or test-runner'); + } let services = resolveBuildTargets({ registry, @@ -415,6 +436,10 @@ prog entrypoint: opts.entrypoint, verbose: opts.verbose, tagPrefix: opts['tag-prefix'], + image: opts.image, + tags, + push: !!opts.push, + targetRole: opts['target-role'] === 'test-runner' ? 'test-runner' : 'service', keep: opts.keep, noStage: readNoStageOption(opts), session, diff --git a/src/tooling/control/src/compose/builds.ts b/src/tooling/control/src/compose/builds.ts index 99d2861f7..d142baf96 100644 --- a/src/tooling/control/src/compose/builds.ts +++ b/src/tooling/control/src/compose/builds.ts @@ -104,8 +104,15 @@ export let collectRunnerBuilds = (graph: ResolvedGraph): DockerBuildSpec[] => { return [...specs.values()].sort((a, b) => a.name.localeCompare(b.name)); }; -export let collectServiceRunnerBuilds = (graph: ResolvedGraph): DockerBuildSpec[] => { +export let collectServiceRunnerBuilds = ( + graph: ResolvedGraph, + opts?: { role?: 'test-runner' | 'service'; imageName?: string } +): DockerBuildSpec[] => { let specs = new Map(); - addRunnerBuild(specs, graph.name, graph); + if (!graph.config.service) return []; + + let build = resolveBuild(graph, { role: opts?.role ?? 'service' }); + let key = buildKey(build); + specs.set(key, { name: opts?.imageName ?? graph.name, ...build }); return [...specs.values()]; }; diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index 52de8c0dc..5462a9008 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -12,6 +12,10 @@ export type ComposeOptions = { postgresInitScripts?: Record; buildContexts?: Record>; cacheRoot?: string; + prebuiltImages?: { + prefix: string; + tag: string; + }; }; let networkConfig = (alias: string) => ({ @@ -127,7 +131,19 @@ let composeBuild = ( }; }; -let composeImage = (name: string) => `control/${name}:local`; +let composeImage = (name: string, composeOptions?: ComposeOptions) => { + if (composeOptions?.prebuiltImages) { + return `${composeOptions.prebuiltImages.prefix}/${name}:${composeOptions.prebuiltImages.tag}`; + } + return `control/${name}:local`; +}; + +let testRunnerImage = (name: string, composeOptions?: ComposeOptions) => { + if (composeOptions?.prebuiltImages) { + return `${composeOptions.prebuiltImages.prefix}/${name}-test:${composeOptions.prebuiltImages.tag}`; + } + return composeImage(name, composeOptions); +}; let buildControlService = ( dep: ResolvedDep, @@ -143,8 +159,8 @@ let buildControlService = ( let dependsOn = resolveControlDependsOn(dep, graph); return { - image: composeImage(child.name), - build: composeBuild(child.name, build, composeOptions), + image: composeImage(child.name, composeOptions), + ...(composeOptions?.prebuiltImages ? {} : { build: composeBuild(child.name, build, composeOptions) }), container_name: containerName, restart: 'unless-stopped', environment: resolveControlServiceEnv(dep, graph), @@ -418,14 +434,34 @@ export let generateComposeServices = ( let build = applyBuildContext(graph.name, resolveBuild(graph, { role: 'test-runner' }), composeOptions); let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; - let runnerKey = graph.testRunnerComposeName; - let runnerContainer = isSidecar + let isPrebuilt = !!composeOptions?.prebuiltImages; + let runnerKey = isPrebuilt ? `${graph.rootPrefix}-test` : graph.testRunnerComposeName; + let runnerContainer = isSidecar || isPrebuilt ? containerNameFor(projectName, 'test') : containerNameFor(projectName, 'service'); + if (isPrebuilt) { + let serviceHealth = resolveServiceHealth(graph); + services[graph.serviceComposeName] = { + image: composeImage(graph.name, composeOptions), + container_name: containerNameFor(projectName, 'service'), + restart: 'unless-stopped', + environment: graph.env, + depends_on: dependsOn, + healthcheck: serviceHealth, + networks: networkConfig(graph.name) + }; + dependsOn = { + ...dependsOn, + [graph.serviceComposeName]: { + condition: serviceHealth ? 'service_healthy' : 'service_started' + } + }; + } + services[runnerKey] = { - image: composeImage(graph.name), - build: composeBuild(graph.name, build, composeOptions), + image: testRunnerImage(graph.name, composeOptions), + ...(isPrebuilt ? {} : { build: composeBuild(graph.name, build, composeOptions) }), container_name: runnerContainer, restart: 'unless-stopped', command: ['sh', '-c', 'sleep infinity'], diff --git a/src/tooling/control/src/run/build.ts b/src/tooling/control/src/run/build.ts index c26774c30..9a6ef76a6 100644 --- a/src/tooling/control/src/run/build.ts +++ b/src/tooling/control/src/run/build.ts @@ -20,8 +20,20 @@ type BuildContext = { service: ControlService; }; -let imageTag = (opts: { tagPrefix: string; rootName: string; specName: string }) => - `${opts.tagPrefix}/${opts.rootName}-${opts.specName}:local`; +let legacyImageName = (opts: { tagPrefix: string; rootName: string; specName: string }) => + `${opts.tagPrefix}/${opts.rootName}-${opts.specName}`; + +let imageTags = (opts: { + tagPrefix: string; + rootName: string; + specName: string; + image?: string; + tags?: string[]; +}) => { + let repo = opts.image ?? legacyImageName(opts); + let tags = opts.tags?.length ? opts.tags : ['local']; + return tags.map(tag => `${repo}:${tag}`); +}; let buildCacheDir = (opts: { controlRoot: string; rootName: string; specName: string }) => resolve(opts.controlRoot, '.control', 'cache', 'buildkit', `${opts.rootName}-${opts.specName}`); @@ -64,13 +76,23 @@ let runBuildForService = async ( ); } - let specs = collectServiceRunnerBuilds(graph); + let targetRole = opts.targetRole ?? 'service'; + let specs = collectServiceRunnerBuilds(graph, { + role: targetRole, + imageName: targetRole === 'test-runner' ? `${graph.name}-test` : graph.name + }); logger.info(`Building ${specs.length} runner image(s) for ${graph.name}...`); for (let spec of specs) { let dockerfilePath = resolve(spec.context, spec.dockerfile); let dockerContext = spec.context; - let tag = imageTag({ tagPrefix, rootName: graph.name, specName: spec.name }); + let tags = imageTags({ + tagPrefix, + rootName: graph.name, + specName: spec.name, + image: opts.image, + tags: opts.tags + }); let targetService = registry.byName.get(spec.name); logger.info(`Building ${spec.name} (${spec.target}) ...`); @@ -103,8 +125,11 @@ let runBuildForService = async ( '--target', spec.target, '-t', - tag + tags[0]! ]; + for (let tag of tags.slice(1)) { + cmd.push('-t', tag); + } if (shouldUseBuildCacheExport()) { let cacheDir = buildCacheDir({ controlRoot: registry.controlRoot, @@ -132,7 +157,18 @@ let runBuildForService = async ( verbose: opts.verbose }); - logger.success(`✓ ${tag}`); + if (opts.push) { + for (let tag of tags) { + logger.info(`Pushing ${tag} ...`); + await runShell(['docker', 'push', tag], { + phase: 'build', + service: graph.name, + verbose: opts.verbose + }); + } + } + + logger.success(`✓ ${tags.join(', ')}`); } }; diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index 00b4316c7..ae3d4bd2c 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -213,6 +213,15 @@ let preparePrebuiltBuildArtifacts = async (opts: { } }; +let resolvePrebuiltImages = () => { + if (process.env.CONTROL_PREBUILT_IMAGES !== '1') return undefined; + + return { + prefix: process.env.CONTROL_PREBUILT_IMAGE_PREFIX ?? 'control', + tag: process.env.CONTROL_PREBUILT_IMAGE_TAG ?? 'local' + }; +}; + export let runControl = async ( opts: RunOptions & { target: string; context?: RunControlContext } ) => { @@ -245,7 +254,9 @@ export let runControl = async ( let runDir = join(repoRoot, '.control', 'runs', runId); mkdirSync(runDir, { recursive: true }); - if (shouldUsePrebuiltBuildArtifacts()) { + let prebuiltImages = resolvePrebuiltImages(); + + if (!prebuiltImages && shouldUsePrebuiltBuildArtifacts()) { await preparePrebuiltBuildArtifacts({ graph, registry, @@ -253,11 +264,13 @@ export let runControl = async ( }); } - let buildContexts = await collectMaterializedBuildContexts({ - graph, - registry, - session: opts.session ?? null - }); + let buildContexts = prebuiltImages + ? {} + : await collectMaterializedBuildContexts({ + graph, + registry, + session: opts.session ?? null + }); let postgresInitScripts: Record = {}; for (let dep of graph.deps) { @@ -284,7 +297,8 @@ export let runControl = async ( generateCompose(graph, projectName, { postgresInitScripts, buildContexts, - cacheRoot + cacheRoot, + prebuiltImages }) ); @@ -300,7 +314,7 @@ export let runControl = async ( } let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; - let runnerContainer = isSidecar ? `${projectName}-test` : `${projectName}-service`; + let runnerContainer = isSidecar || prebuiltImages ? `${projectName}-test` : `${projectName}-service`; let failedPhase: RunPhase = 'build'; let composeStack = { projectName, composeFile, cwd: runDir }; if (!opts.keep) registerComposeStack(composeStack); @@ -324,6 +338,11 @@ export let runControl = async ( failedPhase = 'health'; let waitServices = collectContainerNames(graph, projectName); + if (prebuiltImages) { + for (let container of [`${projectName}-service`, `${projectName}-test`]) { + if (!waitServices.includes(container)) waitServices.push(container); + } + } await waitForServices({ services: waitServices, verbose: opts.verbose, logger }); let e2e = graph.config.test?.e2e; diff --git a/src/tooling/control/src/types.ts b/src/tooling/control/src/types.ts index fcccca463..a2e907e04 100644 --- a/src/tooling/control/src/types.ts +++ b/src/tooling/control/src/types.ts @@ -254,6 +254,10 @@ export type BuildOptions = { entrypoint?: string; verbose?: boolean; tagPrefix?: string; + image?: string; + tags?: string[]; + push?: boolean; + targetRole?: 'service' | 'test-runner'; services?: ControlService[]; session?: WorkspaceSession | null; keep?: boolean; From fa57ab4f95e4a8f5c48950c80f59e59e37330947 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Fri, 29 May 2026 13:16:01 +0200 Subject: [PATCH 61/69] Build fixes --- src/tooling/control/src/run/build.ts | 9 ++- .../control/src/run/prebuiltArtifacts.ts | 80 +++++++++++++++++++ src/tooling/control/src/run/runner.ts | 74 +---------------- 3 files changed, 89 insertions(+), 74 deletions(-) create mode 100644 src/tooling/control/src/run/prebuiltArtifacts.ts diff --git a/src/tooling/control/src/run/build.ts b/src/tooling/control/src/run/build.ts index 9a6ef76a6..1a574c3e1 100644 --- a/src/tooling/control/src/run/build.ts +++ b/src/tooling/control/src/run/build.ts @@ -13,6 +13,7 @@ import { formatBatchSummary, formatRunPlan, formatServiceHeader } from '../log/f import { ControlError, DockerError } from '../errors'; import type { BatchResult, BatchServiceResult, BuildOptions, ControlService } from '../types'; import { runShell } from './shell'; +import { preparePrebuiltBuildArtifacts } from './prebuiltArtifacts'; type BuildContext = { index: number; @@ -83,6 +84,12 @@ let runBuildForService = async ( }); logger.info(`Building ${specs.length} runner image(s) for ${graph.name}...`); + await preparePrebuiltBuildArtifacts({ + graph, + registry, + verbose: opts.verbose + }); + for (let spec of specs) { let dockerfilePath = resolve(spec.context, spec.dockerfile); let dockerContext = spec.context; @@ -93,7 +100,7 @@ let runBuildForService = async ( image: opts.image, tags: opts.tags }); - let targetService = registry.byName.get(spec.name); + let targetService = registry.byName.get(graph.name); logger.info(`Building ${spec.name} (${spec.target}) ...`); diff --git a/src/tooling/control/src/run/prebuiltArtifacts.ts b/src/tooling/control/src/run/prebuiltArtifacts.ts new file mode 100644 index 000000000..100ae3902 --- /dev/null +++ b/src/tooling/control/src/run/prebuiltArtifacts.ts @@ -0,0 +1,80 @@ +import { createBuildPlan } from '../builders'; +import { shouldUsePrebuiltBuildArtifacts } from '../builders/base'; +import type { ResolvedGraph, ServiceRegistry } from '../types'; +import { createLogger } from '../log'; +import { runShell } from './shell'; + +let collectBuildGraphs = (graph: ResolvedGraph): ResolvedGraph[] => { + let graphs: ResolvedGraph[] = []; + let seen = new Set(); + + let visit = (graph: ResolvedGraph) => { + if (seen.has(graph.name)) return; + seen.add(graph.name); + graphs.push(graph); + + for (let dep of graph.deps) { + if (dep.kind === 'control' && dep.children) visit(dep.children); + } + }; + + visit(graph); + return graphs; +}; + +export let preparePrebuiltBuildArtifacts = async (opts: { + graph: ResolvedGraph; + registry: ServiceRegistry; + verbose?: boolean; +}) => { + if (!shouldUsePrebuiltBuildArtifacts()) return; + + let logger = createLogger({ verbose: opts.verbose }); + let commands = new Map(); + + for (let graph of collectBuildGraphs(opts.graph)) { + let service = opts.registry.byName.get(graph.name); + if (!service?.config.build || service.config.build.mode === 'custom') continue; + + let plan = createBuildPlan(service, opts.registry); + if (!plan?.project || !plan.target) continue; + + for (let layer of plan.sourceLayers) { + for (let command of layer.commands) { + commands.set(`${plan.contextRoot}:${command}`, { + cwd: plan.contextRoot, + command, + service: service.name + }); + } + } + + for (let automation of plan.automations) { + commands.set(`${plan.contextRoot}:${automation.command}`, { + cwd: plan.contextRoot, + command: automation.command, + service: service.name + }); + } + + let mainCommand = `bun x nx run ${plan.project}:${plan.target}`; + commands.set(`${plan.contextRoot}:${mainCommand}`, { + cwd: plan.contextRoot, + command: mainCommand, + service: service.name + }); + } + + if (commands.size === 0) return; + + logger.info(`Preparing ${commands.size} host build artifact task(s)...`); + for (let { cwd, command, service } of commands.values()) { + logger.debug(`Host build prep (${service}): ${command}`); + await runShell(['sh', '-c', command], { + cwd, + phase: 'build', + service, + verbose: opts.verbose + }); + } +}; diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index ae3d4bd2c..9fa56a040 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -28,6 +28,7 @@ import type { import { runShell } from './shell'; import { runUnitTargets } from './unit'; import type { DockerBuildConfig } from '../compose/builds'; +import { preparePrebuiltBuildArtifacts } from './prebuiltArtifacts'; type RunControlContext = { index: number; @@ -140,79 +141,6 @@ let collectMaterializedBuildContexts = async (opts: { return contexts; }; -let collectBuildGraphs = (graph: ResolvedGraph): ResolvedGraph[] => { - let graphs: ResolvedGraph[] = []; - let seen = new Set(); - - let visit = (graph: ResolvedGraph) => { - if (seen.has(graph.name)) return; - seen.add(graph.name); - graphs.push(graph); - - for (let dep of graph.deps) { - if (dep.kind === 'control' && dep.children) visit(dep.children); - } - }; - - visit(graph); - return graphs; -}; - -let preparePrebuiltBuildArtifacts = async (opts: { - graph: ResolvedGraph; - registry: ServiceRegistry; - verbose?: boolean; -}) => { - let logger = createLogger({ verbose: opts.verbose }); - let commands = new Map(); - - for (let graph of collectBuildGraphs(opts.graph)) { - let service = opts.registry.byName.get(graph.name); - if (!service?.config.build || service.config.build.mode === 'custom') continue; - - let plan = createBuildPlan(service, opts.registry); - if (!plan?.project || !plan.target) continue; - - for (let layer of plan.sourceLayers) { - for (let command of layer.commands) { - commands.set(`${plan.contextRoot}:${command}`, { - cwd: plan.contextRoot, - command, - service: service.name - }); - } - } - - for (let automation of plan.automations) { - commands.set(`${plan.contextRoot}:${automation.command}`, { - cwd: plan.contextRoot, - command: automation.command, - service: service.name - }); - } - - let mainCommand = `bun x nx run ${plan.project}:${plan.target}`; - commands.set(`${plan.contextRoot}:${mainCommand}`, { - cwd: plan.contextRoot, - command: mainCommand, - service: service.name - }); - } - - if (commands.size === 0) return; - - logger.info(`Preparing ${commands.size} host build artifact task(s)...`); - for (let { cwd, command, service } of commands.values()) { - logger.debug(`Host build prep (${service}): ${command}`); - await runShell(['sh', '-c', command], { - cwd, - phase: 'build', - service, - verbose: opts.verbose - }); - } -}; - let resolvePrebuiltImages = () => { if (process.env.CONTROL_PREBUILT_IMAGES !== '1') return undefined; From fd8eb361997f1c961476b9d619f7211414d59374 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 1 Jun 2026 08:59:57 +0200 Subject: [PATCH 62/69] Stop pushing control reuse images Co-authored-by: Cursor --- .github/workflows/control.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/control.yml b/.github/workflows/control.yml index e5a2d7559..1d812cd18 100644 --- a/.github/workflows/control.yml +++ b/.github/workflows/control.yml @@ -165,7 +165,7 @@ jobs: cache_prefix: control-ci runs-on: ubuntu-latest image: ${{ matrix.image }} - push_image: ${{ github.event_name != 'pull_request' }} + push_image: false build_test_runner: true save_image_artifact: true image_artifact_name: control-image-${{ matrix.service }} From 07279fdecb26846f96d4fe87d146c0b281992887 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 1 Jun 2026 09:26:09 +0200 Subject: [PATCH 63/69] Limit control image artifact downloads Co-authored-by: Cursor --- .github/workflows/reusable-control.yml | 55 ++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 2a5620925..6f0b7c02f 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -256,18 +256,59 @@ jobs: - name: Download prebuilt image artifacts if: ${{ inputs.download_image_artifacts }} - uses: actions/download-artifact@v4 - with: - pattern: ${{ inputs.image_artifact_pattern }} - path: .control/prebuilt-images - merge-multiple: true + env: + GH_TOKEN: ${{ github.token }} + ARTIFACT_PATTERN: ${{ inputs.image_artifact_pattern }} + FILTER: ${{ inputs.filter }} + run: | + set -euo pipefail + + mkdir -p .control/prebuilt-images + + if [ "${ARTIFACT_PATTERN}" != "control-image-*" ]; then + gh run download "${{ github.run_id }}" \ + --pattern "${ARTIFACT_PATTERN}" \ + --dir .control/prebuilt-images + exit 0 + fi + + if [ -z "${FILTER}" ]; then + echo "filter is required to resolve prebuilt image artifacts" >&2 + exit 1 + fi + + GRAPH_FILE=".control/prebuilt-images/graph.json" + ARTIFACTS_FILE=".control/prebuilt-images/artifacts.txt" + + bun run control graph "${FILTER}" > "${GRAPH_FILE}" + bun -e ' + let graph = JSON.parse(await Bun.file(process.argv.at(-1)).text()); + let names = new Set(); + let visit = graph => { + names.add(graph.name); + for (let dep of graph.deps ?? []) { + if (dep.kind === "control" && dep.children) visit(dep.children); + } + }; + visit(graph); + console.log([...names].sort().join("\n")); + ' "${GRAPH_FILE}" > "${ARTIFACTS_FILE}" + + while IFS= read -r service; do + if [ -z "${service}" ]; then + continue + fi + gh run download "${{ github.run_id }}" \ + --name "control-image-${service}" \ + --dir .control/prebuilt-images + done < "${ARTIFACTS_FILE}" - name: Load prebuilt images if: ${{ inputs.download_image_artifacts }} run: | set -euo pipefail - shopt -s nullglob - archives=(.control/prebuilt-images/*.tar) + shopt -s globstar nullglob + archives=(.control/prebuilt-images/*.tar .control/prebuilt-images/**/*.tar) if [ "${#archives[@]}" -eq 0 ]; then echo "No prebuilt image archives found" >&2 exit 1 From cfa1e48c5ee0cadf03c85e317c58fb91833f46c2 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 1 Jun 2026 09:41:26 +0200 Subject: [PATCH 64/69] Fix object storage control env Co-authored-by: Cursor --- src/systems/object-storage/service/Dockerfile | 6 ++++-- src/systems/object-storage/service/control.toml | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/systems/object-storage/service/Dockerfile b/src/systems/object-storage/service/Dockerfile index ccb645832..233493d4e 100644 --- a/src/systems/object-storage/service/Dockerfile +++ b/src/systems/object-storage/service/Dockerfile @@ -32,8 +32,10 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ curl && rm -rf /var/lib/apt/lists/* COPY --from=build /app/src/systems/object-storage/service/target/release/object-store-service /app/object-store-service ENV RUST_LOG="info" -ENV OBJECT_STORE_BACKEND_TYPE="local" -ENV OBJECT_STORE_BACKEND_ROOT_PATH="/app/data" +ENV OBJECT_STORE_SERVER__HOST="0.0.0.0" +ENV OBJECT_STORE_SERVER__PORT="52010" +ENV OBJECT_STORE_BACKEND__TYPE="local" +ENV OBJECT_STORE_BACKEND__ROOT_PATH="/app/data" EXPOSE 52010 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:52010/health || exit 1 diff --git a/src/systems/object-storage/service/control.toml b/src/systems/object-storage/service/control.toml index 3706a5f21..4a756a920 100644 --- a/src/systems/object-storage/service/control.toml +++ b/src/systems/object-storage/service/control.toml @@ -48,7 +48,7 @@ copy = [ [build.runtime] base_image = "debian:trixie-slim" packages = ["ca-certificates", "libssl3", "curl"] -env = { RUST_LOG = "info", OBJECT_STORE_BACKEND_TYPE = "local", OBJECT_STORE_BACKEND_ROOT_PATH = "/app/data" } +env = { RUST_LOG = "info", OBJECT_STORE_SERVER__HOST = "0.0.0.0", OBJECT_STORE_SERVER__PORT = "52010", OBJECT_STORE_BACKEND__TYPE = "local", OBJECT_STORE_BACKEND__ROOT_PATH = "/app/data" } expose = [52010] command = "/app/object-store-service" healthcheck = "curl -f http://localhost:52010/health || exit 1" @@ -64,5 +64,7 @@ runner = "service" [env] RUST_LOG = "info" -OBJECT_STORE_BACKEND_TYPE = "local" -OBJECT_STORE_BACKEND_ROOT_PATH = "/app/data" +OBJECT_STORE_SERVER__HOST = "0.0.0.0" +OBJECT_STORE_SERVER__PORT = "52010" +OBJECT_STORE_BACKEND__TYPE = "local" +OBJECT_STORE_BACKEND__ROOT_PATH = "/app/data" From 1f1ec1e953f55828cfac91f80927f4c68dd27b97 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:28:00 +0200 Subject: [PATCH 65/69] Fix control prebuilt healthchecks Co-authored-by: Cursor --- src/tooling/control/src/compose/generator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index 5462a9008..af15715b6 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -27,7 +27,7 @@ let networkConfig = (alias: string) => ({ let defaultServiceHealth = (port: number, path = '/') => ({ test: [ 'CMD-SHELL', - `bun -e "fetch('http://localhost:${port}${path}').then(()=>process.exit(0)).catch(()=>process.exit(1))"` + `if command -v curl >/dev/null 2>&1; then curl -fsS http://localhost:${port}${path} >/dev/null; elif command -v wget >/dev/null 2>&1; then wget -qO- http://localhost:${port}${path} >/dev/null; else bun -e "fetch('http://localhost:${port}${path}').then(()=>process.exit(0)).catch(()=>process.exit(1))"; fi` ], interval: '5s', timeout: '5s', From 0b449cbb19c26861a23222e7f2124a734dc59db4 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 1 Jun 2026 13:06:02 +0200 Subject: [PATCH 66/69] Preserve control service runner reuse Co-authored-by: Cursor --- .../control/src/compose/generator.test.ts | 53 +++++++++++++++++++ src/tooling/control/src/compose/generator.ts | 6 +-- src/tooling/control/src/run/runner.ts | 4 +- 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 src/tooling/control/src/compose/generator.test.ts diff --git a/src/tooling/control/src/compose/generator.test.ts b/src/tooling/control/src/compose/generator.test.ts new file mode 100644 index 000000000..8ec420f09 --- /dev/null +++ b/src/tooling/control/src/compose/generator.test.ts @@ -0,0 +1,53 @@ +import { describe, expect, it } from 'bun:test'; +import { generateComposeServices } from './generator'; +import type { ResolvedGraph } from '../types'; + +let graph = (runner: 'service' | 'sidecar'): ResolvedGraph => ({ + name: 'example', + dir: '/repo/src/systems/example/service', + entrypoint: '/repo', + ossRoot: '/repo', + rootPrefix: 'example', + deps: [], + depHosts: {}, + databases: {}, + env: { + DATABASE_URL: 'postgresql://postgres:postgres@postgres:5432/postgres' + }, + serviceComposeName: 'example-service', + testRunnerComposeName: runner === 'sidecar' ? 'example-test' : 'example-service', + config: { + control: { name: 'example' }, + service: { port: 52000 }, + test: { + e2e: { + command: 'bun test', + runner + } + } + } +}); + +describe('generateComposeServices', () => { + it('keeps prebuilt service-runner tests in the service container', () => { + let { services } = generateComposeServices(graph('service'), 'example-ci', { + prebuiltImages: { prefix: 'control', tag: 'test-tag' } + }); + + expect(Object.keys(services).sort()).toEqual(['example-service']); + expect(services['example-service'].image).toBe('control/example-test:test-tag'); + expect(services['example-service'].container_name).toBe('example-ci-service'); + expect(services['example-service'].healthcheck).toBeUndefined(); + }); + + it('keeps prebuilt sidecar tests split from the service container', () => { + let { services } = generateComposeServices(graph('sidecar'), 'example-ci', { + prebuiltImages: { prefix: 'control', tag: 'test-tag' } + }); + + expect(Object.keys(services).sort()).toEqual(['example-service', 'example-test']); + expect(services['example-service'].image).toBe('control/example:test-tag'); + expect(services['example-test'].image).toBe('control/example-test:test-tag'); + expect(services['example-test'].container_name).toBe('example-ci-test'); + }); +}); diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index af15715b6..c9de88118 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -435,12 +435,12 @@ export let generateComposeServices = ( let build = applyBuildContext(graph.name, resolveBuild(graph, { role: 'test-runner' }), composeOptions); let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; let isPrebuilt = !!composeOptions?.prebuiltImages; - let runnerKey = isPrebuilt ? `${graph.rootPrefix}-test` : graph.testRunnerComposeName; - let runnerContainer = isSidecar || isPrebuilt + let runnerKey = isPrebuilt && isSidecar ? `${graph.rootPrefix}-test` : graph.testRunnerComposeName; + let runnerContainer = isSidecar ? containerNameFor(projectName, 'test') : containerNameFor(projectName, 'service'); - if (isPrebuilt) { + if (isPrebuilt && isSidecar) { let serviceHealth = resolveServiceHealth(graph); services[graph.serviceComposeName] = { image: composeImage(graph.name, composeOptions), diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index 9fa56a040..142e3a22b 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -242,7 +242,7 @@ export let runControl = async ( } let isSidecar = graph.config.test?.e2e?.runner === 'sidecar'; - let runnerContainer = isSidecar || prebuiltImages ? `${projectName}-test` : `${projectName}-service`; + let runnerContainer = isSidecar ? `${projectName}-test` : `${projectName}-service`; let failedPhase: RunPhase = 'build'; let composeStack = { projectName, composeFile, cwd: runDir }; if (!opts.keep) registerComposeStack(composeStack); @@ -266,7 +266,7 @@ export let runControl = async ( failedPhase = 'health'; let waitServices = collectContainerNames(graph, projectName); - if (prebuiltImages) { + if (prebuiltImages && isSidecar) { for (let container of [`${projectName}-service`, `${projectName}-test`]) { if (!waitServices.includes(container)) waitServices.push(container); } From 85c1d070af40521f8f45e76308f7fc370dc87a6b Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 1 Jun 2026 14:46:21 +0200 Subject: [PATCH 67/69] Fix control prebuilt e2e loading Co-authored-by: Cursor --- .github/workflows/reusable-control.yml | 2 +- src/tooling/control/src/run/runner.ts | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 6f0b7c02f..46d3ee0ab 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -308,7 +308,7 @@ jobs: run: | set -euo pipefail shopt -s globstar nullglob - archives=(.control/prebuilt-images/*.tar .control/prebuilt-images/**/*.tar) + archives=(.control/prebuilt-images/**/*.tar) if [ "${#archives[@]}" -eq 0 ]; then echo "No prebuilt image archives found" >&2 exit 1 diff --git a/src/tooling/control/src/run/runner.ts b/src/tooling/control/src/run/runner.ts index 142e3a22b..1bd173d01 100644 --- a/src/tooling/control/src/run/runner.ts +++ b/src/tooling/control/src/run/runner.ts @@ -141,6 +141,20 @@ let collectMaterializedBuildContexts = async (opts: { return contexts; }; +let hasInlineBuild = (graph: ResolvedGraph): boolean => { + for (let dep of graph.deps) { + if (dep.kind === 'inline' && typeof dep.config.inline === 'object' && dep.config.inline.build) { + return true; + } + + if (dep.kind === 'control' && dep.children && hasInlineBuild(dep.children)) { + return true; + } + } + + return false; +}; + let resolvePrebuiltImages = () => { if (process.env.CONTROL_PREBUILT_IMAGES !== '1') return undefined; @@ -192,7 +206,7 @@ export let runControl = async ( }); } - let buildContexts = prebuiltImages + let buildContexts = prebuiltImages && !hasInlineBuild(graph) ? {} : await collectMaterializedBuildContexts({ graph, From f20fcda886f55fb56e50047e25443b0816122f00 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Mon, 1 Jun 2026 17:08:31 +0200 Subject: [PATCH 68/69] Fix control Forge health reuse Co-authored-by: Cursor --- src/systems/forge/service/Dockerfile | 2 +- src/systems/forge/service/control.toml | 2 +- src/systems/forge/service/src/endpoints.ts | 8 ++++- .../control/src/compose/generator.test.ts | 35 +++++++++++++++++++ src/tooling/control/src/compose/generator.ts | 12 +++++-- 5 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/systems/forge/service/Dockerfile b/src/systems/forge/service/Dockerfile index 0cc6097d0..dadbad70e 100644 --- a/src/systems/forge/service/Dockerfile +++ b/src/systems/forge/service/Dockerfile @@ -35,5 +35,5 @@ COPY --from=build /app/src/systems/forge/service/prisma.config.ts /app/prisma.co ENV NODE_ENV="development" EXPOSE 52020 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:52020/ping && curl -f http://localhost:12121/ || exit 1 + CMD curl -f http://localhost:52020/ping || exit 1 CMD ["sh", "-c", "bun prisma db push --accept-data-loss && bun /app/dist/index.js"] diff --git a/src/systems/forge/service/control.toml b/src/systems/forge/service/control.toml index d1506d2a5..ba57144a8 100644 --- a/src/systems/forge/service/control.toml +++ b/src/systems/forge/service/control.toml @@ -33,7 +33,7 @@ packages = ["curl"] env = { NODE_ENV = "development" } expose = [52020] command = "bun prisma db push --accept-data-loss && bun /app/dist/index.js" -healthcheck = "curl -f http://localhost:52020/ping && curl -f http://localhost:12121/ || exit 1" +healthcheck = "curl -f http://localhost:52020/ping || exit 1" [test.unit] command = "bun run test:unit" diff --git a/src/systems/forge/service/src/endpoints.ts b/src/systems/forge/service/src/endpoints.ts index 0e4af1253..3b3bf52d7 100644 --- a/src/systems/forge/service/src/endpoints.ts +++ b/src/systems/forge/service/src/endpoints.ts @@ -2,8 +2,14 @@ import { RedisClient } from 'bun'; import { forgeApi } from './controllers'; import { db } from './db'; +let serveApi: typeof forgeApi = (request, server) => { + let url = new URL(request.url); + if (url.pathname === '/ping') return new Response('OK'); + return forgeApi(request, server); +}; + let server = Bun.serve({ - fetch: forgeApi, + fetch: serveApi, port: 52020 }); diff --git a/src/tooling/control/src/compose/generator.test.ts b/src/tooling/control/src/compose/generator.test.ts index 8ec420f09..d137a0949 100644 --- a/src/tooling/control/src/compose/generator.test.ts +++ b/src/tooling/control/src/compose/generator.test.ts @@ -29,6 +29,41 @@ let graph = (runner: 'service' | 'sidecar'): ResolvedGraph => ({ }); describe('generateComposeServices', () => { + it('uses generated runtime healthchecks for prebuilt service dependencies', () => { + let dependencyGraph = graph('service'); + dependencyGraph.config.build = { + builder: 'node', + runtime: { + healthcheck: 'curl -f http://localhost:52020/ping || exit 1' + } + }; + + let parent = graph('sidecar'); + parent.deps = [ + { + key: 'forge', + name: 'forge', + composeName: 'example-forge', + alias: 'forge', + kind: 'control', + config: { name: 'forge', control: '../forge', scope: 'service' }, + sourceDir: '/repo/src/systems/example/service', + children: dependencyGraph + } + ]; + + let { services } = generateComposeServices(parent, 'example-ci', { + prebuiltImages: { prefix: 'control', tag: 'test-tag' } + }); + + expect(services['example-forge'].healthcheck).toEqual({ + test: ['CMD-SHELL', 'curl -f http://localhost:52020/ping || exit 1'], + interval: '5s', + timeout: '5s', + retries: 20 + }); + }); + it('keeps prebuilt service-runner tests in the service container', () => { let { services } = generateComposeServices(graph('service'), 'example-ci', { prebuiltImages: { prefix: 'control', tag: 'test-tag' } diff --git a/src/tooling/control/src/compose/generator.ts b/src/tooling/control/src/compose/generator.ts index c9de88118..08d10ff4d 100644 --- a/src/tooling/control/src/compose/generator.ts +++ b/src/tooling/control/src/compose/generator.ts @@ -36,10 +36,18 @@ let defaultServiceHealth = (port: number, path = '/') => ({ let resolveServiceHealth = (graph: ResolvedGraph) => { let svc = graph.config.service; - if (!svc?.port) return undefined; - if (svc.health?.cmd) { + if (svc?.health?.cmd) { return { test: ['CMD-SHELL', svc.health.cmd], interval: '5s', timeout: '5s', retries: 20 }; } + if (graph.config.build?.runtime?.healthcheck) { + return { + test: ['CMD-SHELL', graph.config.build.runtime.healthcheck], + interval: '5s', + timeout: '5s', + retries: 20 + }; + } + if (!svc?.port) return undefined; return defaultServiceHealth(svc.port, svc.health?.path ?? '/'); }; From 4b3e0205886222afa0e38b4fcc9276f2f700f424 Mon Sep 17 00:00:00 2001 From: Tobias Herber <22559657+herber@users.noreply.github.com> Date: Tue, 2 Jun 2026 08:56:32 +0200 Subject: [PATCH 69/69] Update artifact downloader --- .github/workflows/reusable-control.yml | 90 ++++++++++++++++++-------- 1 file changed, 62 insertions(+), 28 deletions(-) diff --git a/.github/workflows/reusable-control.yml b/.github/workflows/reusable-control.yml index 46d3ee0ab..08ccc6b5d 100644 --- a/.github/workflows/reusable-control.yml +++ b/.github/workflows/reusable-control.yml @@ -254,7 +254,7 @@ jobs: echo "tag=${TAG}" >> "${GITHUB_OUTPUT}" - - name: Download prebuilt image artifacts + - name: Download and load prebuilt image artifacts if: ${{ inputs.download_image_artifacts }} env: GH_TOKEN: ${{ github.token }} @@ -262,13 +262,30 @@ jobs: FILTER: ${{ inputs.filter }} run: | set -euo pipefail + shopt -s globstar nullglob mkdir -p .control/prebuilt-images + load_archives_from_dir() { + local dir="$1" + local archives=("${dir}"/**/*.tar) + if [ "${#archives[@]}" -eq 0 ]; then + echo "No prebuilt image archives found in ${dir}" >&2 + exit 1 + fi + for archive in "${archives[@]}"; do + docker load -i "${archive}" + rm -f "${archive}" + done + } + if [ "${ARTIFACT_PATTERN}" != "control-image-*" ]; then + DOWNLOAD_DIR="$(mktemp -d .control/prebuilt-images/custom.XXXXXX)" gh run download "${{ github.run_id }}" \ --pattern "${ARTIFACT_PATTERN}" \ - --dir .control/prebuilt-images + --dir "${DOWNLOAD_DIR}" + load_archives_from_dir "${DOWNLOAD_DIR}" + rm -rf "${DOWNLOAD_DIR}" exit 0 fi @@ -278,44 +295,59 @@ jobs: fi GRAPH_FILE=".control/prebuilt-images/graph.json" - ARTIFACTS_FILE=".control/prebuilt-images/artifacts.txt" + LOAD_PLAN_FILE=".control/prebuilt-images/load-plan.tsv" bun run control graph "${FILTER}" > "${GRAPH_FILE}" bun -e ' let graph = JSON.parse(await Bun.file(process.argv.at(-1)).text()); - let names = new Set(); - let visit = graph => { - names.add(graph.name); + let rows = []; + let seen = new Set(); + let add = (service, archive) => { + let key = `${service}\t${archive}`; + if (seen.has(key)) return; + seen.add(key); + rows.push([service, archive]); + }; + let visitDeps = graph => { for (let dep of graph.deps ?? []) { - if (dep.kind === "control" && dep.children) visit(dep.children); + if (dep.kind === "control" && dep.children) { + add(dep.children.name, `${dep.children.name}.tar`); + visitDeps(dep.children); + } } }; - visit(graph); - console.log([...names].sort().join("\n")); - ' "${GRAPH_FILE}" > "${ARTIFACTS_FILE}" + visitDeps(graph); + + let runner = graph.config?.test?.e2e?.runner ?? "service"; + if (runner === "sidecar") add(graph.name, `${graph.name}.tar`); + add(graph.name, `${graph.name}-test.tar`); + + rows.sort(([aService, aArchive], [bService, bArchive]) => + aService.localeCompare(bService) || aArchive.localeCompare(bArchive) + ); + console.log(rows.map(row => row.join("\t")).join("\n")); + ' "${GRAPH_FILE}" > "${LOAD_PLAN_FILE}" - while IFS= read -r service; do - if [ -z "${service}" ]; then + while IFS=$'\t' read -r service archive; do + if [ -z "${service}" ] || [ -z "${archive}" ]; then continue fi + + DOWNLOAD_DIR="$(mktemp -d ".control/prebuilt-images/${service}.XXXXXX")" gh run download "${{ github.run_id }}" \ --name "control-image-${service}" \ - --dir .control/prebuilt-images - done < "${ARTIFACTS_FILE}" + --dir "${DOWNLOAD_DIR}" - - name: Load prebuilt images - if: ${{ inputs.download_image_artifacts }} - run: | - set -euo pipefail - shopt -s globstar nullglob - archives=(.control/prebuilt-images/**/*.tar) - if [ "${#archives[@]}" -eq 0 ]; then - echo "No prebuilt image archives found" >&2 - exit 1 - fi - for archive in "${archives[@]}"; do - docker load -i "${archive}" - done + matches=("${DOWNLOAD_DIR}"/**/"${archive}") + if [ "${#matches[@]}" -eq 0 ]; then + echo "Expected archive ${archive} in artifact control-image-${service}" >&2 + rm -rf "${DOWNLOAD_DIR}" + exit 1 + fi + + docker load -i "${matches[0]}" + rm -rf "${DOWNLOAD_DIR}" + done < "${LOAD_PLAN_FILE}" - name: Log in to GitHub Container Registry if: ${{ inputs.command == 'build' && inputs.push_image }} @@ -500,7 +532,9 @@ jobs: docker tag "${IMAGE}-test:${IMAGE_TAG}" "control/${SERVICE}-test:${IMAGE_TAG}" docker save \ -o ".control/image-artifacts/${SERVICE}.tar" \ - "control/${SERVICE}:${IMAGE_TAG}" \ + "control/${SERVICE}:${IMAGE_TAG}" + docker save \ + -o ".control/image-artifacts/${SERVICE}-test.tar" \ "control/${SERVICE}-test:${IMAGE_TAG}" - name: Upload image archive